diff --git a/Makefile b/Makefile index 39537590f..8e1e367fe 100644 --- a/Makefile +++ b/Makefile @@ -16,14 +16,9 @@ endif cp ./cmd/vmserver/vmserver ${VMSERVER_PATH} test: - go clean -cache -testcache - VMEXECUTOR="wasmer1" go test ./... go clean -cache -testcache VMEXECUTOR="wasmer2" go test ./... -test-w1: clean - VMEXECUTOR="wasmer1" go test ./... - test-w2: clean VMEXECUTOR="wasmer2" go test ./... diff --git a/cmd/scenariostest/scenariosTest.go b/cmd/scenariostest/scenariosTest.go index 468c56abe..caa7dba29 100644 --- a/cmd/scenariostest/scenariosTest.go +++ b/cmd/scenariostest/scenariosTest.go @@ -3,9 +3,7 @@ package main import ( scenclibase "github.com/multiversx/mx-chain-scenario-go/clibase" scenio "github.com/multiversx/mx-chain-scenario-go/scenario/io" - vmscenario "github.com/multiversx/mx-chain-vm-go/scenario" - "github.com/multiversx/mx-chain-vm-go/wasmer" "github.com/multiversx/mx-chain-vm-go/wasmer2" cli "github.com/urfave/cli/v2" ) @@ -42,9 +40,6 @@ func (*vm15Flags) ParseFlags(cCtx *cli.Context) scenclibase.CLIRunOptions { } vmBuilder := vmscenario.NewScenarioVMHostBuilder() - if cCtx.Bool("wasmer1") { - vmBuilder.OverrideVMExecutor = wasmer.ExecutorFactory() - } if cCtx.Bool("wasmer2") { vmBuilder.OverrideVMExecutor = wasmer2.ExecutorFactory() } diff --git a/config/config.toml b/config/config.toml index ea07b524c..98eecd6c6 100644 --- a/config/config.toml +++ b/config/config.toml @@ -184,6 +184,10 @@ MBufferToBigIntSigned = 10 MBufferFromBigIntUnsigned = 10 MBufferFromBigIntSigned = 10 + MBufferToSmallIntUnsigned = 10 + MBufferToSmallIntSigned = 10 + MBufferFromSmallIntUnsigned = 10 + MBufferFromSmallIntSigned = 10 MBufferToBigFloat = 10 MBufferFromBigFloat = 10 MBufferStorageStore = 10 diff --git a/config/gasCost.go b/config/gasCost.go index 2682e4af0..5d2d213e5 100644 --- a/config/gasCost.go +++ b/config/gasCost.go @@ -82,7 +82,7 @@ type BaseOpsAPICost struct { DeleteFromReturnData uint64 GetCodeMetadata uint64 IsBuiltinFunction uint64 - IsReservedFunctionName uint64 + IsReservedFunctionName uint64 } // DynamicStorageLoadCostCoefficients holds the signed coefficients of the func that will compute the gas cost @@ -198,26 +198,30 @@ type CryptoAPICost struct { // ManagedBufferAPICost defines the managed buffer operations gas cost config structure type ManagedBufferAPICost struct { - MBufferNew uint64 - MBufferNewFromBytes uint64 - MBufferGetLength uint64 - MBufferGetBytes uint64 - MBufferGetByteSlice uint64 - MBufferCopyByteSlice uint64 - MBufferSetBytes uint64 - MBufferAppend uint64 - MBufferAppendBytes uint64 - MBufferToBigIntUnsigned uint64 - MBufferToBigIntSigned uint64 - MBufferFromBigIntUnsigned uint64 - MBufferFromBigIntSigned uint64 - MBufferToBigFloat uint64 - MBufferFromBigFloat uint64 - MBufferStorageStore uint64 - MBufferStorageLoad uint64 - MBufferGetArgument uint64 - MBufferFinish uint64 - MBufferSetRandom uint64 + MBufferNew uint64 + MBufferNewFromBytes uint64 + MBufferGetLength uint64 + MBufferGetBytes uint64 + MBufferGetByteSlice uint64 + MBufferCopyByteSlice uint64 + MBufferSetBytes uint64 + MBufferAppend uint64 + MBufferAppendBytes uint64 + MBufferToBigIntUnsigned uint64 + MBufferToBigIntSigned uint64 + MBufferFromBigIntUnsigned uint64 + MBufferFromBigIntSigned uint64 + MBufferToSmallIntUnsigned uint64 + MBufferToSmallIntSigned uint64 + MBufferFromSmallIntUnsigned uint64 + MBufferFromSmallIntSigned uint64 + MBufferToBigFloat uint64 + MBufferFromBigFloat uint64 + MBufferStorageStore uint64 + MBufferStorageLoad uint64 + MBufferGetArgument uint64 + MBufferFinish uint64 + MBufferSetRandom uint64 } // ManagedMapAPICost defines the managed map operations gas cost config structure diff --git a/config/gasSchedule.go b/config/gasSchedule.go index 30dc4c3a8..60ef83c3b 100644 --- a/config/gasSchedule.go +++ b/config/gasSchedule.go @@ -469,6 +469,10 @@ func FillGasMapManagedBufferAPICosts(value uint64) map[string]uint64 { gasMap["MBufferAppend"] = value gasMap["MBufferAppendBytes"] = value gasMap["MBufferToBigIntUnsigned"] = value + gasMap["MBufferToSmallIntUnsigned"] = value + gasMap["MBufferToSmallIntSigned"] = value + gasMap["MBufferFromSmallIntUnsigned"] = value + gasMap["MBufferFromSmallIntSigned"] = value gasMap["MBufferToBigIntSigned"] = value gasMap["MBufferFromBigIntUnsigned"] = value gasMap["MBufferFromBigIntSigned"] = value diff --git a/executor/vmHooks.go b/executor/vmHooks.go index 35cc52b42..c32d718a3 100644 --- a/executor/vmHooks.go +++ b/executor/vmHooks.go @@ -227,6 +227,10 @@ type ManagedBufferVMHooks interface { MBufferToBigIntSigned(mBufferHandle int32, bigIntHandle int32) int32 MBufferFromBigIntUnsigned(mBufferHandle int32, bigIntHandle int32) int32 MBufferFromBigIntSigned(mBufferHandle int32, bigIntHandle int32) int32 + MBufferToSmallIntUnsigned(mBufferHandle int32) int64 + MBufferToSmallIntSigned(mBufferHandle int32) int64 + MBufferFromSmallIntUnsigned(mBufferHandle int32, value int64) + MBufferFromSmallIntSigned(mBufferHandle int32, value int64) MBufferToBigFloat(mBufferHandle int32, bigFloatHandle int32) int32 MBufferFromBigFloat(mBufferHandle int32, bigFloatHandle int32) int32 MBufferStorageStore(keyHandle int32, sourceHandle int32) int32 diff --git a/executor/wrapper/wrapperVMHooks.go b/executor/wrapper/wrapperVMHooks.go index 595cf7351..a5e57419c 100644 --- a/executor/wrapper/wrapperVMHooks.go +++ b/executor/wrapper/wrapperVMHooks.go @@ -1692,6 +1692,40 @@ func (w *WrapperVMHooks) MBufferFromBigIntSigned(mBufferHandle int32, bigIntHand return result } +// MBufferToSmallIntUnsigned VM hook wrapper +func (w *WrapperVMHooks) MBufferToSmallIntUnsigned(mBufferHandle int32) int64 { + callInfo := fmt.Sprintf("MBufferToSmallIntUnsigned(%d)", mBufferHandle) + w.logger.LogVMHookCallBefore(callInfo) + result := w.wrappedVMHooks.MBufferToSmallIntUnsigned(mBufferHandle) + w.logger.LogVMHookCallAfter(callInfo) + return result +} + +// MBufferToSmallIntSigned VM hook wrapper +func (w *WrapperVMHooks) MBufferToSmallIntSigned(mBufferHandle int32) int64 { + callInfo := fmt.Sprintf("MBufferToSmallIntSigned(%d)", mBufferHandle) + w.logger.LogVMHookCallBefore(callInfo) + result := w.wrappedVMHooks.MBufferToSmallIntSigned(mBufferHandle) + w.logger.LogVMHookCallAfter(callInfo) + return result +} + +// MBufferFromSmallIntUnsigned VM hook wrapper +func (w *WrapperVMHooks) MBufferFromSmallIntUnsigned(mBufferHandle int32, value int64) { + callInfo := fmt.Sprintf("MBufferFromSmallIntUnsigned(%d, %d)", mBufferHandle, value) + w.logger.LogVMHookCallBefore(callInfo) + w.wrappedVMHooks.MBufferFromSmallIntUnsigned(mBufferHandle, value) + w.logger.LogVMHookCallAfter(callInfo) +} + +// MBufferFromSmallIntSigned VM hook wrapper +func (w *WrapperVMHooks) MBufferFromSmallIntSigned(mBufferHandle int32, value int64) { + callInfo := fmt.Sprintf("MBufferFromSmallIntSigned(%d, %d)", mBufferHandle, value) + w.logger.LogVMHookCallBefore(callInfo) + w.wrappedVMHooks.MBufferFromSmallIntSigned(mBufferHandle, value) + w.logger.LogVMHookCallAfter(callInfo) +} + // MBufferToBigFloat VM hook wrapper func (w *WrapperVMHooks) MBufferToBigFloat(mBufferHandle int32, bigFloatHandle int32) int32 { callInfo := fmt.Sprintf("MBufferToBigFloat(%d, %d)", mBufferHandle, bigFloatHandle) diff --git a/go.mod b/go.mod index 13ded1774..577d833a7 100644 --- a/go.mod +++ b/go.mod @@ -8,12 +8,12 @@ require ( github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 github.com/gogo/protobuf v1.3.2 github.com/mitchellh/mapstructure v1.5.0 - github.com/multiversx/mx-chain-core-go v1.2.21 - github.com/multiversx/mx-chain-crypto-go v1.2.12 - github.com/multiversx/mx-chain-logger-go v1.0.15 - github.com/multiversx/mx-chain-scenario-go v1.4.4 - github.com/multiversx/mx-chain-storage-go v1.0.16 - github.com/multiversx/mx-chain-vm-common-go v1.5.14-0.20240812082318-afa839968da3 + github.com/multiversx/mx-chain-core-go v1.2.21-0.20240725065431-6e9bfee5a4c6 + github.com/multiversx/mx-chain-crypto-go v1.2.12-0.20240725071000-c3212540166f + github.com/multiversx/mx-chain-logger-go v1.0.15-0.20240725065747-176bd697c775 + github.com/multiversx/mx-chain-scenario-go v1.4.4-0.20240725072925-89c927c8b6a6 + github.com/multiversx/mx-chain-storage-go v1.0.16-0.20240725070753-aa7fb322ebdf + github.com/multiversx/mx-chain-vm-common-go v1.5.13-0.20240725072715-8806f1301087 github.com/multiversx/mx-components-big-int v1.0.0 github.com/pelletier/go-toml v1.9.3 github.com/stretchr/testify v1.8.1 diff --git a/go.sum b/go.sum index af93f5b3f..2ab212384 100644 --- a/go.sum +++ b/go.sum @@ -83,18 +83,18 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiversx/mx-chain-core-go v1.2.21 h1:+XVKznPTlUU5EFS1A8chtS8fStW60upRIyF4Pgml19I= -github.com/multiversx/mx-chain-core-go v1.2.21/go.mod h1:B5zU4MFyJezmEzCsAHE9YNULmGCm2zbPHvl9hazNxmE= -github.com/multiversx/mx-chain-crypto-go v1.2.12 h1:zWip7rpUS4CGthJxfKn5MZfMfYPjVjIiCID6uX5BSOk= -github.com/multiversx/mx-chain-crypto-go v1.2.12/go.mod h1:HzcPpCm1zanNct/6h2rIh+MFrlXbjA5C8+uMyXj3LI4= -github.com/multiversx/mx-chain-logger-go v1.0.15 h1:HlNdK8etyJyL9NQ+6mIXyKPEBo+wRqOwi3n+m2QIHXc= -github.com/multiversx/mx-chain-logger-go v1.0.15/go.mod h1:t3PRKaWB1M+i6gUfD27KXgzLJJC+mAQiN+FLlL1yoGQ= -github.com/multiversx/mx-chain-scenario-go v1.4.4 h1:DVE2V+FPeyD/yWoC+KEfPK3jsFzHeruelESfpTlf460= -github.com/multiversx/mx-chain-scenario-go v1.4.4/go.mod h1:kI+TWR3oIEgUkbwkHCPo2CQ3VjIge+ezGTibiSGwMxo= -github.com/multiversx/mx-chain-storage-go v1.0.16 h1:l2lJq+EAN3YwLbjJrnoKfFd1/1Xmo9DcAUECND2obLs= -github.com/multiversx/mx-chain-storage-go v1.0.16/go.mod h1:uM/z7YyqTOD3wgyH8TfapyEl5sb+7x/Jaxne4cfG4HI= -github.com/multiversx/mx-chain-vm-common-go v1.5.14-0.20240812082318-afa839968da3 h1:RlHKl5enbGrleB0Aea9TinZLLymS4WvG0/xAt/iRb6E= -github.com/multiversx/mx-chain-vm-common-go v1.5.14-0.20240812082318-afa839968da3/go.mod h1:OSvFbzdWThfRbLZbUsEr7bikBSaLrPJQ2iUm9jw9nXQ= +github.com/multiversx/mx-chain-core-go v1.2.21-0.20240725065431-6e9bfee5a4c6 h1:Q7uUjTYTrt8Mw9oq5JWPv+WHhpxHTv6lhZZlhPuNcoQ= +github.com/multiversx/mx-chain-core-go v1.2.21-0.20240725065431-6e9bfee5a4c6/go.mod h1:B5zU4MFyJezmEzCsAHE9YNULmGCm2zbPHvl9hazNxmE= +github.com/multiversx/mx-chain-crypto-go v1.2.12-0.20240725071000-c3212540166f h1:jydjrmVFvSllBOTppveOAkLITpOYKk0kma5z0bfDImI= +github.com/multiversx/mx-chain-crypto-go v1.2.12-0.20240725071000-c3212540166f/go.mod h1:9aSp//uBSvqFdzh4gvYISraoruhr1FCTXgPQalQ687k= +github.com/multiversx/mx-chain-logger-go v1.0.15-0.20240725065747-176bd697c775 h1:a8LOfz3p4MQfRtbF00rGDAJiebziwtSfVmBHIaHBDdY= +github.com/multiversx/mx-chain-logger-go v1.0.15-0.20240725065747-176bd697c775/go.mod h1:owPYyrK7RcsLx9eOCAZQ22fIyW6BE7ttJr4XIhFIbQw= +github.com/multiversx/mx-chain-scenario-go v1.4.4-0.20240725072925-89c927c8b6a6 h1:QGQjSlPix5nBtCkcdyKo0b2sRYXwYF/GBtccOqDbU6Y= +github.com/multiversx/mx-chain-scenario-go v1.4.4-0.20240725072925-89c927c8b6a6/go.mod h1:MvJiMtuyGq43aS9eOgF+xQUWk0hYxvCQqLrT77bhBaE= +github.com/multiversx/mx-chain-storage-go v1.0.16-0.20240725070753-aa7fb322ebdf h1:L9K7Xzq5SZz6k55R7HrafiRcU+c8/PqozJxys65G4bI= +github.com/multiversx/mx-chain-storage-go v1.0.16-0.20240725070753-aa7fb322ebdf/go.mod h1:ptvW/8r6bam55mVpeVZbyvvvydYM0DQwcPOH0W4Xyx8= +github.com/multiversx/mx-chain-vm-common-go v1.5.13-0.20240725072715-8806f1301087 h1:ovxs8X50iBL9TOkn0qHrkuXrBS1Y/EWfQOYmFEaXRNs= +github.com/multiversx/mx-chain-vm-common-go v1.5.13-0.20240725072715-8806f1301087/go.mod h1:nNGN+rdLRN8Nd6OhFGrkEZS5Ipj5IQCvFT0L/iQbOpU= github.com/multiversx/mx-components-big-int v1.0.0 h1:Wkr8lSzK2nDqixOrrBa47VNuqdhV1m/aJhaP1EMaiS8= github.com/multiversx/mx-components-big-int v1.0.0/go.mod h1:maIEMgHlNE2u78JaDD0oLzri+ShgU4okHfzP3LWGdQM= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= diff --git a/integrationTests/json/scenariosExecutorLogs_test.go b/integrationTests/json/scenariosExecutorLogs_test.go deleted file mode 100644 index 1bd25880f..000000000 --- a/integrationTests/json/scenariosExecutorLogs_test.go +++ /dev/null @@ -1,362 +0,0 @@ -package vmjsonintegrationtest - -import ( - "testing" - - "github.com/multiversx/mx-chain-scenario-go/worldmock" - "github.com/multiversx/mx-chain-vm-go/testcommon/testexecutor" - "github.com/multiversx/mx-chain-vm-go/wasmer" - "github.com/multiversx/mx-chain-vm-go/wasmer2" -) - -func TestRustCompareAdderLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("adder/scenarios"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("adder/scenarios"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestRustFactorialLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("factorial/scenarios"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("factorial/scenarios"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestRustErc20Log(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("erc20-rust/scenarios"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("erc20-rust/scenarios"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestCErc20Log(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("erc20-c"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("erc20-c"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestDigitalCashLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("digital-cash"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("digital-cash"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestESDTMultiTransferOnCallbackLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("features/composability/scenarios"). - File("forw_raw_call_async_retrieve_multi_transfer.scen.json"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("features/composability/scenarios"). - File("forw_raw_call_async_retrieve_multi_transfer.scen.json"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestCreateAsyncCallLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("features/composability/scenarios"). - File("promises_single_transfer.scen.json"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("features/composability/scenarios"). - File("promises_single_transfer.scen.json"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestESDTMultiTransferOnCallAndCallbackLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("features/composability/scenarios"). - File("forw_raw_async_send_and_retrieve_multi_transfer_funds.scen.json"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("features/composability/scenarios"). - File("forw_raw_async_send_and_retrieve_multi_transfer_funds.scen.json"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestMultisigLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("multisig/scenarios"). - Exclude("multisig/scenarios/interactor*"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("multisig/scenarios"). - Exclude("multisig/scenarios/interactor*"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestDnsContractLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - if testing.Short() { - t.Skip("not a short test") - } - - expected := ScenariosTest(t). - Folder("dns"). - WithEnableEpochsHandler(worldmock.EnableEpochsHandlerStubNoFlags()). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("dns"). - WithEnableEpochsHandler(worldmock.EnableEpochsHandlerStubNoFlags()). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestCrowdfundingEsdtLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("crowdfunding-esdt"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("crowdfunding-esdt"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestEgldEsdtSwapLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("egld-esdt-swap"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("egld-esdt-swap"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestPingPongEgldLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - expected := ScenariosTest(t). - Folder("ping-pong-egld"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("ping-pong-egld"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestRustAttestationLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - if testing.Short() { - t.Skip("not a short test") - } - - expected := ScenariosTest(t). - Folder("attestation-rust"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("attestation-rust"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} - -func TestCAttestationLog(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - if testing.Short() { - t.Skip("not a short test") - } - - expected := ScenariosTest(t). - Folder("attestation-c"). - WithExecutorFactory(wasmer.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - ExtractLog() - - ScenariosTest(t). - Folder("attestation-c"). - WithExecutorFactory(wasmer2.ExecutorFactory()). - WithExecutorLogs(). - Run(). - CheckNoError(). - CheckLog(expected) -} diff --git a/integrationTests/json/scenariosExecutorVersions_test.go b/integrationTests/json/scenariosExecutorVersions_test.go index 58b892d2f..0ac9e8115 100644 --- a/integrationTests/json/scenariosExecutorVersions_test.go +++ b/integrationTests/json/scenariosExecutorVersions_test.go @@ -1,66 +1,14 @@ package vmjsonintegrationtest import ( - "runtime" "testing" "github.com/multiversx/mx-chain-vm-go/executor" - "github.com/multiversx/mx-chain-vm-go/wasmer" "github.com/multiversx/mx-chain-vm-go/wasmer2" ) func TestCErc20Executors_TwiceW1ThenTwiceW2(t *testing.T) { - if runtime.GOARCH == "arm64" { - t.Skip("skipping test on arm64") - } - - testCERC20WithExecutorFactory(t, wasmer.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) -} - -func TestCErc20Executors_W1W2W1W2(t *testing.T) { - if runtime.GOARCH == "arm64" { - t.Skip("skipping test on arm64") - } - - testCERC20WithExecutorFactory(t, wasmer.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) -} - -func TestCErc20Executors_W1W2W2W1W2(t *testing.T) { - if runtime.GOARCH == "arm64" { - t.Skip("skipping test on arm64") - } - - testCERC20WithExecutorFactory(t, wasmer.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) -} - -func TestCErc20Executors_W2W1W2(t *testing.T) { - if runtime.GOARCH == "arm64" { - t.Skip("skipping test on arm64") - } - - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) -} - -func TestCErc20Executors_W2W2W1W2(t *testing.T) { - if runtime.GOARCH == "arm64" { - t.Skip("skipping test on arm64") - } - - testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) - testCERC20WithExecutorFactory(t, wasmer.ExecutorFactory()) testCERC20WithExecutorFactory(t, wasmer2.ExecutorFactory()) } diff --git a/integrationTests/json/scenariosTestCommon.go b/integrationTests/json/scenariosTestCommon.go index e5eaf4cb3..e5aac54fd 100644 --- a/integrationTests/json/scenariosTestCommon.go +++ b/integrationTests/json/scenariosTestCommon.go @@ -124,13 +124,13 @@ func (mtb *ScenariosTestBuilder) Run() *ScenariosTestBuilder { mtb.executorFactory) } - executor := scenexec.NewScenarioExecutor(vmBuilder) - defer executor.Close() + scenarioExecutor := scenexec.NewScenarioExecutor(vmBuilder) + defer scenarioExecutor.Close() - executor.World.EnableEpochsHandler = mtb.enableEpochsHandler + scenarioExecutor.World.EnableEpochsHandler = mtb.enableEpochsHandler runner := scenio.NewScenarioController( - executor, + scenarioExecutor, scenio.NewDefaultFileResolver(), vmBuilder.GetVMType(), ) diff --git a/mock/context/executorMock.go b/mock/context/executorMock.go index 2650e2c95..c85651290 100644 --- a/mock/context/executorMock.go +++ b/mock/context/executorMock.go @@ -7,7 +7,7 @@ import ( vmcommon "github.com/multiversx/mx-chain-vm-common-go" "github.com/multiversx/mx-chain-vm-go/executor" "github.com/multiversx/mx-chain-vm-go/vmhost" - "github.com/multiversx/mx-chain-vm-go/wasmer" + "github.com/multiversx/mx-chain-vm-go/wasmer2" ) // ExecutorMockFactory is the factory for the ExecutorRecorderMock. @@ -40,15 +40,18 @@ func (emf *ExecutorMockFactory) IsInterfaceNil() bool { // ExecutorMock can be passed to RuntimeContext as an InstanceBuilder to // create mocked Wasmer instances. type ExecutorMock struct { - InstanceMap map[string]InstanceMock - World *worldmock.MockWorld + InstanceMap map[string]InstanceMock + World *worldmock.MockWorld + WasmerExecutor *wasmer2.Wasmer2Executor } // NewExecutorMock constructs a new InstanceBuilderMock func NewExecutorMock(world *worldmock.MockWorld) *ExecutorMock { + exec, _ := wasmer2.CreateExecutor() return &ExecutorMock{ - InstanceMap: make(map[string]InstanceMock), - World: world, + InstanceMap: make(map[string]InstanceMock), + World: world, + WasmerExecutor: exec, } } @@ -106,7 +109,7 @@ func (executorMock *ExecutorMock) NewInstanceWithOptions( if ok { return instance, nil } - return wasmer.NewInstanceWithOptions(contractCode, options) + return executorMock.WasmerExecutor.NewInstanceWithOptions(contractCode, options) } // NewInstanceFromCompiledCodeWithOptions attempts to load a prepared instance @@ -120,7 +123,7 @@ func (executorMock *ExecutorMock) NewInstanceFromCompiledCodeWithOptions( if ok { return instance, nil } - return wasmer.NewInstanceFromCompiledCodeWithOptions(compiledCode, options) + return executorMock.WasmerExecutor.NewInstanceFromCompiledCodeWithOptions(compiledCode, options) } // IsInterfaceNil returns true if there is no value under the interface diff --git a/mock/context/executorMockFunc.go b/mock/context/executorMockFunc.go index fbe383f7b..d606a3170 100644 --- a/mock/context/executorMockFunc.go +++ b/mock/context/executorMockFunc.go @@ -205,6 +205,10 @@ var functionNames = map[string]struct{}{ "mBufferToBigIntSigned": empty, "mBufferFromBigIntUnsigned": empty, "mBufferFromBigIntSigned": empty, + "mBufferToSmallIntUnsigned": empty, + "mBufferToSmallIntSigned": empty, + "mBufferFromSmallIntUnsigned": empty, + "mBufferFromSmallIntSigned": empty, "mBufferToBigFloat": empty, "mBufferFromBigFloat": empty, "mBufferStorageStore": empty, diff --git a/mock/context/instanceMock.go b/mock/context/instanceMock.go index ee9fdb733..912e0831b 100644 --- a/mock/context/instanceMock.go +++ b/mock/context/instanceMock.go @@ -7,7 +7,6 @@ import ( "github.com/multiversx/mx-chain-vm-go/executor" "github.com/multiversx/mx-chain-vm-go/vmhost" - "github.com/multiversx/mx-chain-vm-go/wasmer" ) var _ executor.Instance = (*InstanceMock)(nil) @@ -18,7 +17,7 @@ type mockMethod func() *InstanceMock // contracts within tests, without needing actual WASM smart contracts. type InstanceMock struct { Code []byte - Exports wasmer.ExportsMap + Exports map[string]string DefaultErrors map[string]error Methods map[string]mockMethod Points uint64 @@ -36,7 +35,7 @@ type InstanceMock struct { func NewInstanceMock(code []byte) *InstanceMock { return &InstanceMock{ Code: code, - Exports: make(wasmer.ExportsMap), + Exports: make(map[string]string), DefaultErrors: make(map[string]error), Methods: make(map[string]mockMethod), Points: 0, @@ -57,7 +56,7 @@ func (instance *InstanceMock) AddMockMethod(name string, method mockMethod) { func (instance *InstanceMock) AddMockMethodWithError(name string, method mockMethod, err error) { instance.Methods[name] = method instance.DefaultErrors[name] = err - instance.Exports[name] = &wasmer.ExportedFunctionCallInfo{} + instance.Exports[name] = name } // CallFunction mocked method diff --git a/mock/context/runtimeContextWrapper.go b/mock/context/runtimeContextWrapper.go index f44ca3fbd..86c1b85cc 100644 --- a/mock/context/runtimeContextWrapper.go +++ b/mock/context/runtimeContextWrapper.go @@ -260,30 +260,6 @@ func NewRuntimeContextWrapper(inputRuntimeContext *vmhost.RuntimeContext) *Runti runtimeWrapper.runtimeContext.SetPointsUsed(gasPoints) } - runtimeWrapper.BaseOpsErrorShouldFailExecutionFunc = func() bool { - return runtimeWrapper.runtimeContext.BaseOpsErrorShouldFailExecution() - } - - runtimeWrapper.SyncExecAPIErrorShouldFailExecutionFunc = func() bool { - return runtimeWrapper.runtimeContext.SyncExecAPIErrorShouldFailExecution() - } - - runtimeWrapper.CryptoAPIErrorShouldFailExecutionFunc = func() bool { - return runtimeWrapper.runtimeContext.CryptoAPIErrorShouldFailExecution() - } - - runtimeWrapper.BigIntAPIErrorShouldFailExecutionFunc = func() bool { - return runtimeWrapper.runtimeContext.BigIntAPIErrorShouldFailExecution() - } - - runtimeWrapper.BigFloatAPIErrorShouldFailExecutionFunc = func() bool { - return runtimeWrapper.runtimeContext.BigFloatAPIErrorShouldFailExecution() - } - - runtimeWrapper.ManagedBufferAPIErrorShouldFailExecutionFunc = func() bool { - return runtimeWrapper.runtimeContext.ManagedBufferAPIErrorShouldFailExecution() - } - runtimeWrapper.AddErrorFunc = func(err error, otherInfo ...string) { runtimeWrapper.runtimeContext.AddError(err, otherInfo...) } @@ -498,41 +474,6 @@ func (contextWrapper *RuntimeContextWrapper) SetPointsUsed(gasPoints uint64) { contextWrapper.SetPointsUsedFunc(gasPoints) } -// BaseOpsErrorShouldFailExecution calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext -func (contextWrapper *RuntimeContextWrapper) BaseOpsErrorShouldFailExecution() bool { - return contextWrapper.BaseOpsErrorShouldFailExecutionFunc() -} - -// SyncExecAPIErrorShouldFailExecution calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext -func (contextWrapper *RuntimeContextWrapper) SyncExecAPIErrorShouldFailExecution() bool { - return contextWrapper.SyncExecAPIErrorShouldFailExecutionFunc() -} - -// CryptoAPIErrorShouldFailExecution calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext -func (contextWrapper *RuntimeContextWrapper) CryptoAPIErrorShouldFailExecution() bool { - return contextWrapper.CryptoAPIErrorShouldFailExecutionFunc() -} - -// BigIntAPIErrorShouldFailExecution calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext -func (contextWrapper *RuntimeContextWrapper) BigIntAPIErrorShouldFailExecution() bool { - return contextWrapper.BigIntAPIErrorShouldFailExecutionFunc() -} - -// BigFloatAPIErrorShouldFailExecution calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext -func (contextWrapper *RuntimeContextWrapper) BigFloatAPIErrorShouldFailExecution() bool { - return contextWrapper.BigFloatAPIErrorShouldFailExecutionFunc() -} - -// ManagedBufferAPIErrorShouldFailExecution calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext -func (contextWrapper *RuntimeContextWrapper) ManagedBufferAPIErrorShouldFailExecution() bool { - return contextWrapper.runtimeContext.ManagedBufferAPIErrorShouldFailExecution() -} - -// ManagedMapAPIErrorShouldFailExecution calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext -func (contextWrapper *RuntimeContextWrapper) ManagedMapAPIErrorShouldFailExecution() bool { - return contextWrapper.runtimeContext.ManagedMapAPIErrorShouldFailExecution() -} - // UseGasBoundedShouldFailExecution calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext func (contextWrapper *RuntimeContextWrapper) UseGasBoundedShouldFailExecution() bool { return contextWrapper.runtimeContext.UseGasBoundedShouldFailExecution() @@ -544,7 +485,7 @@ func (contextWrapper *RuntimeContextWrapper) GetVMExecutor() executor.Executor { } // ReplaceVMExecutor mocked method -func (contextWrapper *RuntimeContextWrapper) ReplaceVMExecutor(vmExecutor executor.Executor) { +func (contextWrapper *RuntimeContextWrapper) ReplaceVMExecutor(_ executor.Executor) { } // AddError calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext diff --git a/scenario/gasSchedules/gasScheduleEmbedGenerated.go b/scenario/gasSchedules/gasScheduleEmbedGenerated.go index 9e9eaea22..c6e7874af 100644 --- a/scenario/gasSchedules/gasScheduleEmbedGenerated.go +++ b/scenario/gasSchedules/gasScheduleEmbedGenerated.go @@ -259,6 +259,10 @@ const ( MBufferToBigIntSigned = 10000 MBufferFromBigIntUnsigned = 4000 MBufferFromBigIntSigned = 10000 + MBufferToSmallIntUnsigned = 4000 + MBufferToSmallIntSigned = 10000 + MBufferFromSmallIntUnsigned = 4000 + MBufferFromSmallIntSigned = 10000 MBufferToBigFloat = 2000 MBufferFromBigFloat = 2000 MBufferStorageStore = 75000 @@ -1072,9 +1076,9 @@ const ( UnmarshalCompressedECC = 270000 GenerateKeyECC = 7000000 EncodeDERSig = 10000000 -VerifySecp256r1 = 2000000 -VerifyBLSSignatureShare = 2000000 -VerifyBLSMultiSig = 2000000 + VerifySecp256r1 = 2000000 + VerifyBLSSignatureShare = 2000000 + VerifyBLSMultiSig = 2000000 [ManagedBufferAPICost] MBufferNew = 2000 @@ -1090,6 +1094,10 @@ VerifyBLSMultiSig = 2000000 MBufferToBigIntSigned = 5000 MBufferFromBigIntUnsigned = 2000 MBufferFromBigIntSigned = 5000 + MBufferToSmallIntUnsigned = 2000 + MBufferToSmallIntSigned = 5000 + MBufferFromSmallIntUnsigned = 2000 + MBufferFromSmallIntSigned = 5000 MBufferToBigFloat = 2000 MBufferFromBigFloat = 2000 MBufferStorageStore = 75000 diff --git a/scenario/gasSchedules/gasScheduleV3.toml b/scenario/gasSchedules/gasScheduleV3.toml index 9aec4d8a9..e037639a0 100644 --- a/scenario/gasSchedules/gasScheduleV3.toml +++ b/scenario/gasSchedules/gasScheduleV3.toml @@ -247,6 +247,10 @@ MBufferToBigIntSigned = 10000 MBufferFromBigIntUnsigned = 4000 MBufferFromBigIntSigned = 10000 + MBufferToSmallIntUnsigned = 4000 + MBufferToSmallIntSigned = 10000 + MBufferFromSmallIntUnsigned = 4000 + MBufferFromSmallIntSigned = 10000 MBufferToBigFloat = 2000 MBufferFromBigFloat = 2000 MBufferStorageStore = 75000 diff --git a/scenario/gasSchedules/gasScheduleV4.toml b/scenario/gasSchedules/gasScheduleV4.toml index e3a324c9e..de9937dd7 100644 --- a/scenario/gasSchedules/gasScheduleV4.toml +++ b/scenario/gasSchedules/gasScheduleV4.toml @@ -249,6 +249,10 @@ MBufferToBigIntSigned = 5000 MBufferFromBigIntUnsigned = 2000 MBufferFromBigIntSigned = 5000 + MBufferToSmallIntUnsigned = 2000 + MBufferToSmallIntSigned = 5000 + MBufferFromSmallIntUnsigned = 2000 + MBufferFromSmallIntSigned = 5000 MBufferToBigFloat = 2000 MBufferFromBigFloat = 2000 MBufferStorageStore = 75000 diff --git a/test/features/basic-features-ei-1-3/output/basic-features-storage-bytes.mxsc.json b/test/features/basic-features-ei-1-3/output/basic-features-storage-bytes.mxsc.json new file mode 100644 index 000000000..619430b7a --- /dev/null +++ b/test/features/basic-features-ei-1-3/output/basic-features-storage-bytes.mxsc.json @@ -0,0 +1,251 @@ +{ + "buildInfo": { + "rustc": { + "version": "1.76.0-nightly", + "commitHash": "d86d65bbc19b928387f68427fcc3a0da498d8a19", + "commitDate": "2023-12-10", + "channel": "Nightly", + "short": "rustc 1.76.0-nightly (d86d65bbc 2023-12-10)" + }, + "contractCrate": { + "name": "basic-features", + "version": "0.0.0" + }, + "framework": { + "name": "multiversx-sc", + "version": "0.47.1" + } + }, + "abi": { + "name": "BasicFeatures", + "constructor": { + "inputs": [], + "outputs": [] + }, + "endpoints": [ + { + "name": "load_bytes", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "store_bytes", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "bytes" + } + ], + "outputs": [] + } + ], + "events": [ + { + "identifier": "event_err_topic", + "inputs": [ + { + "name": "err_topic", + "type": "CodecErrorTestType", + "indexed": true + } + ] + }, + { + "identifier": "event_err_data", + "inputs": [ + { + "name": "data", + "type": "CodecErrorTestType" + } + ] + }, + { + "identifier": "event_a", + "inputs": [ + { + "name": "data", + "type": "u32" + } + ] + }, + { + "identifier": "event_b", + "inputs": [ + { + "name": "arg1", + "type": "BigUint", + "indexed": true + }, + { + "name": "arg2", + "type": "Address", + "indexed": true + }, + { + "name": "data", + "type": "List" + } + ] + } + ], + "esdtAttributes": [], + "hasCallback": false, + "types": { + "CodecErrorTestType": { + "type": "struct", + "docs": [ + "Helper type to explore encode/decode errors." + ] + }, + "EsdtTokenPayment": { + "type": "struct", + "fields": [ + { + "name": "token_identifier", + "type": "TokenIdentifier" + }, + { + "name": "token_nonce", + "type": "u64" + }, + { + "name": "amount", + "type": "BigUint" + } + ] + }, + "ExampleEnumSimple": { + "type": "enum", + "docs": [ + "Copied from multiversx-sc serialization tests." + ], + "variants": [ + { + "docs": [ + "Variant 0 doc comment.", + "This will show up in the ABI." + ], + "name": "Variant0", + "discriminant": 0 + }, + { + "name": "Variant1", + "discriminant": 1 + }, + { + "docs": [ + "One line is enough. The one above doesn't have any." + ], + "name": "Variant2", + "discriminant": 2 + } + ] + }, + "ExampleEnumWithFields": { + "type": "enum", + "docs": [ + "Copied from multiversx-sc serialization tests." + ], + "variants": [ + { + "name": "Unit", + "discriminant": 0 + }, + { + "name": "Newtype", + "discriminant": 1, + "fields": [ + { + "name": "0", + "type": "u32" + } + ] + }, + { + "name": "Tuple", + "discriminant": 2, + "fields": [ + { + "name": "0", + "type": "u32" + }, + { + "name": "1", + "type": "u32" + } + ] + }, + { + "name": "Struct", + "discriminant": 3, + "fields": [ + { + "name": "a", + "type": "u32" + } + ] + } + ] + }, + "ExampleStructManaged": { + "type": "struct", + "fields": [ + { + "name": "big_uint", + "type": "BigUint" + }, + { + "name": "int", + "type": "u32" + }, + { + "name": "bytes", + "type": "bytes" + } + ] + }, + "RgbColor": { + "type": "struct", + "fields": [ + { + "name": "r", + "type": "u8" + }, + { + "name": "g", + "type": "u8" + }, + { + "name": "b", + "type": "u8" + } + ] + }, + "TokenAttributesStruct": { + "type": "struct", + "fields": [ + { + "name": "field_biguint", + "type": "BigUint" + }, + { + "name": "field_u64", + "type": "u64" + }, + { + "name": "field_vec_u32", + "type": "List" + } + ] + } + } + }, + "size": 539, + "code": "0061736d0100000001230760000060027f7f017f6000017f60027f7f0060037f7f7f017f60017f017f60017f0002b4010803656e76126d427566666572476574417267756d656e74000103656e760f6765744e756d417267756d656e7473000203656e760b7369676e616c4572726f72000303656e760f6d4275666665725365744279746573000403656e760e636865636b4e6f5061796d656e74000003656e76126d42756666657253746f726167654c6f6164000103656e760d6d42756666657246696e697368000503656e76136d42756666657253746f7261676553746f72650001030807020602000000000503010003060f027f0041ac80080b7f0041b080080b075207066d656d6f7279020004696e6974000b0a6c6f61645f6279746573000c0b73746f72655f6279746573000d0863616c6c4261636b000e0a5f5f646174615f656e6403000b5f5f686561705f6261736503010a8501071901017f41a8800841a8800828020041016b220036020020000b1400100120004604400f0b4180800841191002000b1301017f1008220041998008410d10031a20000b08001004410010090b1801017f100441001009100a1008220010051a200010061a0b1a01017f10044101100941001008220010001a100a200010071a0b0300010b0b390200418080080b2677726f6e67206e756d626572206f6620617267756d656e747373746f726167655f62797465730041a880080b049cffffff" +} diff --git a/test/features/basic-features-ei-1-3/output/basic-features.mxsc.json b/test/features/basic-features-ei-1-3/output/basic-features.mxsc.json new file mode 100644 index 000000000..066ef6a2c --- /dev/null +++ b/test/features/basic-features-ei-1-3/output/basic-features.mxsc.json @@ -0,0 +1,5902 @@ +{ + "buildInfo": { + "rustc": { + "version": "1.76.0-nightly", + "commitHash": "d86d65bbc19b928387f68427fcc3a0da498d8a19", + "commitDate": "2023-12-10", + "channel": "Nightly", + "short": "rustc 1.76.0-nightly (d86d65bbc 2023-12-10)" + }, + "contractCrate": { + "name": "basic-features", + "version": "0.0.0" + }, + "framework": { + "name": "multiversx-sc", + "version": "0.47.1" + } + }, + "abi": { + "name": "BasicFeatures", + "constructor": { + "inputs": [], + "outputs": [] + }, + "endpoints": [ + { + "name": "panicWithMessage", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "docs": [ + "Operation that has caused issues in the past" + ], + "name": "count_ones", + "mutability": "mutable", + "inputs": [ + { + "name": "arg", + "type": "u64" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "endpoint_with_mutable_arg", + "mutability": "mutable", + "inputs": [ + { + "name": "arg1", + "type": "BigUint" + }, + { + "name": "arg2", + "type": "u64" + }, + { + "name": "arg3", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "sqrt_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "sqrt_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "log2_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "log2_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "pow_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "pow_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "pow_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "pow_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "big_uint_to_u64", + "mutability": "mutable", + "inputs": [ + { + "name": "bu", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "biguint_overwrite_u64", + "mutability": "mutable", + "inputs": [ + { + "name": "bu", + "type": "BigUint" + }, + { + "name": "small", + "type": "u64" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "big_uint_zero", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "big_uint_from_u64_1", + "mutability": "mutable", + "inputs": [ + { + "name": "small", + "type": "u64" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "big_uint_from_u64_2", + "mutability": "mutable", + "inputs": [ + { + "name": "small", + "type": "u64" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "biguint_from_u128", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "big_uint_from_managed_buffer", + "mutability": "mutable", + "inputs": [ + { + "name": "mb", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "big_uint_from_managed_buffer_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "mb", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "big_int_zero", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "big_int_from_i64_1", + "mutability": "mutable", + "inputs": [ + { + "name": "small", + "type": "i64" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "big_int_from_i64_2", + "mutability": "mutable", + "inputs": [ + { + "name": "small", + "type": "i64" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "big_uint_eq_u64", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "BigUint" + }, + { + "name": "small", + "type": "u64" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "big_int_to_i64", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "bigint_overwrite_i64", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "BigInt" + }, + { + "name": "small", + "type": "i64" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "big_int_to_parts", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "Sign" + }, + { + "type": "BigUint" + } + ] + }, + { + "name": "big_int_from_biguint", + "mutability": "mutable", + "inputs": [ + { + "name": "sign", + "type": "Sign" + }, + { + "name": "unsigned", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_big_int_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_big_uint_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_big_int_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_big_uint_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "add_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "sub_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "sub_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "sub_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "sub_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "mul_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "mul_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "mul_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "mul_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "div_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "div_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "div_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "div_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "rem_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "rem_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "rem_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "rem_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "add_assign_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_assign_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "add_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "add_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "sub_assign_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "sub_assign_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "sub_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "sub_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "mul_assign_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "mul_assign_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "mul_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "mul_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "div_assign_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "div_assign_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "div_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "div_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "rem_assign_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "rem_assign_big_int_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigInt" + }, + { + "name": "b", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "rem_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "rem_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_and_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_and_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_or_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_or_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_xor_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_xor_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_and_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_and_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_or_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_or_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_xor_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "bit_xor_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "shr_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "shr_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "shl_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "shl_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "shr_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "shr_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "shl_assign_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "shl_assign_big_uint_ref", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "BigUint" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "get_block_timestamp", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_block_nonce", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_block_round", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_block_epoch", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_block_random_seed", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "array48" + } + ] + }, + { + "name": "get_prev_block_timestamp", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_prev_block_nonce", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_prev_block_round", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_prev_block_epoch", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_prev_block_random_seed", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "array48" + } + ] + }, + { + "name": "get_caller", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "Address" + } + ] + }, + { + "name": "get_owner_address", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "Address" + } + ] + }, + { + "name": "get_shard_of_address", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "is_smart_contract", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "get_state_root_hash", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "array32" + } + ] + }, + { + "name": "get_tx_hash", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "array32" + } + ] + }, + { + "name": "get_gas_left", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_cumulated_validator_rewards", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "get_code_metadata", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "CodeMetadata" + } + ] + }, + { + "name": "is_builtin_function", + "mutability": "mutable", + "inputs": [ + { + "name": "function_name", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "codec_err_finish", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "CodecErrorTestType" + } + ] + }, + { + "name": "codec_err_storage_key", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "i32" + } + ] + }, + { + "name": "codec_err_storage_get", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "CodecErrorTestType" + } + ] + }, + { + "name": "codec_err_storage_set", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "codec_err_event_topic", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "codec_err_event_data", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "docs": [ + "Never actually calls any deploy/upgrade, so it is appropriate in this contract.", + "It just covers contract init serialization errors." + ], + "name": "codec_err_contract_init", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "docs": [ + "Never actually calls any async/sync call, so it is appropriate in this contract.", + "It just covers contract call serialization errors." + ], + "name": "codec_err_contract_call", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "compute_sha256", + "mutability": "mutable", + "inputs": [ + { + "name": "input", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "array32" + } + ] + }, + { + "name": "compute_keccak256", + "mutability": "mutable", + "inputs": [ + { + "name": "input", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "array32" + } + ] + }, + { + "name": "compute_ripemd160", + "mutability": "mutable", + "inputs": [ + { + "name": "input", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "array20" + } + ] + }, + { + "name": "verify_bls_signature", + "mutability": "mutable", + "inputs": [ + { + "name": "key", + "type": "bytes" + }, + { + "name": "message", + "type": "bytes" + }, + { + "name": "signature", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "verify_ed25519_signature", + "mutability": "mutable", + "inputs": [ + { + "name": "key", + "type": "bytes" + }, + { + "name": "message", + "type": "bytes" + }, + { + "name": "signature", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "verify_secp256k1_signature", + "mutability": "mutable", + "inputs": [ + { + "name": "key", + "type": "bytes" + }, + { + "name": "message", + "type": "bytes" + }, + { + "name": "signature", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "verify_custom_secp256k1_signature", + "mutability": "mutable", + "inputs": [ + { + "name": "key", + "type": "bytes" + }, + { + "name": "message", + "type": "bytes" + }, + { + "name": "signature", + "type": "bytes" + }, + { + "name": "hash_type", + "type": "MessageHashType" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "compute_secp256k1_der_signature", + "mutability": "mutable", + "inputs": [ + { + "name": "r", + "type": "bytes" + }, + { + "name": "s", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "echo_u64", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "u64" + } + ], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "echo_i64", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "i64" + } + ], + "outputs": [ + { + "type": "i64" + } + ] + }, + { + "name": "echo_i32", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "i32" + } + ], + "outputs": [ + { + "type": "i32" + } + ] + }, + { + "name": "echo_u32", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "echo_isize", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "i32" + } + ], + "outputs": [ + { + "type": "i32" + } + ] + }, + { + "name": "echo_usize", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "echo_i8", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "i8" + } + ], + "outputs": [ + { + "type": "i8" + } + ] + }, + { + "name": "echo_u8", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "u8" + } + ], + "outputs": [ + { + "type": "u8" + } + ] + }, + { + "name": "echo_bool", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "bool" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "echo_opt_bool", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "Option" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "echo_nothing", + "mutability": "mutable", + "inputs": [ + { + "name": "nothing", + "type": "()" + } + ], + "outputs": [] + }, + { + "name": "echo_array_u8", + "mutability": "mutable", + "inputs": [ + { + "name": "s", + "type": "array5" + } + ], + "outputs": [ + { + "type": "array5" + } + ] + }, + { + "name": "echo_multi_value_u32", + "mutability": "mutable", + "inputs": [ + { + "name": "m", + "type": "variadic", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "u32" + }, + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "echo_multi_value_tuples", + "mutability": "mutable", + "inputs": [ + { + "name": "m", + "type": "variadic>", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "variadic>", + "multi_result": true + } + ] + }, + { + "name": "echo_ser_example_2", + "mutability": "mutable", + "inputs": [ + { + "name": "se", + "type": "ExampleEnumWithFields" + } + ], + "outputs": [ + { + "type": "ExampleEnumWithFields" + } + ] + }, + { + "name": "echo_simple_enum", + "mutability": "readonly", + "inputs": [ + { + "name": "se", + "type": "ExampleEnumSimple" + } + ], + "outputs": [ + { + "type": "ExampleEnumSimple" + } + ] + }, + { + "name": "finish_simple_enum_variant_1", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "ExampleEnumSimple" + } + ] + }, + { + "name": "echo_non_zero_usize", + "mutability": "readonly", + "inputs": [ + { + "name": "nz", + "type": "NonZeroUsize" + } + ], + "outputs": [ + { + "type": "NonZeroUsize" + } + ] + }, + { + "name": "echo_some_args_ignore_others", + "mutability": "readonly", + "inputs": [ + { + "name": "i", + "type": "i32" + }, + { + "name": "opt", + "type": "optional", + "multi_arg": true + }, + { + "name": "_ignore", + "type": "ignore", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "i32" + }, + { + "type": "optional", + "multi_result": true + } + ], + "allow_multiple_var_args": true + }, + { + "name": "echo_arrayvec", + "mutability": "readonly", + "inputs": [ + { + "name": "av", + "type": "List" + } + ], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "name": "echo_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "echo_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "BigInt" + } + ], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "echo_managed_buffer", + "mutability": "mutable", + "inputs": [ + { + "name": "mb", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "echo_managed_address", + "mutability": "mutable", + "inputs": [ + { + "name": "ma", + "type": "Address" + } + ], + "outputs": [ + { + "type": "Address" + } + ] + }, + { + "docs": [ + "This tests that nested serialization of big ints within unmanaged types works." + ], + "name": "echo_big_int_managed_vec", + "mutability": "mutable", + "inputs": [ + { + "name": "x", + "type": "List" + } + ], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "docs": [ + "This tests that nested serialization of big ints within unmanaged types works." + ], + "name": "echo_big_int_tuple", + "mutability": "mutable", + "inputs": [ + { + "name": "x", + "type": "tuple" + } + ], + "outputs": [ + { + "type": "tuple" + } + ] + }, + { + "docs": [ + "This tests that nested serialization of big ints within unmanaged types works." + ], + "name": "echo_big_int_option", + "mutability": "mutable", + "inputs": [ + { + "name": "x", + "type": "Option" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "echo_tuple_into_multiresult", + "mutability": "mutable", + "inputs": [ + { + "name": "addr", + "type": "Address" + }, + { + "name": "vec", + "type": "List" + } + ], + "outputs": [ + { + "type": "Address" + }, + { + "type": "List" + } + ] + }, + { + "name": "echo_managed_vec_of_managed_vec", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List>" + } + ], + "outputs": [ + { + "type": "List>" + } + ] + }, + { + "name": "echo_managed_vec_of_token_identifier", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List" + } + ], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "name": "echo_managed_async_result_empty", + "mutability": "mutable", + "inputs": [ + { + "name": "a", + "type": "AsyncCallResult<()>" + } + ], + "outputs": [] + }, + { + "name": "echo_varags_managed_eager", + "mutability": "mutable", + "inputs": [ + { + "name": "m", + "type": "variadic", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "u32" + }, + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "echo_varags_managed_sum", + "mutability": "mutable", + "inputs": [ + { + "name": "m", + "type": "variadic>", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "variadic>", + "multi_result": true + } + ] + }, + { + "name": "compute_get_values", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + } + ], + "outputs": [ + { + "type": "tuple" + } + ] + }, + { + "name": "compute_create_ec", + "mutability": "mutable", + "inputs": [ + { + "name": "curve", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "tuple" + } + ] + }, + { + "name": "compute_get_ec_length", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "compute_get_priv_key_byte_length", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "compute_ec_add", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "x_first_point", + "type": "BigUint" + }, + { + "name": "y_first_point", + "type": "BigUint" + }, + { + "name": "x_second_point", + "type": "BigUint" + }, + { + "name": "y_second_point", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + }, + { + "type": "BigUint" + } + ] + }, + { + "name": "compute_ec_double", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "x_point", + "type": "BigUint" + }, + { + "name": "y_point", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "BigUint" + }, + { + "type": "BigUint" + } + ] + }, + { + "name": "compute_is_on_curve_ec", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "x_point", + "type": "BigUint" + }, + { + "name": "y_point", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "compute_scalar_mult", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "x_point", + "type": "BigUint" + }, + { + "name": "y_point", + "type": "BigUint" + }, + { + "name": "data", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "BigUint" + }, + { + "type": "BigUint" + } + ] + }, + { + "name": "compute_scalar_base_mult", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "data", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "BigUint" + }, + { + "type": "BigUint" + } + ] + }, + { + "name": "compute_marshal_ec", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "x_pair", + "type": "BigUint" + }, + { + "name": "y_pair", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "compute_marshal_compressed_ec", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "x_pair", + "type": "BigUint" + }, + { + "name": "y_pair", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "compute_unmarshal_ec", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "data", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "BigUint" + }, + { + "type": "BigUint" + } + ] + }, + { + "name": "compute_unmarshal_compressed_ec", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + }, + { + "name": "data", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "BigUint" + }, + { + "type": "BigUint" + } + ] + }, + { + "name": "compute_generate_key_ec", + "mutability": "mutable", + "inputs": [ + { + "name": "curve_bitsize", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + }, + { + "type": "BigUint" + }, + { + "type": "bytes" + } + ] + }, + { + "name": "logEventA", + "mutability": "mutable", + "inputs": [ + { + "name": "data", + "type": "u32" + } + ], + "outputs": [] + }, + { + "docs": [ + "Logs `event_a` a repeated number of times." + ], + "name": "logEventARepeat", + "mutability": "mutable", + "inputs": [ + { + "name": "num_logs", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "logEventB", + "mutability": "mutable", + "inputs": [ + { + "name": "arg1", + "type": "BigUint" + }, + { + "name": "arg2", + "type": "Address" + }, + { + "name": "data", + "type": "variadic", + "multi_arg": true + } + ], + "outputs": [] + }, + { + "name": "only_owner_endpoint", + "onlyOwner": true, + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "only_user_account_endpoint", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "require_equals", + "mutability": "readonly", + "inputs": [ + { + "name": "a", + "type": "u32" + }, + { + "name": "b", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "sc_panic", + "mutability": "readonly", + "inputs": [], + "outputs": [] + }, + { + "name": "maddress_from_array", + "mutability": "mutable", + "inputs": [ + { + "name": "array", + "type": "array32" + } + ], + "outputs": [ + { + "type": "Address" + } + ] + }, + { + "name": "maddress_from_managed_buffer", + "mutability": "mutable", + "inputs": [ + { + "name": "managed_buffer", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "Address" + } + ] + }, + { + "name": "mbuffer_new", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "mbuffer_concat", + "mutability": "mutable", + "inputs": [ + { + "name": "mb1", + "type": "bytes" + }, + { + "name": "mb2", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "mbuffer_copy_slice", + "mutability": "mutable", + "inputs": [ + { + "name": "mb", + "type": "bytes" + }, + { + "name": "starting_position", + "type": "u32" + }, + { + "name": "slice_len", + "type": "u32" + } + ], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "mbuffer_set_random", + "mutability": "mutable", + "inputs": [ + { + "name": "nr_bytes", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "mbuffer_eq", + "mutability": "mutable", + "inputs": [ + { + "name": "mb1", + "type": "bytes" + }, + { + "name": "mb2", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "managed_address_zero", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "Address" + } + ] + }, + { + "name": "managed_address_eq", + "mutability": "mutable", + "inputs": [ + { + "name": "mb1", + "type": "Address" + }, + { + "name": "mb2", + "type": "Address" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "managed_vec_new", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "name": "managed_vec_biguint_push", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List" + }, + { + "name": "item", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "name": "managed_vec_biguint_eq", + "mutability": "mutable", + "inputs": [ + { + "name": "mv1", + "type": "List" + }, + { + "name": "mv2", + "type": "List" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "managed_vec_address_push", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List
" + }, + { + "name": "item", + "type": "Address" + } + ], + "outputs": [ + { + "type": "List
" + } + ] + }, + { + "name": "managed_vec_set", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List" + }, + { + "name": "index", + "type": "u32" + }, + { + "name": "item", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "name": "managed_vec_remove", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List" + }, + { + "name": "index", + "type": "u32" + } + ], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "name": "managed_vec_find", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List" + }, + { + "name": "item", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "managed_vec_contains", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List" + }, + { + "name": "item", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "managed_vec_array_push", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List>" + }, + { + "name": "item", + "type": "array5" + } + ], + "outputs": [ + { + "type": "List>" + } + ] + }, + { + "name": "managed_ref_explicit", + "mutability": "mutable", + "inputs": [ + { + "name": "mv", + "type": "List" + }, + { + "name": "index", + "type": "u32" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "storage_read_raw", + "mutability": "mutable", + "inputs": [ + { + "name": "storage_key", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "storage_write_raw", + "mutability": "mutable", + "inputs": [ + { + "name": "storage_key", + "type": "bytes" + }, + { + "name": "value", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "storage_read_from_address", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + }, + { + "name": "storage_key", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "load_bytes", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "load_big_uint", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "load_big_int", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "load_u64", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "load_usize", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "load_i64", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i64" + } + ] + }, + { + "name": "load_bool", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "load_addr", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "Address" + } + ] + }, + { + "name": "load_opt_addr", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "optional
", + "multi_result": true + } + ] + }, + { + "name": "is_empty_opt_addr", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "get_nr_to_clear", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "clear_storage_value", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "load_ser_2", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "ExampleEnumWithFields" + } + ] + }, + { + "name": "load_map1", + "mutability": "mutable", + "inputs": [ + { + "name": "addr", + "type": "Address" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "load_map2", + "mutability": "mutable", + "inputs": [ + { + "name": "addr1", + "type": "Address" + }, + { + "name": "addr2", + "type": "Address" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "load_map3", + "mutability": "mutable", + "inputs": [ + { + "name": "x", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "load_from_address_raw", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + }, + { + "name": "key", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "store_bytes", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "store_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "BigUint" + } + ], + "outputs": [] + }, + { + "name": "store_big_int", + "mutability": "mutable", + "inputs": [ + { + "name": "bi", + "type": "BigInt" + } + ], + "outputs": [] + }, + { + "name": "store_usize", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "store_i32", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "i32" + } + ], + "outputs": [] + }, + { + "name": "store_u64", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "u64" + } + ], + "outputs": [] + }, + { + "name": "store_i64", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "i64" + } + ], + "outputs": [] + }, + { + "name": "store_bool", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "bool" + } + ], + "outputs": [] + }, + { + "name": "store_addr", + "mutability": "mutable", + "inputs": [ + { + "name": "arg", + "type": "Address" + } + ], + "outputs": [] + }, + { + "name": "store_opt_addr", + "mutability": "mutable", + "inputs": [ + { + "name": "opt_addr", + "type": "optional
", + "multi_arg": true + } + ], + "outputs": [] + }, + { + "name": "store_ser_2", + "mutability": "mutable", + "inputs": [ + { + "name": "arg", + "type": "ExampleEnumWithFields" + } + ], + "outputs": [] + }, + { + "name": "store_map1", + "mutability": "mutable", + "inputs": [ + { + "name": "addr", + "type": "Address" + }, + { + "name": "bi", + "type": "BigUint" + } + ], + "outputs": [] + }, + { + "name": "store_map2", + "mutability": "mutable", + "inputs": [ + { + "name": "addr1", + "type": "Address" + }, + { + "name": "addr2", + "type": "Address" + }, + { + "name": "bi", + "type": "BigUint" + } + ], + "outputs": [] + }, + { + "name": "store_map3", + "mutability": "mutable", + "inputs": [ + { + "name": "x", + "type": "u32" + }, + { + "name": "b", + "type": "bool" + } + ], + "outputs": [] + }, + { + "name": "store_reserved_i64", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "i64" + } + ], + "outputs": [] + }, + { + "name": "store_reserved_big_uint", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "BigUint" + } + ], + "outputs": [] + }, + { + "name": "store_reserved_vec_u8", + "mutability": "mutable", + "inputs": [ + { + "name": "i", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "address_to_id_mapper_get_id", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "address_to_id_mapper_get_id_non_zero", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "address_to_id_mapper_get_address", + "mutability": "mutable", + "inputs": [ + { + "name": "address_id", + "type": "u64" + } + ], + "outputs": [ + { + "type": "Option
" + } + ] + }, + { + "name": "address_to_id_mapper_contains", + "mutability": "mutable", + "inputs": [ + { + "name": "address_id", + "type": "u64" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "address_to_id_mapper_set", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "address_to_id_mapper_get_id_or_insert", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "address_to_id_mapper_remove_by_id", + "mutability": "mutable", + "inputs": [ + { + "name": "address_id", + "type": "u64" + } + ], + "outputs": [ + { + "type": "Option
" + } + ] + }, + { + "name": "address_to_id_mapper_remove_by_address", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "getListMapper", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "listMapperPushBack", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "listMapperPushFront", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "listMapperPopFront", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "listMapperPopBack", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "listMapperFront", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "listMapperBack", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "listMapperPushAfter", + "mutability": "mutable", + "inputs": [ + { + "name": "node_id", + "type": "u32" + }, + { + "name": "element", + "type": "u32" + } + ], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "listMapperPushBefore", + "mutability": "mutable", + "inputs": [ + { + "name": "node_id", + "type": "u32" + }, + { + "name": "element", + "type": "u32" + } + ], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "listMapperRemoveNode", + "mutability": "mutable", + "inputs": [ + { + "name": "node_id", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "listMapperRemoveNodeById", + "mutability": "mutable", + "inputs": [ + { + "name": "node_id", + "type": "u32" + } + ], + "outputs": [ + { + "type": "optional", + "multi_result": true + } + ] + }, + { + "name": "listMapperSetValue", + "mutability": "mutable", + "inputs": [ + { + "name": "node_id", + "type": "u32" + }, + { + "name": "new_value", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "listMapperSetValueById", + "mutability": "mutable", + "inputs": [ + { + "name": "node_id", + "type": "u32" + }, + { + "name": "new_value", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "listMapperIterateByHand", + "mutability": "mutable", + "inputs": [ + { + "name": "node_id", + "type": "u32" + } + ], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "listMapperIterateByIter", + "mutability": "mutable", + "inputs": [ + { + "name": "node_id", + "type": "u32" + } + ], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "queue_mapper", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "queue_mapper_push_back", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "queue_mapper_pop_front", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "queue_mapper_front", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "map_mapper", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic>", + "multi_result": true + } + ] + }, + { + "name": "map_mapper_keys", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "map_mapper_values", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "map_mapper_insert", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "value", + "type": "u32" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "map_mapper_contains_key", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "map_mapper_get", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "map_mapper_remove", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "map_mapper_entry_or_default_update_increment", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "increment", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "map_mapper_entry_or_insert_default", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "default", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "map_mapper_entry_and_modify", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "increment", + "type": "u32" + }, + { + "name": "otherwise", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "map_mapper_entry_or_insert_with_key", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "key_increment", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "map_storage_mapper_view", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "map_storage_mapper_insert_default", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "map_storage_mapper_contains_key", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "map_storage_mapper_get", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "map_storage_mapper_insert_value", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "key", + "type": "u32" + }, + { + "name": "value", + "type": "u32" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "map_storage_mapper_get_value", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "key", + "type": "u32" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "map_storage_mapper_remove", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "map_storage_mapper_clear", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "map_storage_mapper_entry_or_default_update_increment", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "key", + "type": "u32" + }, + { + "name": "increment", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "map_storage_mapper_entry_and_modify_increment_or_default", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "key", + "type": "u32" + }, + { + "name": "value", + "type": "u32" + }, + { + "name": "other", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "map_storage_mapper_entry_or_default_update", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + }, + { + "name": "key", + "type": "u32" + }, + { + "name": "value", + "type": "u32" + } + ], + "outputs": [ + { + "type": "Option" + } + ] + }, + { + "name": "set_mapper", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "set_mapper_insert", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "set_mapper_contains", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "set_mapper_remove", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "map_my_single_value_mapper", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "BigInt" + } + ] + }, + { + "name": "my_single_value_mapper_increment_1", + "mutability": "mutable", + "inputs": [ + { + "name": "amount", + "type": "BigInt" + } + ], + "outputs": [] + }, + { + "docs": [ + "Same as my_single_value_mapper_increment_1, but expressed more compactly." + ], + "name": "my_single_value_mapper_increment_2", + "mutability": "mutable", + "inputs": [ + { + "name": "amount", + "type": "BigInt" + } + ], + "outputs": [] + }, + { + "name": "my_single_value_mapper_subtract_with_require", + "mutability": "mutable", + "inputs": [ + { + "name": "amount", + "type": "BigInt" + } + ], + "outputs": [] + }, + { + "name": "my_single_value_mapper_set_if_empty", + "mutability": "mutable", + "inputs": [ + { + "name": "value", + "type": "BigInt" + } + ], + "outputs": [] + }, + { + "name": "clear_single_value_mapper", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "get_from_address_single_value_mapper", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "is_empty_single_value_mapper", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "is_empty_at_address_single_value_mapper", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "raw_byte_length_single_value_mapper", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "vec_mapper", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "vec_mapper_push", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "vec_mapper_get", + "mutability": "readonly", + "inputs": [ + { + "name": "index", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "vec_mapper_get_at_address", + "mutability": "readonly", + "inputs": [ + { + "name": "address", + "type": "Address" + }, + { + "name": "index", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "vec_mapper_len", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "vec_mapper_len_at_address", + "mutability": "readonly", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "token_attributes_set", + "mutability": "mutable", + "inputs": [ + { + "name": "token_id", + "type": "TokenIdentifier" + }, + { + "name": "token_nonce", + "type": "u64" + }, + { + "name": "attributes", + "type": "TokenAttributesStruct" + } + ], + "outputs": [] + }, + { + "name": "token_attributes_update", + "mutability": "mutable", + "inputs": [ + { + "name": "token_id", + "type": "TokenIdentifier" + }, + { + "name": "token_nonce", + "type": "u64" + }, + { + "name": "attributes", + "type": "TokenAttributesStruct" + } + ], + "outputs": [] + }, + { + "name": "token_attributes_get_attributes", + "mutability": "mutable", + "inputs": [ + { + "name": "token_id", + "type": "TokenIdentifier" + }, + { + "name": "token_nonce", + "type": "u64" + } + ], + "outputs": [ + { + "type": "TokenAttributesStruct" + } + ] + }, + { + "name": "token_attributes_get_nonce", + "mutability": "mutable", + "inputs": [ + { + "name": "token_id", + "type": "TokenIdentifier" + }, + { + "name": "attributes", + "type": "TokenAttributesStruct" + } + ], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "token_attributes_clear", + "mutability": "mutable", + "inputs": [ + { + "name": "token_id", + "type": "TokenIdentifier" + }, + { + "name": "token_nonce", + "type": "u64" + } + ], + "outputs": [] + }, + { + "name": "token_attributes_has_attributes", + "mutability": "mutable", + "inputs": [ + { + "name": "token_id", + "type": "TokenIdentifier" + }, + { + "name": "token_nonce", + "type": "u64" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "add_to_whitelist", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "remove_from_whitelist", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "check_contains", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "check_contains_at_address", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + }, + { + "name": "item", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "require_contains", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "require_contains_at_address", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + }, + { + "name": "item", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "issue_fungible_default_callback", + "mutability": "mutable", + "payableInTokens": [ + "EGLD" + ], + "inputs": [ + { + "name": "token_ticker", + "type": "bytes" + }, + { + "name": "initial_supply", + "type": "BigUint" + } + ], + "outputs": [] + }, + { + "name": "issue_fungible_custom_callback", + "mutability": "mutable", + "payableInTokens": [ + "EGLD" + ], + "inputs": [ + { + "name": "token_ticker", + "type": "bytes" + }, + { + "name": "initial_supply", + "type": "BigUint" + } + ], + "outputs": [] + }, + { + "name": "issue_and_set_all_roles_fungible", + "mutability": "mutable", + "payableInTokens": [ + "EGLD" + ], + "inputs": [ + { + "name": "token_ticker", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "set_local_roles_fungible", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "mint_fungible", + "mutability": "mutable", + "inputs": [ + { + "name": "amount", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "EsdtTokenPayment" + } + ] + }, + { + "name": "mint_and_send_fungible", + "mutability": "mutable", + "inputs": [ + { + "name": "to", + "type": "Address" + }, + { + "name": "amount", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "EsdtTokenPayment" + } + ] + }, + { + "name": "burn_fungible", + "mutability": "mutable", + "inputs": [ + { + "name": "amount", + "type": "BigUint" + } + ], + "outputs": [] + }, + { + "name": "get_balance_fungible", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "require_same_token_fungible", + "mutability": "mutable", + "payableInTokens": [ + "*" + ], + "inputs": [], + "outputs": [] + }, + { + "name": "require_all_same_token_fungible", + "mutability": "mutable", + "payableInTokens": [ + "*" + ], + "inputs": [], + "outputs": [] + }, + { + "name": "getFungibleTokenId", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "TokenIdentifier" + } + ] + }, + { + "name": "issue_and_set_all_roles_meta", + "mutability": "mutable", + "payableInTokens": [ + "EGLD" + ], + "inputs": [ + { + "name": "token_ticker", + "type": "bytes" + } + ], + "outputs": [] + }, + { + "name": "mapper_nft_set_token_id", + "mutability": "mutable", + "inputs": [ + { + "name": "token_id", + "type": "TokenIdentifier" + } + ], + "outputs": [] + }, + { + "name": "mapper_nft_create", + "mutability": "mutable", + "inputs": [ + { + "name": "amount", + "type": "BigUint" + }, + { + "name": "attributes", + "type": "RgbColor" + } + ], + "outputs": [ + { + "type": "EsdtTokenPayment" + } + ] + }, + { + "name": "mapper_nft_create_and_send", + "mutability": "mutable", + "inputs": [ + { + "name": "to", + "type": "Address" + }, + { + "name": "amount", + "type": "BigUint" + }, + { + "name": "attributes", + "type": "RgbColor" + } + ], + "outputs": [ + { + "type": "EsdtTokenPayment" + } + ] + }, + { + "name": "mapper_nft_add_quantity", + "mutability": "mutable", + "inputs": [ + { + "name": "token_nonce", + "type": "u64" + }, + { + "name": "amount", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "EsdtTokenPayment" + } + ] + }, + { + "name": "mapper_nft_add_quantity_and_send", + "mutability": "mutable", + "inputs": [ + { + "name": "to", + "type": "Address" + }, + { + "name": "token_nonce", + "type": "u64" + }, + { + "name": "amount", + "type": "BigUint" + } + ], + "outputs": [ + { + "type": "EsdtTokenPayment" + } + ] + }, + { + "name": "mapper_nft_burn", + "mutability": "mutable", + "inputs": [ + { + "name": "token_nonce", + "type": "u64" + }, + { + "name": "amount", + "type": "BigUint" + } + ], + "outputs": [] + }, + { + "name": "mapper_nft_get_balance", + "mutability": "mutable", + "inputs": [ + { + "name": "token_nonce", + "type": "u64" + } + ], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "mapper_get_token_attributes", + "mutability": "mutable", + "inputs": [ + { + "name": "token_nonce", + "type": "u64" + } + ], + "outputs": [ + { + "type": "RgbColor" + } + ] + }, + { + "name": "getNonFungibleTokenId", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "TokenIdentifier" + } + ] + }, + { + "name": "init_unique_id_mapper", + "mutability": "mutable", + "inputs": [ + { + "name": "len", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "unique_id_mapper_get", + "mutability": "mutable", + "inputs": [ + { + "name": "index", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "unique_id_mapper_swap_remove", + "mutability": "mutable", + "inputs": [ + { + "name": "index", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "unique_id_mapper_set", + "mutability": "mutable", + "inputs": [ + { + "name": "index", + "type": "u32" + }, + { + "name": "id", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "unique_id_mapper", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "managed_struct_eq", + "mutability": "mutable", + "inputs": [ + { + "name": "s1", + "type": "ExampleStructManaged" + }, + { + "name": "s2", + "type": "ExampleStructManaged" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "no_overflow_usize", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "no_overflow_u8", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u8" + } + ] + }, + { + "name": "no_overflow_u16", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u16" + } + ] + }, + { + "name": "no_overflow_u32", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "no_overflow_u64", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "overflow_usize", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "overflow_u8", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u8" + } + ] + }, + { + "name": "overflow_u16", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u16" + } + ] + }, + { + "name": "overflow_u32", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "overflow_u64", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "no_overflow_isize", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i32" + } + ] + }, + { + "name": "no_overflow_i8", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i8" + } + ] + }, + { + "name": "no_overflow_i16", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i16" + } + ] + }, + { + "name": "no_overflow_i32", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i32" + } + ] + }, + { + "name": "no_overflow_i64", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i64" + } + ] + }, + { + "name": "overflow_isize", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i32" + } + ] + }, + { + "name": "overflow_i8", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i8" + } + ] + }, + { + "name": "overflow_i16", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i16" + } + ] + }, + { + "name": "overflow_i32", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i32" + } + ] + }, + { + "name": "overflow_i64", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "i64" + } + ] + }, + { + "name": "token_identifier_egld", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "EgldOrEsdtTokenIdentifier" + } + ] + }, + { + "name": "token_identifier_is_valid_1", + "mutability": "mutable", + "inputs": [ + { + "name": "token_id", + "type": "EgldOrEsdtTokenIdentifier" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "token_identifier_is_valid_2", + "mutability": "mutable", + "inputs": [ + { + "name": "bytes", + "type": "bytes" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "non_zero_usize_iter", + "mutability": "readonly", + "inputs": [ + { + "name": "how_many", + "type": "u32" + } + ], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "non_zero_usize_macro", + "mutability": "readonly", + "inputs": [ + { + "name": "number", + "type": "u32" + } + ], + "outputs": [ + { + "type": "NonZeroUsize" + } + ] + }, + { + "name": "set_contract_address", + "mutability": "mutable", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [] + }, + { + "name": "is_empty_at_address", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "contains_at_address", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "len_at_address", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "fill_set_mapper", + "mutability": "mutable", + "inputs": [ + { + "name": "value", + "type": "u32" + } + ], + "outputs": [] + } + ], + "events": [ + { + "identifier": "event_err_topic", + "inputs": [ + { + "name": "err_topic", + "type": "CodecErrorTestType", + "indexed": true + } + ] + }, + { + "identifier": "event_err_data", + "inputs": [ + { + "name": "data", + "type": "CodecErrorTestType" + } + ] + }, + { + "identifier": "event_a", + "inputs": [ + { + "name": "data", + "type": "u32" + } + ] + }, + { + "identifier": "event_b", + "inputs": [ + { + "name": "arg1", + "type": "BigUint", + "indexed": true + }, + { + "name": "arg2", + "type": "Address", + "indexed": true + }, + { + "name": "data", + "type": "List" + } + ] + } + ], + "esdtAttributes": [], + "hasCallback": true, + "types": { + "CodecErrorTestType": { + "type": "struct", + "docs": [ + "Helper type to explore encode/decode errors." + ] + }, + "EsdtTokenPayment": { + "type": "struct", + "fields": [ + { + "name": "token_identifier", + "type": "TokenIdentifier" + }, + { + "name": "token_nonce", + "type": "u64" + }, + { + "name": "amount", + "type": "BigUint" + } + ] + }, + "ExampleEnumSimple": { + "type": "enum", + "docs": [ + "Copied from multiversx-sc serialization tests." + ], + "variants": [ + { + "docs": [ + "Variant 0 doc comment.", + "This will show up in the ABI." + ], + "name": "Variant0", + "discriminant": 0 + }, + { + "name": "Variant1", + "discriminant": 1 + }, + { + "docs": [ + "One line is enough. The one above doesn't have any." + ], + "name": "Variant2", + "discriminant": 2 + } + ] + }, + "ExampleEnumWithFields": { + "type": "enum", + "docs": [ + "Copied from multiversx-sc serialization tests." + ], + "variants": [ + { + "name": "Unit", + "discriminant": 0 + }, + { + "name": "Newtype", + "discriminant": 1, + "fields": [ + { + "name": "0", + "type": "u32" + } + ] + }, + { + "name": "Tuple", + "discriminant": 2, + "fields": [ + { + "name": "0", + "type": "u32" + }, + { + "name": "1", + "type": "u32" + } + ] + }, + { + "name": "Struct", + "discriminant": 3, + "fields": [ + { + "name": "a", + "type": "u32" + } + ] + } + ] + }, + "ExampleStructManaged": { + "type": "struct", + "fields": [ + { + "name": "big_uint", + "type": "BigUint" + }, + { + "name": "int", + "type": "u32" + }, + { + "name": "bytes", + "type": "bytes" + } + ] + }, + "RgbColor": { + "type": "struct", + "fields": [ + { + "name": "r", + "type": "u8" + }, + { + "name": "g", + "type": "u8" + }, + { + "name": "b", + "type": "u8" + } + ] + }, + "TokenAttributesStruct": { + "type": "struct", + "fields": [ + { + "name": "field_biguint", + "type": "BigUint" + }, + { + "name": "field_u64", + "type": "u64" + }, + { + "name": "field_vec_u32", + "type": "List" + } + ] + } + } + }, + "size": 61709, + "code": "0061736d0100000001f2012460000060027f7f0060027f7f017f60017f017f60037f7f7f0060017f0060037f7f7f017f6000017f60047f7f7f7f0060047f7f7f7f017f6000017e60027f7e0060057f7f7f7f7f0060017f017e60037f7e7f0060037f7f7e017f60027f7f017e60057f7f7e7f7f017f60057f7f7f7e7f0060017e0060067f7f7f7f7f7f017f60047f7f7e7f0060027e7f0060027f7e017f60047f7f7f7e0060017e017f60067e7f7f7f7f7f017f60077f7f7f7f7f7f7f00600b7f7f7e7f7f7f7f7f7f7f7f0060037e7f7f017f60037f7f7f017e60017e017e60037f7f7e0060067f7f7f7f7f7f0060047f7e7f7f0060067f7e7f7f7f7f0002e2146e03656e76126d616e616765645369676e616c4572726f72000503656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000403656e760b7369676e616c4572726f72000103656e760a6d4275666665724e6577000703656e760d6d427566666572417070656e64000203656e76096d4275666665724571000203656e76136d42756666657253746f7261676553746f7265000203656e760d6d42756666657246696e697368000303656e760a6765744761734c656674000a03656e76106d616e61676564534341646472657373000503656e7609626967496e744e6577001903656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001a03656e760f636c65616e52657475726e44617461000003656e76126d427566666572417070656e644279746573000603656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465001103656e760d6d616e6167656443616c6c6572000503656e76186d616e616765644765744f726967696e616c547848617368000503656e76106d4275666665724765744c656e677468000303656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365001203656e76136d616e616765644f776e657241646472657373000503656e7612626967496e7447657443616c6c56616c7565000503656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000503656e76126d427566666572476574417267756d656e74000203656e76136765744e756d455344545472616e7366657273000703656e7611676574417267756d656e744c656e677468000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000d03656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000d03656e7617626967496e744765745369676e6564417267756d656e74000103656e760f6765744e756d417267756d656e7473000703656e7616736d616c6c496e7446696e697368556e7369676e6564001303656e7614626967496e7446696e697368556e7369676e6564000503656e760666696e697368000103656e7609626967496e74537562000403656e760f6d4275666665725365744279746573000603656e7616656c6c6970746963437572766547657456616c756573001403656e761067657443757276654c656e6774684543000303656e76086372656174654543000203656e76146d427566666572436f707942797465536c696365000903656e7609626967496e7453686c000403656e7609626967496e74536872000403656e76176d42756666657246726f6d426967496e745369676e6564000203656e76156d427566666572546f426967496e745369676e6564000203656e7609626967496e74506f77000403656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e760a626967496e7453717274000103656e761776616c6964617465546f6b656e4964656e746966696572000303656e76126d42756666657253746f726167654c6f6164000203656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000403656e761b6d616e616765645472616e7366657256616c756545786563757465001103656e7609626967496e74436d70000203656e760f6973536d617274436f6e7472616374000303656e760f6d616e6167656457726974654c6f67000103656e760e636865636b4e6f5061796d656e74000003656e760a626967496e744c6f6732000303656e7612626967496e7446696e6973685369676e6564000503656e7614736d616c6c496e7446696e6973685369676e6564001303656e7609626967496e74416273000103656e7609626967496e744e6567000103656e7609626967496e744d756c000403656e760a626967496e7454446976000403656e760a626967496e74544d6f64000403656e7609626967496e74416e64000403656e7608626967496e744f72000403656e7609626967496e74586f72000403656e7611676574426c6f636b54696d657374616d70000a03656e760d676574426c6f636b4e6f6e6365000a03656e760d676574426c6f636b526f756e64000a03656e760d676574426c6f636b45706f6368000a03656e76196d616e61676564476574426c6f636b52616e646f6d53656564000503656e761567657450726576426c6f636b54696d657374616d70000a03656e761167657450726576426c6f636b4e6f6e6365000a03656e761167657450726576426c6f636b526f756e64000a03656e761167657450726576426c6f636b45706f6368000a03656e761d6d616e6167656447657450726576426c6f636b52616e646f6d53656564000503656e761167657453686172644f6641646472657373000303656e76176d616e616765644765745374617465526f6f7448617368000503656e76166d616e61676564476574436f64654d65746164617461000103656e76186d616e6167656449734275696c74696e46756e6374696f6e000303656e760d6d616e61676564536861323536000203656e76106d616e616765644b656363616b323536000203656e76106d616e61676564526970656d64313630000203656e76106d616e61676564566572696679424c53000603656e76146d616e6167656456657269667945643235353139000603656e76166d616e61676564566572696679536563703235366b31000603656e761c6d616e61676564566572696679437573746f6d536563703235366b31000903656e76226d616e61676564456e636f6465536563703235366b314465725369676e6174757265000603656e760f6d616e616765644372656174654543000303656e7616676574507269764b6579427974654c656e6774684543000303656e76056164644543001b03656e7608646f75626c654543000c03656e760b69734f6e43757276654543000603656e76136d616e616765645363616c61724d756c744543001403656e76176d616e616765645363616c6172426173654d756c744543000903656e76106d616e616765644d61727368616c4543000903656e761a6d616e616765644d61727368616c436f6d707265737365644543000903656e76126d616e61676564556e6d61727368616c4543000903656e761c6d616e61676564556e6d61727368616c436f6d707265737365644543000903656e76146d616e6167656447656e65726174654b65794543000903656e76106d42756666657253657452616e646f6d000203656e76136d42756666657253657442797465536c696365000903656e76176d616e6167656447657445534454546f6b656e44617461001c03656e760d626967496e744973496e743634000303656e760e626967496e74476574496e743634000d03656e760a626967496e745369676e000303656e76136d42756666657247657442797465536c696365000903656e76106d616e616765644173796e6343616c6c0008039f059d05070203070501010c0003020201040201080101040108050103050108070102010301010301010103040401150e010b011d0e07070f0507070507090210080006060806060601060306030601060602090601060c1e0602070606060303030502020409060403080501050500010305090516010101010105010501050105040308040308010c05070104040601080b0404010303080204010117021f0201010103020201010203070b0408040309040503030d0303030303010104040504010502100202020102080b060102020402010804010202060204020202080101090101080103010304010608060201020102040402040401040801040101050b01032017030e02101610050703010403080205210202020f010318040f0f15010618040c0112020503030501050704010c0301220304050103020505050503070707050705070705000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e230405030100030616037f01418080080b7f004195e7080b7f0041a0e7080b07e244fc02066d656d6f7279020004696e697400b4031070616e6963576974684d65737361676500b5030a636f756e745f6f6e657300b70319656e64706f696e745f776974685f6d757461626c655f61726700b8030d737172745f6269675f75696e7400b9030d6c6f67325f6269675f75696e7400ba030b706f775f6269675f696e7400bb030c706f775f6269675f75696e7400bc030f6269675f75696e745f746f5f75363400bd031562696775696e745f6f76657277726974655f75363400bf030d6269675f75696e745f7a65726f00c003136269675f75696e745f66726f6d5f7536345f3100c1031162696775696e745f66726f6d5f7531323800c2031c6269675f75696e745f66726f6d5f6d616e616765645f62756666657200c3030c6269675f696e745f7a65726f00c403126269675f696e745f66726f6d5f6936345f3100c5030f6269675f75696e745f65715f75363400c6030e6269675f696e745f746f5f69363400c70314626967696e745f6f76657277726974655f69363400c803106269675f696e745f746f5f706172747300c903146269675f696e745f66726f6d5f62696775696e7400ca030b6164645f6269675f696e7400cb03146164645f6269675f696e745f6269675f75696e7400cc03146164645f6269675f75696e745f6269675f696e7400cd03186164645f6269675f696e745f6269675f75696e745f72656600ce03186164645f6269675f75696e745f6269675f696e745f72656600cf030f6164645f6269675f696e745f72656600d0030c6164645f6269675f75696e7400d103106164645f6269675f75696e745f72656600d2030b7375625f6269675f696e7400d3030f7375625f6269675f696e745f72656600d4030c7375625f6269675f75696e7400d503107375625f6269675f75696e745f72656600d6030b6d756c5f6269675f696e7400d7030f6d756c5f6269675f696e745f72656600d8030c6d756c5f6269675f75696e7400d903106d756c5f6269675f75696e745f72656600da030b6469765f6269675f696e7400db030f6469765f6269675f696e745f72656600dc030c6469765f6269675f75696e7400dd03106469765f6269675f75696e745f72656600de030b72656d5f6269675f696e7400df030f72656d5f6269675f696e745f72656600e0030c72656d5f6269675f75696e7400e1031072656d5f6269675f75696e745f72656600e203126164645f61737369676e5f6269675f696e7400e303166164645f61737369676e5f6269675f696e745f72656600e403136164645f61737369676e5f6269675f75696e7400e503127375625f61737369676e5f6269675f696e7400e603167375625f61737369676e5f6269675f696e745f72656600e703137375625f61737369676e5f6269675f75696e7400e803126d756c5f61737369676e5f6269675f696e7400e903136d756c5f61737369676e5f6269675f75696e7400ea03126469765f61737369676e5f6269675f696e7400eb03136469765f61737369676e5f6269675f75696e7400ec031272656d5f61737369676e5f6269675f696e7400ed031372656d5f61737369676e5f6269675f75696e7400ee03106269745f616e645f6269675f75696e7400ef03146269745f616e645f6269675f75696e745f72656600f0030f6269745f6f725f6269675f75696e7400f103136269745f6f725f6269675f75696e745f72656600f203106269745f786f725f6269675f75696e7400f303146269745f786f725f6269675f75696e745f72656600f403176269745f616e645f61737369676e5f6269675f75696e7400f503166269745f6f725f61737369676e5f6269675f75696e7400f603176269745f786f725f61737369676e5f6269675f75696e7400f7030c7368725f6269675f75696e7400f803107368725f6269675f75696e745f72656600f9030c73686c5f6269675f75696e7400fa031073686c5f6269675f75696e745f72656600fb03137368725f61737369676e5f6269675f75696e7400fc031373686c5f61737369676e5f6269675f75696e7400fd03136765745f626c6f636b5f74696d657374616d7000fe030f6765745f626c6f636b5f6e6f6e636500ff030f6765745f626c6f636b5f726f756e640080040f6765745f626c6f636b5f65706f6368008104156765745f626c6f636b5f72616e646f6d5f73656564008204186765745f707265765f626c6f636b5f74696d657374616d70008304146765745f707265765f626c6f636b5f6e6f6e6365008404146765745f707265765f626c6f636b5f726f756e64008504146765745f707265765f626c6f636b5f65706f63680086041a6765745f707265765f626c6f636b5f72616e646f6d5f736565640087040a6765745f63616c6c6572008804116765745f6f776e65725f61646472657373008904146765745f73686172645f6f665f61646472657373008a041169735f736d6172745f636f6e7472616374008b04136765745f73746174655f726f6f745f68617368008c040b6765745f74785f68617368008d040c6765745f6761735f6c656674008e041f6765745f63756d756c617465645f76616c696461746f725f72657761726473008f04116765745f636f64655f6d657461646174610090041369735f6275696c74696e5f66756e6374696f6e00910410636f6465635f6572725f66696e69736800920415636f6465635f6572725f73746f726167655f6b657900930415636f6465635f6572725f73746f726167655f67657400940415636f6465635f6572725f73746f726167655f73657400950415636f6465635f6572725f6576656e745f746f70696300960414636f6465635f6572725f6576656e745f6461746100970417636f6465635f6572725f636f6e74726163745f696e697400980417636f6465635f6572725f636f6e74726163745f63616c6c0099040e636f6d707574655f736861323536009a0411636f6d707574655f6b656363616b323536009b0411636f6d707574655f726970656d64313630009c04147665726966795f626c735f7369676e6174757265009d04187665726966795f656432353531395f7369676e6174757265009e041a7665726966795f736563703235366b315f7369676e6174757265009f04217665726966795f637573746f6d5f736563703235366b315f7369676e617475726500a0041f636f6d707574655f736563703235366b315f6465725f7369676e617475726500a104086563686f5f75363400a204086563686f5f69363400a304086563686f5f69333200a404086563686f5f75333200a5040a6563686f5f6973697a6500a604076563686f5f693800a704076563686f5f753800a804096563686f5f626f6f6c00a9040d6563686f5f6f70745f626f6f6c00aa040c6563686f5f6e6f7468696e6700ab040d6563686f5f61727261795f753800ac04146563686f5f6d756c74695f76616c75655f75333200ad04176563686f5f6d756c74695f76616c75655f7475706c657300ae04126563686f5f7365725f6578616d706c655f3200af04106563686f5f73696d706c655f656e756d00b0041c66696e6973685f73696d706c655f656e756d5f76617269616e745f3100b104136563686f5f6e6f6e5f7a65726f5f7573697a6500b2041c6563686f5f736f6d655f617267735f69676e6f72655f6f746865727300b3040d6563686f5f617272617976656300b4040d6563686f5f6269675f75696e7400b5040c6563686f5f6269675f696e7400b604136563686f5f6d616e616765645f62756666657200b704146563686f5f6d616e616765645f6164647265737300b804186563686f5f6269675f696e745f6d616e616765645f76656300b904126563686f5f6269675f696e745f7475706c6500ba04136563686f5f6269675f696e745f6f7074696f6e00bb041b6563686f5f7475706c655f696e746f5f6d756c7469726573756c7400bc041f6563686f5f6d616e616765645f7665635f6f665f6d616e616765645f76656300bd04246563686f5f6d616e616765645f7665635f6f665f746f6b656e5f6964656e74696669657200be041f6563686f5f6d616e616765645f6173796e635f726573756c745f656d70747900bf04176563686f5f7661726167735f6d616e616765645f73756d00c00412636f6d707574655f6765745f76616c75657300c10411636f6d707574655f6372656174655f656300c20415636f6d707574655f6765745f65635f6c656e67746800c30420636f6d707574655f6765745f707269765f6b65795f627974655f6c656e67746800c4040e636f6d707574655f65635f61646400c50411636f6d707574655f65635f646f75626c6500c60416636f6d707574655f69735f6f6e5f63757276655f656300c70413636f6d707574655f7363616c61725f6d756c7400c80418636f6d707574655f7363616c61725f626173655f6d756c7400c90412636f6d707574655f6d61727368616c5f656300ca041d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300cb0414636f6d707574655f756e6d61727368616c5f656300cc041f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f656300cd0417636f6d707574655f67656e65726174655f6b65795f656300ce04096c6f674576656e744100cf040f6c6f674576656e744152657065617400d004096c6f674576656e744200d104136f6e6c795f6f776e65725f656e64706f696e7400d2041a6f6e6c795f757365725f6163636f756e745f656e64706f696e7400d3040e726571756972655f657175616c7300d4040873635f70616e696300d504136d616464726573735f66726f6d5f617272617900d6041c6d616464726573735f66726f6d5f6d616e616765645f62756666657200d7040b6d6275666665725f6e657700d8040e6d6275666665725f636f6e63617400d904126d6275666665725f636f70795f736c69636500da04126d6275666665725f7365745f72616e646f6d00db040a6d6275666665725f657100dc04146d616e616765645f616464726573735f7a65726f00dd04126d616e616765645f616464726573735f657100de040f6d616e616765645f7665635f6e657700df04186d616e616765645f7665635f62696775696e745f7075736800e004166d616e616765645f7665635f62696775696e745f657100e104186d616e616765645f7665635f616464726573735f7075736800e2040f6d616e616765645f7665635f73657400e304126d616e616765645f7665635f72656d6f766500e404106d616e616765645f7665635f66696e6400e504146d616e616765645f7665635f636f6e7461696e7300e604166d616e616765645f7665635f61727261795f7075736800e704146d616e616765645f7265665f6578706c6963697400e8041073746f726167655f726561645f72617700e9041173746f726167655f77726974655f72617700ea041973746f726167655f726561645f66726f6d5f6164647265737300eb040a6c6f61645f627974657300ec040d6c6f61645f6269675f75696e7400ed040c6c6f61645f6269675f696e7400ee04086c6f61645f75363400ef040a6c6f61645f7573697a6500f004086c6f61645f69363400f104096c6f61645f626f6f6c00f204096c6f61645f6164647200f3040d6c6f61645f6f70745f6164647200f4041169735f656d7074795f6f70745f6164647200f5040f6765745f6e725f746f5f636c65617200f60413636c6561725f73746f726167655f76616c756500f7040a6c6f61645f7365725f3200f804096c6f61645f6d61703100f904096c6f61645f6d61703200fa04096c6f61645f6d61703300fb04156c6f61645f66726f6d5f616464726573735f72617700fc040b73746f72655f627974657300fd040e73746f72655f6269675f75696e7400fe040d73746f72655f6269675f696e7400ff040b73746f72655f7573697a650080050973746f72655f6933320081050973746f72655f7536340082050973746f72655f6936340083050a73746f72655f626f6f6c0084050a73746f72655f616464720085050e73746f72655f6f70745f616464720086050b73746f72655f7365725f320087050a73746f72655f6d6170310088050a73746f72655f6d6170320089050a73746f72655f6d617033008a051273746f72655f72657365727665645f693634008b051773746f72655f72657365727665645f6269675f75696e74008c051573746f72655f72657365727665645f7665635f7538008d051b616464726573735f746f5f69645f6d61707065725f6765745f6964008e0524616464726573735f746f5f69645f6d61707065725f6765745f69645f6e6f6e5f7a65726f008f0520616464726573735f746f5f69645f6d61707065725f6765745f616464726573730090051d616464726573735f746f5f69645f6d61707065725f636f6e7461696e7300910518616464726573735f746f5f69645f6d61707065725f73657400920525616464726573735f746f5f69645f6d61707065725f6765745f69645f6f725f696e7365727400930521616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f696400940526616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f616464726573730095050d6765744c6973744d6170706572009605126c6973744d6170706572507573684261636b009705136c6973744d61707065725075736846726f6e74009905126c6973744d6170706572506f7046726f6e74009a05116c6973744d6170706572506f704261636b009b050f6c6973744d617070657246726f6e74009c050e6c6973744d61707065724261636b009d05136c6973744d6170706572507573684166746572009e05146c6973744d6170706572507573684265666f7265009f05146c6973744d617070657252656d6f76654e6f646500a005186c6973744d617070657252656d6f76654e6f64654279496400a105126c6973744d617070657253657456616c756500a205166c6973744d617070657253657456616c75654279496400a305176c6973744d617070657249746572617465427948616e6400a405176c6973744d61707065724974657261746542794974657200a5050c71756575655f6d617070657200a6051671756575655f6d61707065725f707573685f6261636b00a7051671756575655f6d61707065725f706f705f66726f6e7400a8051271756575655f6d61707065725f66726f6e7400a9050a6d61705f6d617070657200aa050f6d61705f6d61707065725f6b65797300ab05116d61705f6d61707065725f76616c75657300ac05116d61705f6d61707065725f696e7365727400ad05176d61705f6d61707065725f636f6e7461696e735f6b657900ae050e6d61705f6d61707065725f67657400af05116d61705f6d61707065725f72656d6f766500b0052c6d61705f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e7400b105226d61705f6d61707065725f656e7472795f6f725f696e736572745f64656661756c7400b2051b6d61705f6d61707065725f656e7472795f616e645f6d6f6469667900b305236d61705f6d61707065725f656e7472795f6f725f696e736572745f776974685f6b657900b405176d61705f73746f726167655f6d61707065725f7669657700b505216d61705f73746f726167655f6d61707065725f696e736572745f64656661756c7400b6051f6d61705f73746f726167655f6d61707065725f636f6e7461696e735f6b657900b705166d61705f73746f726167655f6d61707065725f67657400b8051f6d61705f73746f726167655f6d61707065725f696e736572745f76616c756500b9051c6d61705f73746f726167655f6d61707065725f6765745f76616c756500ba05196d61705f73746f726167655f6d61707065725f72656d6f766500bb05186d61705f73746f726167655f6d61707065725f636c65617200bc05346d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e7400bd05386d61705f73746f726167655f6d61707065725f656e7472795f616e645f6d6f646966795f696e6372656d656e745f6f725f64656661756c7400be052a6d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f75706461746500bf050a7365745f6d617070657200c005117365745f6d61707065725f696e7365727400c105137365745f6d61707065725f636f6e7461696e7300c205117365745f6d61707065725f72656d6f766500c3051a6d61705f6d795f73696e676c655f76616c75655f6d617070657200c405226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3100c505226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3200c6052c6d795f73696e676c655f76616c75655f6d61707065725f73756274726163745f776974685f7265717569726500c705236d795f73696e676c655f76616c75655f6d61707065725f7365745f69665f656d70747900c80519636c6561725f73696e676c655f76616c75655f6d617070657200c905246765745f66726f6d5f616464726573735f73696e676c655f76616c75655f6d617070657200ca052769735f656d7074795f61745f616464726573735f73696e676c655f76616c75655f6d617070657200cb05237261775f627974655f6c656e6774685f73696e676c655f76616c75655f6d617070657200cc050a7665635f6d617070657200cd050f7665635f6d61707065725f7075736800ce050e7665635f6d61707065725f67657400cf05197665635f6d61707065725f6765745f61745f6164647265737300d0050e7665635f6d61707065725f6c656e00d105197665635f6d61707065725f6c656e5f61745f6164647265737300d20514746f6b656e5f617474726962757465735f73657400d30517746f6b656e5f617474726962757465735f75706461746500d4051f746f6b656e5f617474726962757465735f6765745f6174747269627574657300d5051a746f6b656e5f617474726962757465735f6765745f6e6f6e636500d60516746f6b656e5f617474726962757465735f636c65617200d7051f746f6b656e5f617474726962757465735f6861735f6174747269627574657300d805106164645f746f5f77686974656c69737400d9051572656d6f76655f66726f6d5f77686974656c69737400da050e636865636b5f636f6e7461696e7300db0519636865636b5f636f6e7461696e735f61745f6164647265737300dc0510726571756972655f636f6e7461696e7300dd051b726571756972655f636f6e7461696e735f61745f6164647265737300de051f69737375655f66756e6769626c655f64656661756c745f63616c6c6261636b00df051e69737375655f66756e6769626c655f637573746f6d5f63616c6c6261636b00e0052069737375655f616e645f7365745f616c6c5f726f6c65735f66756e6769626c6500e105187365745f6c6f63616c5f726f6c65735f66756e6769626c6500e2050d6d696e745f66756e6769626c6500e305166d696e745f616e645f73656e645f66756e6769626c6500e4050d6275726e5f66756e6769626c6500e505146765745f62616c616e63655f66756e6769626c6500e6051b726571756972655f73616d655f746f6b656e5f66756e6769626c6500e7051f726571756972655f616c6c5f73616d655f746f6b656e5f66756e6769626c6500e8051267657446756e6769626c65546f6b656e496400e9051c69737375655f616e645f7365745f616c6c5f726f6c65735f6d65746100ea05176d61707065725f6e66745f7365745f746f6b656e5f696400eb05116d61707065725f6e66745f63726561746500ec051a6d61707065725f6e66745f6372656174655f616e645f73656e6400ed05176d61707065725f6e66745f6164645f7175616e7469747900ee05206d61707065725f6e66745f6164645f7175616e746974795f616e645f73656e6400ef050f6d61707065725f6e66745f6275726e00f005166d61707065725f6e66745f6765745f62616c616e636500f1051b6d61707065725f6765745f746f6b656e5f6174747269627574657300f205156765744e6f6e46756e6769626c65546f6b656e496400f30515696e69745f756e697175655f69645f6d617070657200f40514756e697175655f69645f6d61707065725f67657400f5051c756e697175655f69645f6d61707065725f737761705f72656d6f766500f60514756e697175655f69645f6d61707065725f73657400f70510756e697175655f69645f6d617070657200f805116d616e616765645f7374727563745f657100f9050c6f766572666c6f775f75313600fa050f6e6f5f6f766572666c6f775f69313600fb050c6f766572666c6f775f69313600fc0515746f6b656e5f6964656e7469666965725f65676c6400fd051b746f6b656e5f6964656e7469666965725f69735f76616c69645f3100fe051b746f6b656e5f6964656e7469666965725f69735f76616c69645f3200ff05136e6f6e5f7a65726f5f7573697a655f69746572008006146e6f6e5f7a65726f5f7573697a655f6d6163726f008106147365745f636f6e74726163745f616464726573730082061369735f656d7074795f61745f6164647265737300830613636f6e7461696e735f61745f616464726573730084060e6c656e5f61745f616464726573730085060f66696c6c5f7365745f6d61707065720086060863616c6c4261636b008706196563686f5f7661726167735f6d616e616765645f656167657200ad04136269675f75696e745f66726f6d5f7536345f3200c103126269675f696e745f66726f6d5f6936345f3200c5031c69735f656d7074795f73696e676c655f76616c75655f6d617070657200ca050e6f766572666c6f775f7573697a6500fa050b6f766572666c6f775f753800fa050c6f766572666c6f775f75333200fa050c6f766572666c6f775f75363400fa050e6f766572666c6f775f6973697a6500fc050b6f766572666c6f775f693800fc050c6f766572666c6f775f69333200fc050c6f766572666c6f775f69363400fc050a6563686f5f7573697a6500a504116c6f67325f6269675f75696e745f72656600ba03176164645f61737369676e5f6269675f75696e745f72656600e503177375625f61737369676e5f6269675f75696e745f72656600e803166d756c5f61737369676e5f6269675f696e745f72656600e903176d756c5f61737369676e5f6269675f75696e745f72656600ea03166469765f61737369676e5f6269675f696e745f72656600eb03176469765f61737369676e5f6269675f75696e745f72656600ec031672656d5f61737369676e5f6269675f696e745f72656600ed031772656d5f61737369676e5f6269675f75696e745f72656600ee031b6269745f616e645f61737369676e5f6269675f75696e745f72656600f5031a6269745f6f725f61737369676e5f6269675f75696e745f72656600f6031b6269745f786f725f61737369676e5f6269675f75696e745f72656600f703177368725f61737369676e5f6269675f75696e745f72656600fc031773686c5f61737369676e5f6269675f75696e745f72656600fd0311737172745f6269675f75696e745f72656600b903206269675f75696e745f66726f6d5f6d616e616765645f6275666665725f72656600c303116e6f5f6f766572666c6f775f7573697a6500fb050e6e6f5f6f766572666c6f775f753800fb050f6e6f5f6f766572666c6f775f75333200fb050f6e6f5f6f766572666c6f775f75363400fb050f6e6f5f6f766572666c6f775f75313600fb05116e6f5f6f766572666c6f775f6973697a6500fb050e6e6f5f6f766572666c6f775f693800fb050f6e6f5f6f766572666c6f775f69333200fb050f6e6f5f6f766572666c6f775f69363400fb050f706f775f6269675f696e745f72656600bb0310706f775f6269675f75696e745f72656600bc030a5f5f646174615f656e6403010b5f5f686561705f6261736503020ae3e8029d050a0041808008410f106f0b1101017f107122022000200110241a20020b1601017f1071220142001001200120012000100220010b2701027f41b09808280200220141016b2200200148044041b09808200036020020000f0b1076000b0d0020004116418f8008108a060b7301027f230041106b22022400027f410020011095012201108e020d001a2001101241074604402002410036000b2002410036020820014100200241086a2203410710a8011a41012003410741e78f08410710d0010d011a0b41020b21032000200136020420002003360200200241106a24000b0900200020011003000b2e000240200120024d0440200220044d0d011076000b1076000b2000200220016b3602042000200120036a3602000b060010b603000b0f01017f10042201200010051a20010b0b0020002001100641004a0b1100200041024f0440200110771a0b20000b5b01037f230041106b2203240020012802042202047f200341086a200128020022042802002002107b2001200328020c36020420042802002002107c210241010541000b21012000200236020420002001360200200341106a24000b820101027f230041206b220324002003410c6a2204200141c98708410b200210cc02109401200410d30221012003410c6a10d3022102200328020c200328021010c40104402003411c6a2d0000044041c4e608410036020041c8e60841003a00000b2000200236020420002001360200200341206a24000f0b41a58008410e10ff01000b1200200041d487084106200110cc02109f020b0f002000200141db8008411b107e000b160020002001106f220020022003100e1a20001000000b820101017f230041306b2202240020002001280200047f200241286a2001410c6a2902003702002002410136021c200220012902043702202002410c6a2002411c6a10800120012001280214280200200241146a22012802001081012000410c6a20012902003702002000200229020c37020441010541000b360200200241306a24000b280020012802004504401076000b20002001290204370200200041086a2001410c6a2902003702000b2401017f20002001200210dd02047f410005200041046a2001200210de0241010b3602000b7001027f230041106b22022400200241086a2001107a20002002280208410146047f200220012802082201280200200141086a280200200228020c2201108301200228020421032002280200108401200041086a20033602002000200136020441010541000b360200200241106a24000b2a002001200310ba02047f2002200310b902210341010541000b210120002003360204200020013602000b0b0020004504401076000b0b0c002001200010860110071a0b0f01017f107122012000102e1a20010b6f01027f230041106b220124002000027f41c8e6082d0000220245044041c8e60841013a000041c4e6084100360200200141086a41001088012001280208200128020c41d894084100108901108a010c010b41d894084100106f0b360200200020024101733a0004200141106a24000b3e01017f230041106b22022400200241086a41b498084190ce00200110fb01200228020c21012000200228020836020020002001360204200241106a24000bb50201067f200120034604402001220341104f04402000410020006b41037122046a210520040440200221010340200020012d00003a0000200141016a2101200041016a22002005490d000b0b2005200320046b2203417c7122066a21000240200220046a22044103710440200641004c0d012004410374220141187121072004417c71220841046a2102410020016b4118712109200828020021010340200520012007762002280200220120097472360200200241046a2102200541046a22052000490d000b0c010b200641004c0d0020042102034020052002280200360200200241046a2102200541046a22052000490d000b0b20034103712103200420066a21020b20030440200020036a21010340200020022d00003a0000200241016a2102200041016a22002001490d000b0b0f0b1076000b1301017f1071220041d89408410010241a20000b0c0020002001108c0110081a0b4901017f230041106b22022400200220013a000c20022000360208200241086a109d02200228020820022d000c044041c4e608410036020041c8e60841003a00000b200241106a24000b0c0020002001108e01108f010b0d0020001071220010181a20000b3301017f200110122102200041106a41003a00002000410c6a20023602002000200136020820002002360204200041003602000b0c00200010910120011092010b0f01017f107122012000102b1a20010b5101027f230041106b22022400200220001012220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410f7012001200010e401200241106a24000b0c00200010860120011092010b0c0020002001109501108f010b0d0020001071220010321a20000b3b01017f230041106b22032400200341086a20011095012002109701200328020c21012000200328020836020020002001360204200341106a24000b5b01027f230041106b2203240020011012220441084d0440200341086a2002200410fe012001410020032802082201200328020c220210a8011a2000200236020420002001360200200341106a24000f0b41a58008410e10ff01000b0900200020011074000be90101047f108a012106108a012107230041106b22042400108a0121052001107721012003107021032004200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484843702042004200141187420014180fe03714108747220014108764180fe0371200141187672723602002004200341187420034180fe03714108747220034108764180fe03712003411876727236020c200520044110100e1a20002005420020062007100f1a200441106a24000b150020002001200241ba8108410b41ad81081089060b0f00108a011a20002001107710b3010b1501017f108a012202200110fc012000200210b3010b1000108a011a2000200110860110b3010b1d004167100a200041674200100b2001200210712201100c1a100d20010b150020002001200241d28108411241c581081089060b0c01017f10712200101020000b0c01017f10712200101120000b2e01027f10712103200110122104200010a301200141f5e60810131a41d5e60841f5e608200420022003101420030b0b00200041d5e60810131a0b0c01017f10712200101520000b2b01017f41d0e6082d000022000440417541ffffffff0720001b0f0b41d0e60841013a00004175101641750bbd01020a7f017e230041206b22012400024010a701220410124170714110460440200410122105200141106a2106410121030340200241106a220720054b0d02200642003703002001420037030820042002200141086a2202411010a8011a2001410036021c200320022001411c6a220310a90121092002200310aa01210b2002200310a901210a20072102410021030d000b10b603000b4191820841221003000b2000200a36020c200020093602082000200b370300200141206a24000b2b01017f41d4e6082d000022000440416b41ffffffff0720001b0f0b41d4e60841013a0000416b1017416b0b0f002000200120032002106c4100470b7f01037f230041106b220224002002410036020c2001280200220341046a220420034904401076000b2002200320042000411010752002410c6a41042002280200200228020410890120012004360200200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720bb30102017e037f230041106b22032400200342003703082001280200220441086a220520044904401076000b200320042005200041101075200341086a4108200328020020032802041089012001200536020020032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b2e01017f41b382084117106f220420002001100e1a200441ca82084103100e1a200420022003100e1a20041000000b120010194504400f0b41cd820841251003000b3001017f2000280200220341cce6082802004e04402001200241f28208411110ab01000b2000200341016a36020020030b2c01017e2000101d22034280808080087d42ffffffff6f5804402001200241a99008411210ab01000b2003a70b5d01027f027f410020012002200310b001220445200441ebde0146720d001a200128020041cce6082802004e0440108a01210541010c010b20012002200310b101210541010b21012000200536020820002004360204200020013602000b120020002001200210ad012001200210bb010b0e0020002001200210ad01108e010b2f01017f108a0121030340200028020041cce6082802004e450440200320002001200210b10110b3010c010b0b20030b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100e1a200241106a24000b21002000108e012200101241204704402001200241ee8f08411010ab01000b20000b2b00200041bb9008410e10b601107722001012412047044041bb9008410e41ee8f08411010ab01000b20000b5e01027f230041106b22032400200341086a200028020020002802082204109902024020032802084101460440200441016a22010d011076000b2001200241f28208411110ab01000b200328020c200020013602081077200341106a24000b0d00200041bb8e08410b10b8010b0d0020002001200210b60110770ba70101027f230041106b22022400027f200141b98f08410610b001220341ebde0147410020031b450440200141b98f08410610ad01108e0121012002410036020441040c010b027f200128020041cce6082802004e0440108a010c010b200141b98f08410610b1010b2101200220033602082002410136020441080b200241046a6a200136020020002002290204370200200041086a2002410c6a280200360200200241106a24000b0b0020002001200210bb010b2601017e2000101b220342ffffffff0f5804402003a70f0b2001200241a58008410e10ab01000b1300200020014d0440200120006b0f0b1076000b6101027f230041106b22042400200441086a2000280208200028020022052001108202024020042802084101460440200120056a220120054f0d011076000b2002200341d18508410f10ab01000b200428020c20002001360200200441106a24000b2301017e2000101b220342ff015804402003a70f0b2001200241a58008410e10ab01000bde0102037f017e230041206b22022400200241046a22032001108d01200341cb8f08410a10c0012104200242003703182003200241186a2201410841cb8f08410a10c10120014108410010c2012105200341cb8f08410a10c3012101108a0121030340200104402003200241046a41cb8f08410a10c30110b301200141016b21010c010b0b2002280204200228020810c4010440200241146a2d0000044041c4e608410036020041c8e60841003a00000b2000200336020c2000200436020820002005370300200241206a24000f0b41cb8f08410a41a58008410e10ab01000b0e0020002001200210c7011081020b43000240200041086a200028020020012002109b024504402000280200220120026a220220014f0d011076000b2003200441d18508410f10ab01000b200020023602000b4401017e02402001450d002002044020002c0000410775ac21030b03402001450d01200141016b210120003100002003420886842103200041016a21000c000b000b20030b3902017f017e230041106b220324002003410036020c20002003410c6a220041042001200210c10120004104410010c201200341106a2400a70b0a002000200110bc01450b0d00410041dc8d08410110ae010b3001017f230041106b22032400200341003a000f20002003410f6a41012001200210c10120032d000f200341106a24000b1400200020002001200210c3012001200210bd010b0b0020002001200210b4010b1000200041cb8b08410110c7011080020ba10101037f230041206b220124002001410c6a22022000108d01200241cb8f08410a10c60121002001410c6a41cb8f08410a10c60121022001410c6a41cb8f08410a10c6012103200128020c200128021010c40104402001411c6a2d0000044041c4e608410036020041c8e60841003a00000b200141206a2400200041ff01712003411074200241ff017141087472720f0b41cb8f08410a41a58008410e10ab01000b0c00200010712200101c20000b1f01017f230041106b220124002000450440200141106a24000f0b10b603000b3301017e027f02402000101b2202420158044041002002a741016b0d021a0c010b2001410141a99008411210ab01000b41010b0b2601017e4100101d22024280017d42ff7d5804402000200141a99008411210ab01000b2002a70bfa0102027f017e230041206b22032400024002404100101a450d002003410c6a22044100108d010240024002400240024020042001200210c60141ff017122040e0404010203000b2001200241b38008410d10ab01000b2003410c6a2001200210c301ad2105410121040c020b2003410c6a2001200210c301ad2003410c6a2001200210c301ad422086842105410221040c010b2003410c6a2001200210c301ad2105410321040b200328020c200328021010c401450d012003411c6a2d0000450d0041c4e608410036020041c8e60841003a00000b2000200537020420002004360200200341206a24000f0b2001200241a58008410e10ab01000b5301027f2001200346047f4100210302402001450d00034020002d0000220420022d00002205460440200041016a2100200241016a2102200141016b22010d010c020b0b200420056b21030b20030541010b450b9a0101047f230041206b220324002000108e012104108a0121052004101221002003411c6a41003a0000200341186a200036020020032004360214200320003602102003410036020c037f2006200010bc01047f20052003410c6a2001200210c00110b30120032802102100200328020c21060c010520032d001c044041c4e608410036020041c8e60841003a00000b200341206a240020050b0b0b920101037f230041206b220324002003410c6a22042001108d0120042002410210c001210120042002410210c301210520042002410210c7012104200328020c200328021010c40104402003411c6a2d0000044041c4e608410036020041c8e60841003a00000b200020043602082000200536020420002001360200200341206a24000f0b2002410241a58008410e10ab01000b0c00200010712200101e20000be20102057f017e230041206b2204240020042001108d01200441186a21074105210103402001044020042002200310c6012106200541044b2208450440200520076a20063a0000200541016a21050b200810cc01200141016b21010c01050240200541054f0d002002200341869008411210ab01000b0b0b200429021821092004280200200428020410c4010440200441106a2d0000044041c4e608410036020041c8e60841003a00000b20002009a722013b0000200020094218883d0003200041026a20014110763a0000200441206a24000f0b2002200341a58008410e10ab01000b1900200041cce6082802004e04400f0b4183830841121003000b1400200020014d04400f0b4183830841121003000b1400101f20004604400f0b4195830841191003000b1900200041cce6082802004c04400f0b41f2820841111003000b0b0041cce608101f3602000b2001017f200110db0121022000410036020820002002360204200020013602000b0900200010124102760bab0101047f230041206b22012400200141086a108701200120012d000c3a00182001200128020836021420001012210402400340200241046a22032002490d01200320044d04402001410036021c200020022001411c6a410410dd011a200128021c220241187420024180fe03714108747220024108764180fe037120024118767272200141146a109301200321020c010b0b200128021420012d0018108b01200141206a24000f0b1076000b0d00200020012002200310a8010b5d01027f230041106b220124002001108701200120012d00043a000c200120012802003602082000280208200141086a22021092012000290300200210df01200028020c2002109301200128020820012d000c108b01200141106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810f701200241106a24000b0d0020004504402001ad10200b0b0a0020001021200110210b6001017f230041106b220224000240200045044041d89408410010220c010b2002108701200220022d00043a000c20022002280200360208200241086a2200410110e3012000200110e401200228020820022d000c108b010b200241106a24000b2701017f230041106b22022400200220013a000f20002002410f6a410110f701200241106a24000b8b0101027f230041106b220324000240024020002d000404402001101221021099032002490d0141c4e608280200220020026a220220004f0440200341086a20002002109a03200141002003280208200328020c10dd011a41c4e60820023602000c030b1076000b20002802002001108d020c010b2000109d0220002802002001108d020b200341106a24000b5001017f230041206b2201240020012000280200101236021c20014100360218200120003602140340200141086a200141146a10e60120012802080440200128020c10081a0c010b0b200141206a24000b9c0101047f230041106b22032400027f02402001280204220241046a220420024f0440200420012802084d0d0141000c020b1076000b20012802002003410036020c28020020022003410c6a410410dd011a200328020c210220012004360204200241187420024180fe03714108747220024108764180fe037120024118767272210241010b21012000200236020420002001360200200341106a24000bff0101027f230041206b2201240002400240024002400240200028020041016b0e03010203000b420010200c030b2001108701200120012d00043a001c20012001280200360218200141186a2202410110e3012000280204200210e801200128021820012d001c108b010c020b200141086a108701200120012d000c3a001c20012001280208360218200141186a2202410210e3012000280204200210e8012000280208200210e801200128021820012d001c108b010c010b200141106a108701200120012d00143a001c20012001280210360218200141186a2202410310e3012000280204200210e801200128021820012d001c108b010b200141206a24000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410f701200241106a24000b2a00200028020004402000280204200041086a2802001074000b2000280204200041086a28020010ea010b6001017f230041106b220224000240200045044041d89408410010220c010b2002108701200220022d00043a000c20022002280200360208200241086a2200410110e3012001200010e801200228020820022d000c108b010b200241106a24000b7b01027f230041106b220124002001108701200120012d00043a000c200120012802003602082000280200200141086a22021093012000280204200210930120002802082002109301200028020c2002109301200028021020021093012000280214200210e801200128020820012d000c108b01200141106a24000b20002000200120021023200010ed0141ff017104400f0b41cc830841301003000b1500410241012000106b22001b4100200041004e1b0b220020002001200210ef0120004181840841fc830820031b4104410520031b10ef010b0d00200020012002106f10b3010b080020004120106f0b2b0020022003106f2102108a0121032000427f3703082000200336020420002002360200200020013602100b1601017f108a0122022001ad10fc012000200210b3010bbc0101027f230041206b22052400200541e3840810f00141908508411610f101200541186a22062001360200200528020422012002109b0120002005290308370308200041106a200541106a290300370300200041186a20062903003703002005280200210220012003109b01200441ff0171410274220341f093086a28020021042003418494086a2802002103108a0122062003200410241a2001200610b3012001410010f2012000200136020420002002360200200541206a24000bc90101057f230041306b2201240020002802102202044010f501200141106a108701200120012d00143a00202001200128021036021c200041146a28020022032001411c6a220410f60120042002200310f701200041186a2202280200220310db01200410f60120012003101236022c20014100360228200120023602240340200141086a200141246a10e60120012802080440200128020c2001411c6a1092010c010b0b200128021c20012d002010f8010b2000280208200028020c20002802002000280204106d000b1a01027f10a101210041c78508410a106f2201200010051a20010b09002000200110e8010b880101027f230041106b220324000240024020002d000404401099032002490d0141c4e608280200220020026a220420004f0440200341086a20002004109a032003280208200328020c2001200210890141c4e60820043602000c030b1076000b200028020020012002100e1a0c010b2000109d02200028020020012002100e1a0b200341106a24000b0e00200020012002108c0110071a0b4301027f230041106b2203240020022000280220460440200341086a410020022000412010752003280208200328020c2001200210d00121040b200341106a240020040b9e0101057f230041306b22022400200241286a22034200370300200241206a22044200370300200241186a2205420037030020024200370310200241086a200241106a412020011012220610fb01200141002002280208200228020c10dd011a20002006360220200041186a2003290300370000200041106a2004290300370000200041086a200529030037000020002002290310370000200241306a24000b3b01017f230041106b22042400200441086a41002003200120021075200428020c21012000200428020836020020002001360204200441106a24000b3801017f230041106b2202240020024200370308200220014100200241086a109f0320002002280200200228020410241a200241106a24000b6101027f230041106b2203240020011012220441084d0440200341086a2002200410fe012001410020032802082201200328020c220210a8011a2000200236020420002001360200200341106a24000f0b41fe8f08410841a58008410e10ab01000b3a01017f230041106b22032400200341086a20014108200210fb01200328020c21012000200328020836020020002001360204200341106a24000b1a01017f41b58b084116106f220220002001100e1a20021000000b0d00200010712200102c1a20000b0d00200010712200102f1a20000b1f0020012002200310042201102821022000200136020420002002453602000b5d01027f230041106b22022400200241086a2000280208200028020022032001108202024020022802084101460440200120036a220120034f0d011076000b41d18508410f10ff01000b200228020c20002001360200200241106a24000b0b00200020012002100e1a0b0900200120001086020b1601017f108a0122022000ad10fc012001200210b3010b1e002001500440200010ed0141016b0f0b417220011001200041721088020b1500417f200020011035220041004720004100481b0b15002000420053044041e0850841111003000b20000b0e002000200110880241ff0171450b5301057f20014200100b22024200100b22034200100b22044200100b22054200100b220610251a200020011026360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41f18508200141e001460d001a2001418904470440200141800347044041002001418002470d031a41f585080c020b41f985080c010b41fd85080b41041027210241010b210120002002360204200020013602000b09002000200110051a0b070020001012450b0c00200020002001100220000b1001017f1071220220002001100220020b0a0020002000200110020b0a0020002000200110230b1301017f1071220220002001109402102d20020b0b0041722000ad100141720b0e01017f107122004200100120000b0b002000200110890210010bb40101077f230041106b2204240020011012210703400240027f02402008220541ffffffff03470440200641046a220920074d0d0141000c020b1076000b2004410036020c200120062004410c6a410410dd011a200428020c220341187420034180fe03714108747220034108764180fe0371200341187672722002108a02450d012005210341010b21012000200336020420002001360200200441106a24000f0b200541016a210820092106200521030c000b000b5301017f230041106b2204240020034102742203200241027422024f0440200441086a20012002200320026b108202200428020c21012000200428020836020020002001360204200441106a24000f0b1076000b7501017f230041106b22032400200241ffffffff034d04402003410036020c200120024102742003410c6a410410dd012102200328020c2101200020024101733602002000200141187420014180fe03714108747220014108764180fe037120014118767272360204200341106a24000f0b1076000b0900200010314100470bc50101037f230041106b220424000240027f024020002d000845044020002802002205101222064190ce004b0d0141c8e6082d00000d0141c4e608200636020041c8e60841013a0000200441086a2006108801200541002004280208200428020c10dd011a200041013a00080b200120036a22002001490d024101200041c4e6082802004b0d011a200420012000109c02200220032004280200200428020410890141000c010b200041003a0008200520012002200310dd010b200441106a24000f0b1076000b32000240200120024d044020024190ce004d0d011076000b1076000b2000200220016b3602042000200141b498086a3602000b5801027f230041106b2201240020002d0004200041003a00040440200141086a410041c4e608280200109c0220002802002001280208200128020c100e1a41c4e608410036020041c8e60841003a00000b200141106a24000b0a0020001095011080020b2201017e200010a00222014280808080105a044041a58008410e10ff01000b2001a70b3802017f017e230041106b220124002001420037030820012000200141086a10960120012802002001280204410010c201200141106a24000b1d00200010950122001012412047044041ee8f08411010ff01000b20000b3001017e027f0240200010a0022201420158044041002001a741016b0d021a0c010b41a99008411210ff01000b41010b0b0a0020001095011081020b1f01017e200010a00222014280025a044041a58008410e10ff01000b2001a70b0d002000416710321a416710120b09002000200110a7020b09002000200110071a0b3400024002400240200141016b0e020102000b41d894084100200010a9020f0b41e78f084107200010a9020f0b2000200210a7020b0b0020022000200110ab020b0d00200041d89408410010ab020b0d00200020012002106f10071a0b0c002000200110910110071a0b1400416c41d89408410010241a2000416c10071a0b2401017e2000200110af0222024280808080105a044041a58008410e10ff01000b2002a70b3d02017f017e230041106b220224002002420037030820022000200110b202200241086a10970120022802002002280204410010c201200241106a24000b09002000200110b1020b0e002000200141671033416710120b0e002000200110712200103320000b0c002000200110b40210ad020b1a0020001077220041b587084107100e1a2001200010b80220000b5602037f017e230041106b22042400200441086a20012802002205200128020822062002108301200429030821072006200210b4022003ad10b60220052001280204200210b7021a20002007370300200441106a24000b0b002000200141001088060b2c01017f2000200210ba0222034504402001200210c20221012000200210c1022001ad10b6020b20034101730b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104108402200241106a24000b0c002000200110b402109f020b0c002000200110c4024100470b2801017f2001280200200210ba022103200041086a200236020020002001360204200020033602000b3801017f230041106b22022400200241086a2000280200200041086a2802002001108301200228020c2002280208108401200241106a24000b5601037f230041106b22022400200141086a28020021042001280204210320002001280200047f200405200241086a20032004410010be0220022802082103200228020c0b36020420002003360200200241106a24000b3001017f230041106b22042400200441086a20012002200310b5022000200136020020002002360204200441106a24000b2801017f20011077210320002002107736020c2000200336020820002002360204200020013602000b0c002000200110c10210aa020b1a0020001077220041bc87084108100e1a2001200010b80220000bb10101047f230041206b22022400200241106a200010ce020240200228021c41016a220304402002200336021c024020022802102205450440200220033602140c010b200241086a200020022802182204107b200020042002280208200310cf020b200020032004410010cf0220022003360218200041d487084106200310cc022001ad10b602200541016a22010d011076000b1076000b200220013602102000200241106a10d002200241206a240020030b3801027f230041106b220324002000200210c40222040440200341086a2001200410c5022000200210c0020b200341106a240020044100470b0c002000200110c102109f020be00101037f230041306b2203240002402002047f200341186a20012002107b200328021c210420032802182105200341206a200110ce02024020050440200341106a20012005107b200120052003280210200410cf020c010b200320043602240b024020040440200341086a20012004107b200120042005200328020c10cf020c010b200320053602280b2001200210cb0220012002107c21042001200210cd0220032802202202450d012003200241016b3602202001200341206a10d00241010541000b21012000200436020420002001360200200341306a24000f0b1076000b0c002000200110c702109f020b1a0020001077220041c487084105100e1a2001200010ca0220000b2401017e2001200010af0222024280808080105a044041a58008410e10ff01000b2002a70b2b0002402002450d002001109f022002490d002000200210c7022003ad10b6020f0b41eb950841121003000b09002000200110b8020b1200200041c98708410b200110cc0210aa020b180020001077220020012002100e1a2003200010b80220000b1200200041d487084106200110cc0210aa020bb30101047f230041206b2202240002400240200110d102220110a502450440410021010c010b2002410c6a22032001109401200310d30221012002410c6a10d30221032002410c6a10d30221042002410c6a10d3022105200228020c200228021010c401450d012002411c6a2d0000450d0041c4e608410036020041c8e60841003a00000b2000200536020c200020043602082000200336020420002001360200200241206a24000f0b41a58008410e10ff01000b5a01017f230041106b22042400200041c98708410b200110cc022004108701200420042d00043a000c200420042802003602082002200441086a220110e8012003200110e801200428020820042d000c10f801200441106a24000b870101027f230041106b22022400200010d102210002402001280200220304402002108701200220022d00043a000c200220022802003602082003200241086a220310e8012001280204200310e8012001280208200310e801200128020c200310e8012000200228020820022d000c10f8010c010b200041d89408410010ab020b200241106a24000b130020001077220041da87084105100e1a20000b2f01017f230041106b220224002002200128020010ce022000200228020436020420002001360200200241106a24000b3502017f017e230041106b220124002001410036020c20002001410c6a2200410410870320004104410010c201200141106a2400a70bed0101037f230041206b2203240020021077220241da87084105100e1a024002402001200210b10245044041002101410021020c010b2001200210b2022202101221012003411c6a41003a0000200341186a200136020020032002360214200320013602102003410036020c2003410c6a10d30221012003410c6a10d30221022003410c6a10d30221042003410c6a10d3022105200328020c200328021010c401450d0120032d001c450d0041c4e608410036020041c8e60841003a00000b2000200536020c200020043602082000200236020420002001360200200341206a24000f0b41a58008410e10ff01000b190020001077220041ee87084104100e1a20002001ad10b6020b2f0002402002450d002001109f022002490d002000200210c702109f022200200220001b0f0b41eb950841121003000b15002000200120022003410020022003471b10c9020b110020012000200210d90210b0024100470b0f00200120001077220010da0220000b5101027f230041106b22022400200220001012220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410840220012000108d02200241106a24000b0f002000200110d90210a5024100470bc80101047f230041206b22022400024020002001280204220510dd024504402002200010ce020240200128020c22030440200241106a22042000200310de0220022001280208220136021820002003200410df020c010b2002200128020822013602040b024020010440200241106a22042000200110de022002200336021c20002001200410df020c010b200220033602080b2000200510e0024101410010ab0220022802002201450d012002200141016b3602002000200210d0020b200241206a24000f0b1076000b0d002000200110e00210a502450b9e0101037f230041206b220324002003410c6a22042001200210e002109401200410d30221012003410c6a10d30221022003410c6a10d30221042003410c6a10d3022105200328020c200328021010c40104402003411c6a2d0000044041c4e608410036020041c8e60841003a00000b2000200536020c200020043602082000200236020420002001360200200341206a24000f0b41a58008410e10ff01000b6e01017f230041106b220324002000200110e0022003108701200320032d00043a000c200320032802003602082002280200200341086a220110e8012002280204200110e8012002280208200110e801200228020c200110e801200328020820032d000c10f801200341106a24000b1a0020001077220041f287084105100e1a2001200010b80220000b2401017f20002001280204220310dd024504402001200236020020002003200110df020b0b6301027f230041306b2203240020002001200210dd02047f4100052003411c6a2204200120021081012003410c6a220220041080012001200210dc022000410c6a200341146a2902003702002000200329020c37020441010b360200200341306a24000b2701017f230041106b220224002002200110ce02200020012002280204108101200241106a24000b2f01017f230041106b2203240020032001280200200141086a280200200210e5022000200310e602200341106a24000b2401017f20002001200310ba02047f200041046a2002200310e70241010541000b3602000b280020012802004504401076000b20002001290204370200200041086a2001410c6a2802003602000b1f0020011077220141f787084108100e1a2002200110b8022000200110e8020b3501027f230041106b22022400200110772103200241086a20011097032000200229030837020020002003360208200241106a24000b3f01027f200141086a28020021032001280204210220012802004504402002280200200241046a280200200310b7021a0b20002003360204200020023602000b09002000420110eb020b0b002000200141011088060b09002000200110ac020b0800200010a502450b2f01017f2001200210ef02220110a502047f200110a102210141010541000b210320002001360204200020033602000b1a0020001077220041cc95084106100e1a2001200010f40220000b130020001077220041d695084106100e1a20000b16002000200210f20210ad022000200110ef0210ad020b1a0020001077220041d295084104100e1a20002001108d0220000b3e01017e200010f00210a00242017c2202504504402000200110f202200210b6022000200210ef02200110a602200010f002200210b60220020f0b1076000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108108402200241106a24000b0c002000200110f20210a0020b4601017f230041106b22012400200141086a20001073024002400240200128020841016b0e020102000b200141106a24000f0b4199880841181003000b41b1880841141003000b0c01017f10712200100a20000b1c0020002802004102460440200041046a0f0b41c5880841101003000b0f00108a011a20012000107710b3010b4001017f10a001200210fb022102108a01220310f90220032001109b01200020033602082000411c411020021b3602042000419a8908418a890820021b3602000b10002000420010870241ff01714101460b27002001200210fd02220142002003109f012000200336020c20004200370300200020013602080b180020004102460440200110770f0b41c5880841101003000b2d01017f230041106b22012400200141086a2000107320012802084101460440200010ad020b200141106a24000be503010a7f230041e0006b22062400200010f60202402005280200450440200641086a2000200410fa020c010b200641106a200541086a280200360200200620052902003703080b2006428182848080a0c0800137021c2006410036021820004101200610a802230041206b22072400200641186a22002d000b210820002d000a210920002d0009210a20002d0008210b20002d0007210c20002d0006210d20002d0005210e20002d0004210f20002802002105200741e3840810f00141a68508410510f101200741186a22002001360200200728020422012002109b0120012003109b01108a011a2001200410860110b3012001200510f2012001418584084109200f10ee012001418e84084107200e10ee012001419584084108200d10ee012001419d84084107200c10ee01200141a484084107200b10ee01200141ab8408410e200a10ee01200141b98408410a200910ee01200141c384084112200810ee01200641406b220141186a2000290300370300200141106a200741106a290300370300200141086a200741086a29030037030020012007290300370300200741206a24002006413c6a200641106a28020036020020062006290308370234200620062802583602302006200628025036022c20062006290340370224200641246a10f401000b0c002000200110810310a4020b1a0020001077220041f189084108100e1a2001200010da0220000b0f002000200110810310a5024100470b210020001077220041e489084105100e1a200120001084032002200010f40220000b2701017f230041106b22022400200220003a000f20012002410f6a4101108402200241106a24000b130020001077220041e989084108100e1a20000bd00101037f230041206b22042400200441046a22052001200220031083031094012005200510d3021083021081022106200442003703182005200441186a2201410810870320014108410010c2012103200441046a10d3022102108a0121010340200204402001200441046a10d30210b301200241016b21020c010b0b2004280204200428020810c4010440200441146a2d0000044041c4e608410036020041c8e60841003a00000b2000200136020c2000200636020820002003370300200441206a24000f0b41a58008410e10ff01000b3f000240200041086a200028020020012002109b024504402000280200220120026a220220014f0d011076000b41d18508410f10ff01000b200020023602000b0e002000200120021089034101730b0f0020002001200210830310a502450b6601017f230041106b220424002000200120021083032004108701200420042d00043a000c200420042802003602082003280208200441086a22011093012003290300200110df012003410c6a2001108b03200428020820042d000c10f801200441106a24000b5f01027f230041206b220224002000280200220310db01200110f60120022003101236021c20024100360218200220003602140340200241086a200241146a10e60120022802080440200228020c200110e8010c0105200241206a24000b0b0b900101017f230041206b2203240020001077220041f989084106100e1a200120001084032002280208108601200010da022002290300200010f402200228020c220110db01200010ca0220032001101236021c2003410036021820032002410c6a3602140340200341086a200341146a10e60120032802080440200328020c200010b8020c010b0b200341206a240020000b1000200020012002108c03200310b6020b0e00200020012002108c0310ad020bac0302047f017e230041306b220524002001200210fd022107108a01210210950221082005108a01220636021c108a0122012007109b0120012003109d0120012002109b0120012008109d0120012006109b01108a011077210220042d0000200210840320042d0001200210840320042d000220021084032001200210b30102402006101204402005200610123602282005410036022420052005411c6a3602200340200541106a200541206a10e6012005280210450d0220052802142102108a011a20012002107710b3010c000b000b108a01220241d89408410010241a2001200210b3010b200541086a100941e48108410d106f2001109e014100109902024020052802084101470d00200528020c22021012220141084b0d002005420037032020024100200520016b41286a200110a8010d002005290320220942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe0383200942388884848421090b2000200336020c2000200937030020002007360208200541306a24000b1600200020012802082001290300200128020c1099010b27002001200210fd02220120032004109f012000200436020c20002003370300200020013602080b1401017f108a01220220002001106f10b30120020bb90101037f230041406a22012400200141186a200041046a220210d202200120012903183702300340200141106a200141306a107a200128021004402000280200200128021410c0020c0105200141206a200228020010ce0220012802242100034020000440200141086a20022802002000107b200128020c2002280200200010cb022002280200200010cd0221000c010b0b200141386a4200370300200142003703302002280200200141306a10d002200141406b24000b0b0b6a01037f230041106b2201240020001095032102200141086a2000280208200028020022032002108202024020012802084101460440200220036a22022003490d01200128020c20002002360200200141106a24000f0b41948108411941d18508410f107e000b1076000b3b02017f017e230041106b220124002001410036020c20002001410c6a22004104419481084119109c0320004104410010c201200141106a2400a70b5701017f230041206b22012400200141106a200041046a10d202200120012903103702180340200141086a200141186a107a200128020804402000280208200128020c10b3020c01052000109303200141206a24000b0b0b1801017f20011077210220002001360204200020023602000b4f01017f230041206b2201240020012000280200101236021c20014100360218200120003602140340200141086a200141146a10e60120012802080440200135020c10200c010b0b200141206a24000b2001017f41c4e60828020022004190ce004d04404190ce0020006b0f0b1076000b3f01017f230041106b22032400200341086a2001200241b498084190ce001075200328020c21012000200328020836020020002001360204200341106a24000b4e00024020002802002000280204107941024704402001109a02450d01200028020841022001107710a80220002001360204200041023602000f0b41b1880841141003000b41c5880841101003000b42000240200041086a200028020020012002109b024504402000280200220120026a220220014f0d011076000b2003200441d18508410f107e000b200020023602000b3201017f230041106b22012400200141003a000f20002001410f6a410141e186084120109c0320012d000f200141106a24000b4001017f230041106b220224002002200136020c2002200036020803402002200241086a107a20022802000440200235020410200c0105200241106a24000b0b0b9e0202047f027e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882208200142288822094280fe0383848484370000200041084100200142005322072002716b41ff017122042008a746220520042001423088a741ff01714671220620056a20042009a741ff01714620067122056a20042001422088a741ff01714620057122056a200520042001a72205411876467122066a2004200541107641ff01714620067122066a2004200541087641ff01714620067122046a2004200150716a22042007200320044107716a2c0000410048732004410047712002716b22026b3602042000200220036a3602000b2c01017f230041106b22012400200141003a000f20002001410f6a410110870320012d000f200141106a24000b920301047f230041406a220324002003200110fa01024002402003280220450d00024002402003418a8908411010f9014504402003419a8908411c10f9010d012000200136020420004101360200200041086a20023602000c040b10d901410010d80120034100360224200341306a2201200341246a220410b901200328022410d5012003280230200328023421062004200210da0110d901200410b5012102200341386a22042003412c6a28020036020020032003290224370330200110b70121012003280234200428020010d6010d0120014102200610a8020c020b10d901410010d80120034100360224200341306a2201200341246a220441b98f08410610af01200328022410d50120032802302004200210da0110d901200410b5012102200341386a22062003412c6a28020036020020032003290224370330200110b70121012003280234200628020010d601450440200341306a10a60120014102200328023810a8020c020b200210a203200110ad020c010b200210a203200110ad020b200041003602000b200341406b24000b2f01017f10a501220110ed0141ff01714102460440416741d89408410010241a200020014200108a01416710341a0b0b0d00108a011a20002001107d000b1000200010a30141d5e608103641004a0b11002000280200200128020010784101730b1c01027f41f490084107109203108a0122022000ad10fc01200210370b0f00200041d79108410a106f10e8020b3c01027f230041106b22012400200141086a41c18f08410a106f109703200128020c21022000200128020836020020002002360204200141106a24000b2901027f41e19108410a106f22011077220241ee87084104100e1a20002002360204200020013602000b6402017f017e230041106b22012400200041fe8f08410810b60121002001420037030820012000200141086a10fd0120012802002001280204410010c20122024280808080105a044041fe8f08410841a58008410e10ab01000b200141106a24002002a70b0a0041b29208410c106f0b0a0041e592084116106f0b0a0041fb9208410b106f0b3d01037f230041106b22012400418693084112106f220210772103200141086a20021097032000200129030837020020002003360208200141106a24000b0a0041989308410b106f0b3601037f41a393084110106f22011077210220011077220341ee87084104100e1a2000200336020420002001360200200020023602080b0a0041b393084110106f0b0a0041c39308410f106f0b0d002000411341d29308108a060b09001038410010d7010b0d001038410010d70110b603000b0b0041a19808410e1003000b10001038410110d7014100101b7b10200b4502027f017e1038410310d701410010cb0121004101101b2102410241a88c08410410ba0121014172200210960220002000417210022000200020011094021002200010210b1e01027f1038410110d701410010cb0121001071220120001030200110210b13001038410110d701410010cb011039ad10200b1e001038410210d701410010d301410141f88b08410110ba01109302103a0b1e001038410210d701410010cb01410141f88b08410110ba0110930210210b3501017f230041106b220024001038410110d7012000410010cb0110be032000290300a70440200029030810200b200041106a24000b2901027e2001106941004c047e4200052001106a210242010b210320002002370308200020033703000b1d01017f1038410210d701410010cb0122004101101b109602200010210b0e001038410010d70110950210210b2002017e017f1038410110d7014100101b2100107122012000109602200110210b3f01027f230041106b220024001038410010d7012000427f3703082000427f37030041672000411010241a416710712201102f1a20011021200041106a24000b13001038410110d7014100108e0110810210210b1701017f1038410010d70110712200420010012000103a0b1f02017e017f1038410110d7014100101d210010712201200010012001103a0b20001038410210d701410010cb014101101b10890210870241ff017145ad103b0b3501017f230041106b220024001038410110d7012000410010d30110be032000290300a704402000290308103b0b200041106a24000b1c01017f1038410210d701410010d30122004101101d10012000103a0b2b01037f1038410110d701410010d301220010ed01107122022000103cad42ff018342017d103b200210210b4101027f1038410210d7014102410141948c08410410ce01220041ff01711b41002000c041004e1b410110cb01210041ff017145044020002000103d0b2000103a0b18001038410210d701410010d301410110d301108f02103a0b18001038410210d701410010d301410110cb01108f02103a0b18001038410210d701410010cb01410110d301108f02103a0b18001038410210d701410010d301410110cb01109002103a0b18001038410210d701410010cb01410110d301109002103a0b18001038410210d701410010d301410110d301109002103a0b1f01017f1038410210d701410010cb0122002000410110cb011002200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011002200210210b1f01017f1038410210d701410010d30122002000410110d30110232000103a0b2701037f1038410210d701410010d3012100410110d3012101107122022000200110232002103a0b2001017f1038410210d701410010cb0122002000410110cb0110ec01200010210b2801037f1038410210d701410010cb012100410110cb012101107122022000200110ec01200210210b1f01017f1038410210d701410010d30122002000410110d301103e2000103a0b2701037f1038410210d701410010d3012100410110d30121011071220220002001103e2002103a0b1f01017f1038410210d701410010cb0122002000410110cb01103e200010210b2701037f1038410210d701410010cb012100410110cb0121011071220220002001103e200210210b1f01017f1038410210d701410010d30122002000410110d301103f2000103a0b2701037f1038410210d701410010d3012100410110d30121011071220220002001103f2002103a0b1f01017f1038410210d701410010cb0122002000410110cb01103f200010210b2701037f1038410210d701410010cb012100410110cb0121011071220220002001103f200210210b1f01017f1038410210d701410010d30122002000410110d30110402000103a0b2701037f1038410210d701410010d3012100410110d3012101107122022000200110402002103a0b1f01017f1038410210d701410010cb0122002000410110cb011040200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011040200210210b2501027f1038410210d701410010d301410110d3012101107022002000200110022000103a0b2401027f1038410210d701410010d301410110d30121011070220020011091022000103a0b2501027f1038410210d701410010cb01410110cb01210110702200200020011002200010210b2501027f1038410210d701410010d301410110d3012101107022002000200110232000103a0b2401027f1038410210d701410010d301410110d30121011070220020011092022000103a0b2601027f1038410210d701410010cb01410110cb012101107022002000200110ec01200010210b2501027f1038410210d701410010d301410110d30121011070220020002001103e2000103a0b2501027f1038410210d701410010cb01410110cb0121011070220020002001103e200010210b2501027f1038410210d701410010d301410110d30121011070220020002001103f2000103a0b2501027f1038410210d701410010cb01410110cb0121011070220020002001103f200010210b2501027f1038410210d701410010d301410110d3012101107022002000200110402000103a0b2501027f1038410210d701410010cb01410110cb01210110702200200020011040200010210b1f01017f1038410210d701410010cb0122002000410110cb011041200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011041200210210b1f01017f1038410210d701410010cb0122002000410110cb011042200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011042200210210b1f01017f1038410210d701410010cb0122002000410110cb011043200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011043200210210b2501027f1038410210d701410010cb01410110cb01210110702200200020011041200010210b2501027f1038410210d701410010cb01410110cb01210110702200200020011042200010210b2501027f1038410210d701410010cb01410110cb01210110702200200020011043200010210b2501017f1038410210d701410010cb0122002000410141f88b08410110ba01102a200010210b2d01037f1038410210d701410010cb012100410141f88b08410110ba0121011071220220002001102a200210210b2501017f1038410210d701410010cb0122002000410141f88b08410110ba011029200010210b2d01037f1038410210d701410010cb012100410141f88b08410110ba01210110712202200020011029200210210b2b01027f1038410210d701410010cb01410141f88b08410110ba0121011070220020002001102a200010210b2b01027f1038410210d701410010cb01410141f88b08410110ba01210110702200200020011029200010210b0d001038410010d701104410200b0d001038410010d701104510200b0d001038410010d701104610200b0d001038410010d701104710200b1601017f1038410010d701107122001048200010081a0b0d001038410010d701104910200b0d001038410010d701104a10200b0d001038410010d701104b10200b0d001038410010d701104c10200b1601017f1038410010d70110712200104d200010081a0b0f001038410010d70110a00110081a0b0f001038410010d70110a40110081a0b20001038410110d701410041b28d08410710c80110a30141d5e608104ead10200b1a001038410110d701410041b28d08410710c80110a403ad103b0b1601017f1038410010d70110712200104f200010081a0b0f001038410010d70110a10110081a0b0d001038410010d701100910200b2a01017f1038410010d701416741919608410c10241a4167416610321a416610712200102f1a200010210baf0101037f230041206b220024001038410110d701410041b28d08410710c80141671050200041003b011441671012220141034f044041818608411c1003000b200041086a200041146a22024102200110fb01416741002000280208200028020c10a8011a20002f011421012000108701200020002d00043a0018200020002802003602142000200141850c713b011e20022000411e6a410210f701200028021420002d0018108b01200041206a24000b13001038410110d7014100108e011051ad103b0b18001038410010d70141ae8308411e41db8008411b107e000b21001038410010d701419f91084111106f1a41858708411a41f68008411e107e000b1c001038410010d70141b091084113106f1a41c08008411b10ff01000b21001038410010d70141c391084114106f1a419f8708411641db8008411b107e000b1d001038410010d70141909108410f1092031a41848b08411810a303000b20001038410010d70141829108410e1092031a108a011a41ed8a084117107d000b1b001038410010d7011095021a108a011a41ab8508411c10a303000b4a01027f230041206b220024001038410010d70141f1810810f001220141feffffff07460440419c8b0841191003000b200041086a200141d58b08411310f10141ab8508411c10a303000b1c01017f1038410110d7014100108e011071220010521a200010081a0b1c01017f1038410110d7014100108e011071220010531a200010081a0b1c01017f1038410110d7014100108e011071220010541a200010081a0b1e001038410310d7014100108e014101108e014102108e01105545ad103b0b1b001038410310d7014100108e014101108e014102108e0110561a0b1e001038410310d7014100108e014101108e014102108e01105745ad103b0b5601017f1038410410d7014100108e014101108e014102108e0102404103101a450d004103419c8c08410910be01220041ff01714105490d00419c8c08410941b38008410d10ab01000b200041ff0171105845ad103b0b2101017f1038410210d7014100108e014101108e011071220010591a200010081a0b0f001038410110d7014100101b10200b0f001038410110d7014100101d103b0b0f001038410110d70110c501ac103b0b17001038410110d701410041dc8d08410110ba01ad10200b3701017e1038410110d7014100101d22004280808080087d42ffffffff6f58044041dc8d08410141a99008411210ab01000b2000c4103b0b16001038410110d70141dc8d08410110ce01adc2103b0b1b001038410110d701410041dc8d08410110be01ad42ff018310200b15001038410110d701410041dc8d0810cd01ad103b0bb50201037f230041106b220124001038410110d7010240027f230041206b220024002000410c6a4100108d014102210202400240200028020c200028021010c401450440024002402000410c6a41dc8d08410110c60141ff01710e020100040b4100210202402000410c6a41dc8d08410110c60141ff01710e020100040b410121020b200028020c200028021010c401450d010b2000411c6a2d0000044041c4e608410036020041c8e60841003a00000b200041206a240020020c020b41dc8d08410141a58008410e10ab01000b41dc8d08410141b38008410d10ab01000b220041ff0171410246044041d89408410010220c010b2001108701200120012d00043a000c20012001280200360208200141086a2202410110e3012002200010e301200128020820012d000c108b010b200141106a24000b1100103810d901410010d801410010d5010b3301027f230041106b220024001038410110d7012000410b6a22014100419b8c08410110d401200141051022200041106a24000b800101037f230041106b22002400103810d901410010d8012000410036020c2000410c6a2101108a0121020340200128020041cce6082802004804402002200141ce8b08410110b00110b3010c010b0b200028020c10d501200210db01210120002002360208200020013602042001ad1020200041086a109803200041106a24000bc50202047f017e230041306b22002400103810d901410010d80120004100360220200041206a220341ce8b08410110b2012101200028022010d501108a0121022003200110da010240034020002802282000280224490440200041206a41fe8f08410810b601210120004200370318200041086a2001200041186a10fd012000280208200028020c410110c20122044280808080087d42ffffffff6f580d02200041206a41fe8f08410810b8012103108a01210120004200370318200020044101200041186a109f0320012000280200200028020410241a2002200110b30120022003109b010c010b0b20002002360218200020021012360228200041003602242000200041186a3602200340200041106a200041206a10e60120002802100440200028021410081a0c010b0b200041306a24000f0b41fe8f08410841a99008411210ab01000b3001027f230041106b220024001038410110d701200041046a220141dc8f08410210cf01200110e701200041106a24000b4401017f1038410110d70102404100101a450d00410041dc8f08410210be01220041ff01714103490d0041dc8f08410241b38008410d10ab01000b2000ad42ff018310200b0d001038410010d701420110200b3101017f1038410110d701410041de8f08410210bb01220045044041de8f08410241b38008410d10ab01000b2000ad10200ba70101047f230041106b22002400103810d901410110d80110c501200041013602080240200041086a220128020041cce6082802004e0440410121020c010b200141e08f08410310ad0141e08f08410310ae0121010b200020013602042000200236020020002802042101200028020021022000200028020836020c2000410c6a41cce608280200360200200028020c10d501ac103b20024504402001ac103b0b200041106a24000b920302077f017e230041206b220124001038410110d701200141086a2105230041406a22002400200041003602282000412c6a4100108d012000411c6a21034101210202400340200028022c22042000280230220610c4010d01200041003602082000412c6a200041086a2204410441da8f08410210c10120044104410110c201210720024104470440200320073e0200200341046a210320002002360228200241016a21020c010b0b41da8f08410241989008411110ab01000b02402004200610c4010440200041106a2202200041246a2902003703002000200029021c3703082000413c6a2d0000044041c4e608410036020041c8e60841003a00000b20052000290308370200200541086a2002290300370200200041406b24000c010b41da8f08410241a58008410e10ab01000b20012802142001108701200120012d00043a001c20012001280200360218410274210241002100034020002002470440200141086a20006a280200200141186a10e801200041046a21000c010b0b200128021820012d001c108b01200141206a24000b10001038410110d701410010cb0110210b10001038410110d701410010d301103a0b11001038410110d7014100108e0110081a0b17001038410110d701410041cc8b08410210c80110081a0bf30201077f230041206b220124001038410110d701230041206b220024004100108e012106108a012104200610122102200041186a41003a0000200041146a2002360200200020063602102000200236020c20004100360208037f2005200210bc01047f2000200041086a10c901220241187420024180fe03714108747220024108764180fe03712002411876727236021c20042000411c6a4104100e1a200028020c2102200028020821050c010520002d0018044041c4e608410036020041c8e60841003a00000b200041206a240020040b0b2102200141086a108701200120012d000c3a00182001200128020836021420021012210402400340200341046a22002003490d01200020044d04402001410036021c200220032001411c6a410410a8011a200128021c220341187420034180fe03714108747220034108764180fe037120034118767272200141146a109001200021030c010b0b200128021420012d0018108b01200141206a24000f0b1076000be40101057f230041206b220024001038410110d701200041106a2102230041206b220124002001410c6a22034100108d01200310c9012104200341cb8b08410110c70121030240200128020c200128021010c40104402001411c6a2d0000044041c4e608410036020041c8e60841003a00000b2002200336020420022004360200200141206a24000c010b41cb8b08410141a58008410e10ab01000b20002802142000280210200041086a108701200020002d000c3a001c20002000280208360218200041186a22021090012002109201200028021820002d001c108b01200041206a24000bb50201057f230041206b220024001038410110d701200041106a2103230041206b220124002001410c6a4100108d0102400240200128020c200128021010c4014504400240024002402001410c6a41cb8b08410110c60141ff017122020e020201000b41cb8b08410141b38008410d10ab01000b2001410c6a10c9012104410121020b200128020c200128021010c401450d010b2001411c6a2d0000044041c4e608410036020041c8e60841003a00000b2003200436020420032002360200200141206a24000c010b41cb8b08410141a58008410e10ab01000b0240200028021045044041d89408410010220c010b2000280214200041086a108701200020002d000c3a001c20002000280208360218200041186a2202410110e3012002109001200028021820002d001c108b010b200041206a24000bb80201077f230041306b220024001038410210d701410041d29508410410c8012104230041206b220124004101108e012106108a0121032006101221022001411c6a41003a0000200141186a200236020020012006360214200120023602102001410036020c2000037f2005200210bc01047f20032001410c6a41cf8b08410310c70110b30120012802102102200128020c21050c010520012d001c044041c4e608410036020041c8e60841003a00000b200141206a240020030b0b36021820002004360214200410081a200041086a108701200020002d000c3a00202000200028020836021c20002003101236022c200041003602282000200041186a36022403402000200041246a10e6012000280200044020002802042000411c6a1092010c010b0b200028021c20002d0020108b01200041306a24000bca0401087f230041206b220124001038410110d701230041206b220024004100108e012105108a012106200510122102200041186a41003a0000200041146a2002360200200020053602102000200236020c20004100360208037f2004200210bc01047f200041086a41d38b08410210c3012104108a0121020340200404402000200041086a41d38b08410210c301220541187420054180fe03714108747220054108764180fe03712005411876727236021c20022000411c6a4104100e1a200441016b21040c010b0b2000200241187420024180fe03714108747220024108764180fe03712002411876727236021c20062000411c6a4104100e1a200028020c2102200028020821040c010520002d0018044041c4e608410036020041c8e60841003a00000b200041206a240020060b0b2105200141086a108701200120012d000c3a00182001200128020836021420051012210602400340200341046a22042003490d01200420064d0440410021002001410036021c200520032001411c6a410410a8011a200128021c220341187420034180fe03714108747220034108764180fe03712003411876727222021012410276200141146a10f601200210122107034002402000200041046a22034d0440200320074d0d01200421030c040b1076000b2001410036021c200220002001411c6a410410a8011a200128021c220041187420004180fe03714108747220004108764180fe037120004118767272200141146a10f601200321000c000b000b0b200128021420012d0018108b01200141206a24000f0b1076000bf90201077f230041206b220124001038410110d701230041206b220024004100108e012106108a012104200610122102200041186a41003a0000200041146a2002360200200020063602102000200236020c20004100360208037f2005200210bc01047f2000200041086a41d38b08410210c701220241187420024180fe03714108747220024108764180fe03712002411876727236021c20042000411c6a4104100e1a200028020c2102200028020821050c010520002d0018044041c4e608410036020041c8e60841003a00000b200041206a240020040b0b2102200141086a108701200120012d000c3a00182001200128020836021420021012210402400340200341046a22002003490d01200020044d04402001410036021c200220032001411c6a410410a8011a200128021c220341187420034180fe03714108747220034108764180fe037120034118767272200141146a109201200021030c010b0b200128021420012d0018108b01200141206a24000f0b1076000b4d01017f230041106b22002400103810d901410010d8012000410036020c20002000410c6a41d28b08410110af01200028020c10d5012000280200044020002802081000000b200041106a24000bd50101057f230041206b22002400103810d901410010d80120004100360210200041106a220341ce8b08410110b2012102200028021010d501108a0121012003200210da0102400340200028021820002802144f0d01200041106a10aa032202200041106a10aa0322036a220420024f04402002200110860220032001108602200420011086020c010b0b1076000b2000200136020c2000200110123602182000410036021420002000410c6a36021003402000200041106a10e60120002802000440200028020410081a0c010b0b200041206a24000b910101067f230041206b220024001038410110d7012000410041818e08410d10ba01108c0202402000280200450440109502210110950221021095022103109502210410950221052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080c010b200041086a2000280204108b020b200041086a10eb01200041206a24000b3101027f230041206b220024001038410110d701200041086a22014100108e01105a108b02200110eb01200041206a24000b4501027f230041106b220024001038410110d701200041086a410041818e08410d10ba012201108c022000280208047f200028020c10260520010bad1020200041106a24000b4301017f230041106b220024001038410110d701200041086a410041818e08410d10ba01108c022000280208047e200028020c105bad0542000b1020200041106a24000b8c0101087f230041106b220024001038410510d701410041818e08410d10ba012101410110cb012103410210cb012104410310cb012105410410cb012106200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21074200100b22014200100b220220072003200420052006105c0b2001200210e101200041106a24000b7a01067f230041106b220024001038410310d701410041818e08410d10ba012101410110cb012103410210cb012104200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21054200100b22014200100b2202200520032004105d0b2001200210e101200041106a24000b5c01047f230041106b220024001038410310d701410041818e08410d10ba012101410110cb012102410210cb012103200041086a2001108c022000280208047e200028020c20022003105e41004aad0542000b103b200041106a24000b840101077f230041106b220024001038410410d701410041818e08410d10ba012101410110cb012103410210cb0121044103108e012105200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21064200100b22014200100b22022006200320042005105f1a0b2001200210e101200041106a24000b7201057f230041106b220024001038410210d701410041818e08410d10ba0121014101108e012103200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21044200100b22014200100b22022004200310601a0b2001200210e101200041106a24000b6801047f230041106b220024001038410310d701410041818e08410d10ba012101410110cb012102410210cb012103200041086a2001108c0202402000280208450440108a0121010c010b20022003200028020c1071220110611a0b200110081a200041106a24000b6801047f230041106b220024001038410310d701410041818e08410d10ba012101410110cb012102410210cb012103200041086a2001108c0202402000280208450440108a0121010c010b20022003200028020c1071220110621a0b200110081a200041106a24000b7201057f230041106b220024001038410210d701410041818e08410d10ba0121014101108e012103200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21044200100b22014200100b22022004200310631a0b2001200210e101200041106a24000b7201057f230041106b220024001038410210d701410041818e08410d10ba0121014101108e012103200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21044200100b22014200100b22022004200310641a0b2001200210e101200041106a24000b7401047f230041106b220024001038410110d701200041086a410041818e08410d10ba01108c020240200028020845044010950221021095022103108a0121010c010b200028020c21014200100b22024200100b220320011071220110651a0b2002102120031021200110081a200041106a24000b17001038410110d701410041e88b08410410ba0110a6030b3201027f1038410110d701410041f08b08410810ba01210103402000200146450440200010a603200041016a21000c010b0b0bc90101057f230041206b22002400103810d901410210d801410010cb012101410141ec8b08410410c801210420004102360214200041146a41e88b08410410b2012103200028021410d50141fb900841071092032102108a011a2002200110860110b301108a011a20022004107710b30120002003360210108a011077210120002003101236021c200041003602182000200041106a3602140340200041086a200041146a10e60120002802080440200028020c200110da020c010b0b200220011037200041206a24000b1e00103810a40110a001107845044041fc940841241003000b410010d7010b1e00103841671010416710a403044041a09508412c1003000b410010d7010b2d001038410210d701410041d28b08410110ba01410141f88b08410110ba0147044041f98b08410e109801000b0b13001038410010d70141878c08410d109801000b8f0301087f230041206b220224001038410110d701230041e0006b22002400200041046a4100108d0141202103034020030440200041046a41b68e08410510c60121042001411f4b2205450440200041386a20016a20043a0000200141016a21010b200510cc01200341016b21030c01052001412049044041b68e08410541869008411210ab01000b0b0b200041306a2201200041d0006a2203290200370300200041286a2204200041c8006a2205290200370300200041206a2206200041406b22072902003703002000200029023837031802402000280204200028020810c401044020032001290300370300200520042903003703002007200629030037030020002000290318370338200041146a2d0000044041c4e608410036020041c8e60841003a00000b20022000290338370000200241186a200041d0006a290300370000200241106a200041c8006a290300370000200241086a200041406b290300370000200041e0006a24000c010b41b68e08410541a58008410e10ab01000b200210f00110081a200241206a24000b2901017f1038410110d7014100108e0122001012412047044041ee8f084110109801000b200010081a0b0f001038410010d701108a0110081a0b1f01017f1038410210d7014100108e0122004101108e0110051a200010081a0b4e01017f230041106b220024001038410310d701200041086a4100108e014101419d8e08411110ba01410241948e08410910ba0110820220002802080440200028020c10081a0b200041106a24000b2601027f1038410110d701410041ae8e08410810ba01210010712201200010661a200110081a0b18001038410210d7014100108e014101108e011078ad103b0b13001038410010d70141f1810810f00110081a0b24001038410210d701410041918e08410310c8014101418e8e08410310c8011078ad103b0b0f001038410010d701108a0110dc010b2501017f1038410210d701410041d38b08410210d1012200410110cb0110b301200010dc010bfa0102067f017e230041106b220124001038410210d701420121060240410041c68d08410310d1012203410141c38d08410310d101220410780d00024020031012220520041012470d000340200220054f0d022001410036020820032002200141086a410410a8011a200128020821002001410036020c200420022001410c6a410410a8011a200041187420004180fe03714108747220004108764180fe037120004118767272200128020c220041187420004180fe03714108747220004108764180fe037120004118767272108a02450d012002200241046a22004d0440200021020c010b0b1076000b420021060b2006103b200141106a24000bdc0201077f230041206b220124001038410210d701230041206b220024004100108e012106108a0121042006101221022000411c6a41003a0000200041186a200236020020002006360214200020023602102000410036020c037f2005200210bc01047f20042000410c6a412041d38b08410210bd0110b30120002802102102200028020c21050c010520002d001c044041c4e608410036020041c8e60841003a00000b200041206a240020040b0b2202410141fe8c08410410c80110b301200141086a108701200120012d000c3a00182001200128020836021420021012210402400340200341046a22002003490d01200020044d04402001410036021c200220032001411c6a410410a8011a200141146a200128021c220341187420034180fe03714108747220034108764180fe03712003411876727210e401200021030c010b0b200128021420012d0018108b01200141206a24000f0b1076000b960101047f230041106b220124001038410310d701410041d38b08410210d1012102410141ad8d08410510ba012103410210cb012100024020034180808080044904402001200041187420004180fe03714108747220004108764180fe03712000411876727236020c2002200341027441042001410c6a10670d01200210dc01200141106a24000f0b1076000b41c98d084113109801000ba10101057f230041106b220024001038410210d701410041d38b08410210d1012102410141ad8d08410510ba01210120012002101241027622044904400240027f2001450440108a010c010b200041086a2002410020011098022000280208450d01200028020c0b210320002002200141016a20041098022000280200450d002003200028020410051a200310dc01200041106a24000f0b0b419d8608411d1003000b880101037f230041206b220024001038410210d701200041106a410041d38b08410210d101410110cb011097020240200028021045044041d89408410010220c010b2000280214200041086a108701200020002d000c3a001c20002000280208360218200041186a2202410110e301200210f601200028021820002d001c108b010b200041206a24000b3e01017f230041106b220024001038410210d701200041086a410041d38b08410210d101410110cb011097022000280208410047ad103b200041106a24000bb20101047f230041206b220024001038410210d7014100108e012102200041146a2203410141fe8c08410410d4012000410c6a200041186a2d00003a000020002000280214360208200341003a0000200041003602100340200141054704402000200041086a20016a2d00003a001f20002001200141016a2201200041106a41051075200028020020002802042000411f6a41011089010c010b0b2002200041106a4105100e1a200210081a200041206a24000b930101037f230041106b220124001038410210d701410041d38b08410210d10121000240410141ad8d08410510ba0122024180808080044904402001410036020c200020024102742001410c6a410410a8010d01200128020c220041187420004180fe03714108747220004108764180fe03712000411876727210701021200141106a24000f0b1076000b419d8608411d1003000b14001038410110d7014100108e0110950110081a0b16001038410210d7014100108e014101108e0110a6020b24001038410210d701410041b28d08410710c8014101108e01416710334167107710081a0b17001038410010d70141eb9108410d106f10950110081a0b16001038410010d701418992084108106f10a30210210b16001038410010d701418292084107106f109e02103a0b16001038410010d701419f92084103106f10a00210200b17001038410010d70141fd91084105106f109f02ad10200b4901027f230041106b220024001038410010d701419c92084103106f21012000420037030820002001200041086a10960120002802002000280204410110c201103b200041106a24000b17001038410010d70141a292084104106f10a202ad103b0b17001038410010d70141d295084104106f10a10210081a0bb70101037f230041206b220024001038410010d7012000410c6a41dd8d084108106f1094010240200028020c200028021010c4014504400240024002402000410c6a10a00341ff017122010e020201000b41b38008410d10ff01000b410121012000410c6a412010830221020b200028020c200028021010c401450d010b2000411c6a2d0000044041c4e608410036020041c8e60841003a00000b20010440200210081a0b200041206a24000f0b41a58008410e10ff01000b18001038410010d70141dd8d084108106f10a50245ad103b0b17001038410010d70141919208410b106f109f02ad10200b14001038410010d70141919208410b106f10ad020bf60102037f017e230041206b220024001038410010d7010240024041f891084105106f220210a502450d002000410c6a2201200210940102400240024002400240200110a00341ff017122010e0404010203000b41b38008410d10ff01000b2000410c6a10d302ad2103410121010c020b2000410c6a10d302ad2000410c6a10d302ad422086842103410221010c010b2000410c6a10d302ad2103410321010b200028020c200028021010c401450d012000411c6a2d0000450d0041c4e608410036020041c8e60841003a00000b200020033702102000200136020c2000410c6a10e701200041206a24000f0b41a58008410e10ff01000b2e01027f1038410110d701410041d29508410410c801210041a692084104106f2201200010051a200110a30210210b4201037f1038410210d701410041be8d08410510c8012101410141b98d08410510c801210241aa92084104106f2200200110051a2000200210051a200010a30210210b2b01017f1038410110d701410041cb8b08410110ba0141ae92084104106f220010ca02200010a202ad103b0b2601017f1038410210d701410041b28d08410710c8014101108e01107122001033200010081a0b1f01017f1038410110d7014100108e01210041eb9108410d106f200010a6020b19001038410110d701410010cb01418992084108106f1085010b1f01017f1038410110d701410010d3012100418292084107106f200010ac020b2601017f1038410110d701410041dc8d08410110ba01210041fd91084105106f2000ad10b6020b1e01017f1038410110d70110c501210041e292084103106f2000ac10eb020b1e01017e1038410110d7014100101b2100419f92084103106f200010b6020b1e01017e1038410110d7014100101d2100419c92084103106f200010eb020b2401017f1038410110d701410041dc8d0810cd01210041a292084104106f2000ad10eb020b2501017f1038410110d701410041a58c08410310c801210041d295084104106f200010a6020be10101047f230041206b22002400103810d901410010d80120004100360218200041106a21030240200041186a220228020041cce6082802004e0440410121010c010b200241dd8d08410810ad0141dd8d08410810b40121020b20032002360204200320013602002000280214210320002802102101200028021810d50141dd8d084108106f2102024020010440200241d89408410010ab020c010b200041086a108701200020002d000c3a001c20002000280208360218200041186a2201410110e3012001200310e4012002200028021820002d001c10f8010b200041206a24000ba70201037f230041306b220024001038410110d7012000411c6a41a58c08410310cf0141f891084105106f210202400240024002400240200028021c41016b0e03010203000b2002420010b6020c030b2000108701200020002d00043a002c20002000280200360228200041286a2201410110e3012000280220200110e8012002200028022820002d002c10f8010c020b200041086a108701200020002d000c3a002c20002000280208360228200041286a2201410210e3012000280220200110e8012000280224200110e8012002200028022820002d002c10f8010c010b200041106a108701200020002d00143a002c20002000280210360228200041286a2201410310e3012000280220200110e8012002200028022820002d002c10f8010b200041306a24000b3101037f1038410210d701410041d29508410410c8012100410110cb0141a692084104106f2202200010051a20021085010b4501047f1038410310d701410041be8d08410510c8012101410141b98d08410510c8012102410210cb0141aa92084104106f2200200110051a2000200210051a20001085010b3601027f1038410210d701410041cb8b08410110ba01410141f88b0810cd01210141ae92084104106f220010ca0220002001ad10eb020b1e01017e1038410110d7014100101d210041be92084109106f200010eb020b19001038410110d701410010cb0141d59208410d106f1085010b1f01017f1038410110d7014100108e01210041c79208410e106f200010a6020b2201017f1038410110d701410041b28d08410710c801210010af03200010f50210200b3502017f017e1038410110d701410041b28d08410710c801210010af03200010f502220150044041dc9508410f1003000b200110200b3d02017f017e230041106b220024001038410110d7014100101b2101200041086a10af03200110ee022000280208200028020c10e201200041106a24000b2201017e1038410110d7014100101b210010af03200010ef0210a502410047ad103b0b3901027f1038410110d701410041b28d08410710c801210010af032201200010f5025045044041ff8708411a1003000b2001200010f30210200b3902027f017e1038410110d701410041b28d08410710c801210010af032201200010f20210a002220250047e2001200010f3020520020b10200b5402037f017e230041106b220024001038410110d7014100101b2103200041086a10af032202200310ee02200028020c21012000280208047f20022003200110f10241010541000b200110e201200041106a24000b3802027f017e1038410110d701410041b28d08410710c801210010af032201200010f50222025045044020012002200010f1020b200210200b830101027f230041406a220024001038410010d701200010ad03220136020c200041106a200110e30220002000410c6a360224200041386a200041206a290200370300200041306a200041186a290200370300200020002902103703280340200041106a200041286a107f20002802100440200035021410200c010b0b200041406b24000bbe0101077f230041206b220024001038410110d701410041fe8c08410410ba012104200010ad03220210ce0220001098052101024020002802002205450440200020013602040c010b200041106a220620022000280208220310de022000200136021820022003200610df020b2000200336021c20004100360218200020013602142000200436021020022001200041106a10df0220002001360208200541016a22014504401076000b200020013602002002200010d002200041206a24000b1e01017f200028020c41016a220104402000200136020c20010f0b1076000bbe0101077f230041206b220024001038410110d701410041fe8c08410410ba012104200010ad03220210ce0220001098052101024020002802002205450440200020013602080c010b200041106a220620022000280204220310de022000200136021c20022003200610df020b2000410036021c20002003360218200020013602142000200436021020022001200041106a10df0220002001360204200541016a22014504401076000b200020013602002002200010d002200041206a24000b4701027f230041306b220024001038410010d701200041206a10ad03220110ce022000410c6a2001200028022410e202200028020c410173200028021010e001200041306a24000b4701027f230041306b220024001038410010d701200041206a10ad03220110ce022000410c6a2001200028022810e202200028020c410173200028021010e001200041306a24000b3601017f230041206b220024001038410010d7012000410c6a10ad0310e302200028020c410173200028021010e001200041206a24000b4701027f230041306b220024001038410010d701200041206a10ad03220110ce022000410c6a20012000280228108101200028020c410173200028021010e001200041306a24000bc90202077f017e230041d0006b220024001038410210d70141012101410041cf8e08410710ba012102410141d68e08410710ba0121052000410c6a10ad03200210810102400240200028020c0440200041206a2000410c6a10800110ad0322032000280224220410dd020d02200041306a2201200310ce0220011098052101200028022821022000200136022820032004200041206a10df02024020020440200041406b22062003200210de022000200136024c20032002200610df020c010b200020013602380b2000200436024c20002002360248200020013602442000200536024020032001200041406b10df02200028023041016a22010d011076000b0c010b200020013602302003200041306a10d002200041186a200041c8006a2902003702002000200029024022073702102007a72102410021010b2001200210e001200041d0006a24000bc90202077f017e230041d0006b220024001038410210d70141012101410041cf8e08410710ba012102410141d68e08410710ba0121052000410c6a10ad03200210810102400240200028020c0440200041206a2000410c6a10800110ad0322032000280224220410dd020d02200041306a2201200310ce0220011098052101200028022c21022000200136022c20032004200041206a10df02024020020440200041406b22062003200210de022000200136024820032002200610df020c010b200020013602340b2000200236024c20002004360248200020013602442000200536024020032001200041406b10df02200028023041016a22010d011076000b0c010b200020013602302003200041306a10d002200041186a200041c8006a2902003702002000200029024022073702102007a72102410021010b2001200210e001200041d0006a24000b5401027f230041306b220024001038410110d701410041cf8e08410710ba0121012000410c6a10ad032001108101200028020c0440200041206a22012000410c6a10800110ad03200110dc020b200041306a24000b4501027f230041206b220024001038410110d701410041cf8e08410710ba0121012000410c6a10ad03200110e202200028020c410173200028021010e001200041206a24000b5a01047f230041306b220024001038410210d701410041cf8e08410710ba012101410141c68e08410910ba0121022000411c6a220310ad0320011081012000410c6a2201200310800110ad032001200210e102200041306a24000b7201047f230041306b220024001038410210d701410041cf8e08410710ba012101410141c68e08410910ba0121022000410c6a10ad0322032001108101200028020c0440200041286a200041186a290200370300200020002902103703202003200041206a200210e1020b200041306a24000b7c01037f230041306b220024001038410110d701410041cf8e08410710ba012101108a0121022000410c6a10ad0320011081010340200028020c0440200041206a2000410c6a220110800120022000280220108502200110ad0320002802281081010c010b0b20002002360220200041206a10e501200041306a24000ba90101047f230041406a220024001038410110d701410041cf8e08410710ba012102108a012101200010ad0322033602242000410c6a200320021081012000200041246a360220200041386a2000411c6a290200370300200041306a200041146a2902003703002000200029020c37032803402000410c6a200041286a107f200028020c0440200120002802101085020c010b0b20002001360208200041086a10e501200041406b24000b3a01017f230041106b220024001038410010d701200010ab0336020c20002000410c6a10d20220002802002000280204109e03200041106a24000b2101017f1038410110d701410041fe8c08410410ba01210010ab03200010c2021a0b4401027f230041206b220024001038410010d701200041106a10ab03220110ce02200041086a2001200028021410c5022000280208200028020c10ea01200041206a24000b4301037f230041106b220024001038410010d701200010ab03220110ce022000280204220245044041e58d08410c109801000b20012002107cad1020200041106a24000b6a02027f017e230041306b220024001038410010d7012000410c6a220110a7032000200041106a10d20220002000290300370318200020013602200340200041246a200041186a10820120002802240440200035022c2000350228102010200c010b0b200041306a24000b7101027f230041306b220024001038410010d701108a0121012000411c6a10a703200041106a200041206a10d202200020002903103702280340200041086a200041286a107a200028020804402001200028020c10b3010c010b0b20002001360218200041186a109803200041306a24000ba90101037f230041406a220024001038410010d701108a012102200041286a220110a703200041186a2000412c6a10d202200020002903183702342000200136023c0340200041106a200041346a107a2000280210410147450440200041086a200028023c2201280200200141086a2802002000280214108301200028020c210120002802081084012002200110b3010c010b0b20002002360224200041246a109803200041406b24000b5a01047f230041206b220024001038410210d701410041fe8c08410410ba012101410141828d08410510ba012102200041146a220310a703200041086a20032001200210b5022000280208200028020c10ea01200041206a24000b3d01027f230041106b220024001038410110d701410041fe8c08410410ba012101200041046a10a7032000280204200110ba02ad103b200041106a24000b5101027f230041206b220024001038410110d701410041fe8c08410410ba012101200041146a10a703200041086a2000280214200028021c20011083012000280208200028020c10ea01200041206a24000b6101047f230041106b220024001038410110d701410041fe8c08410410ba012102200041046a10a70320002802042000280208200210c302047f200028020c2201200210b90221032001200210b30241010541000b200310ea01200041106a24000b870101057f230041306b220024001038410210d701410041fe8c08410410ba012102410141908d08410910ba01200041246a220310a703200041186a22042003200210bb02200041106a200410bd02200028021022032000280214220410bc0222026a220120024904401076000b200041086a20032004200110b5022001ad1020200041306a24000b880101047f230041206b220024001038410210d701410041fe8c08410410ba012101410141998d08410710ba012103200041086a220210a703200041146a2002200110bb022000411c6a2802002101200028021821022000280214450440200020022001200310be0220002802002102200028020421010b2002200110bc02ad1020200041206a24000bc40101057f230041306b220024001038410310d701410041fe8c08410410ba012101410141908d08410910ba012103410241878d08410910ba012104200041246a220210a703200041186a2002200110bb02200041206a2802002101200028021c2102024002402000280218044020032002200110bc0222036a22042003490d02200041106a20022001200410b5020c010b200041086a20022001200410be02200028020c2101200028020821020b2002200110bc02ad1020200041306a24000f0b1076000b9b0101047f230041206b220024001038410210d701410041fe8c08410410ba012101410141a08d08410d10ba012103200041146a220210a703200041086a2002200110bb02200041106a2802002101200028020c210202402000280208450440200120036a22032001490d01200020022001200310be0220002802002102200028020421010b2002200110bc02ad1020200041206a24000f0b1076000ba60201067f230041f0006b220024001038410010d701108a012102200041206a220110ae03200041186a200041246a10d2022000200029031837022c20002001360234200041cc006a210403400240200041106a2000412c6a107a20002802104101470d00200041e0006a220320002802342201280200200141086a2802002000280214220110e502200041386a200310e602200041d0006a200041406b28020036020020002000290338370348200041086a200410d202200020002903083702542000200041c8006a36025c0340200041e0006a200041d4006a1082012000280260450d0220002802682103200028026421052002200110850220022005108502200220031085020c000b000b0b20002002360260200041e0006a10e501200041f0006a24000b4201027f230041106b220024001038410110d701410041fe8c08410410ba012101200041046a10ae0320002802042000280208200110b702ad103b200041106a24000b3d01027f230041106b220024001038410110d701410041fe8c08410410ba012101200041046a10ae032000280204200110ba02ad103b200041106a24000bda0101037f230041d0006b220024001038410110d701410041fe8c08410410ba0121012000410c6a10ae03200041186a200028020c2000280214200110e50220002802180440200041306a200041246a2802003602002000200029021c370328108a0121012000200041286a220241047210d20220002000290300370238200020023602400340200041c4006a200041386a10820120002802440440200028024c210220012000280248108502200120021085020c010b0b20002001360208200041086a10e501200041d0006a24000f0b41e28e08410b109801000b980101047f230041306b220024001038410310d701410041fe8c08410410ba012101410141988c08410310ba012102410241828d08410510ba012103200041146a10ae03200041206a2000280214200028021c200110e502200028022045044041e28e08410b109801000b2000200041246a2002200310b502200041003602082000200029030037020c200041086a10e901200041306a24000b910101037f230041306b220024001038410210d701410041fe8c08410410ba012101410141988c08410310ba012102200041146a10ae03200041206a2000280214200028021c200110e502200028022045044041e28e08410b109801000b200020002802242000412c6a2802002002108301200041003602082000200029030037020c200041086a10e901200041306a24000b5f01047f230041206b220024001038410110d701410041fe8c08410410ba012101200041086a10ae032000280208200028020c200110c30222020440200041146a22032000280210200110e70220031096030b2002ad103b200041206a24000bb90101047f230041d0006b220024001038410010d701200041186a220110ae03200041106a2000411c6a10d202200020002903103702242000200136022c200041346a21010340200041086a200041246a107a2000280208410147450440200041406b2202200028022c2203280200200341086a280200200028020c10e5022001200210e602200041c8006a200141086a2802003602002000200129020037034020021096030c010b0b200041186a109303200041d0006a24000bb30101067f230041306b220024001038410310d701410041fe8c08410410ba012103410141988c08410310ba012104410241908d08410910ba01200041246a220110ae03200041186a22052001200310bb02200041106a200510e90220052000280210200028021410e40220012005200410bb02200041086a200110bd0220002802082201200028020c220310bc0222046a220220044904401076000b200020012003200210b5022002ad1020200041306a24000bf50101077f230041406a220024001038410410d701410041fe8c08410410ba012102410141988c08410310ba012104410241828d08410510ba012105410341dd8e08410510ba012106200041286a220310ae032000411c6a2003200210bb02200041246a280200210220002802202103200028021c0440200041346a22012003200210e402200041106a20012004200510b502410121010b2000413c6a20023602002000200336023820002001360234200041086a200041346a220110e90220012000280208200028020c10e40220002000280234200028023c20041083012000280204200620002802001bad1020200041406b24000b8e0101067f230041306b220024001038410310d701410041fe8c08410410ba012102410141988c08410310ba012103410241828d08410510ba012104200041186a220510ae03200041246a22012005200210bb02200041106a200110e90220012000280210200028021410e402200041086a20012003200410b5022000280208200028020c10ea01200041306a24000b4701017f230041206b220024001038410010d701200041106a10a80320002000290310370218200041086a2000411c6a10d2022000280208200028020c109e03200041206a24000b4201027f230041106b220024001038410110d701410041fe8c08410410ba012101200041086a10a8032000280208200028020c200110b702ad103b200041106a24000b3d01027f230041106b220024001038410110d701410041fe8c08410410ba012101200041086a10a8032000280208200110ba02ad103b200041106a24000b4201027f230041106b220024001038410110d701410041fe8c08410410ba012101200041086a10a8032000280208200028020c200110c302ad103b200041106a24000b11001038410010d70110ac03109e02103a0b2401027f1038410110d701410010d301210010ac0322012001109e022000108f0210ec020b2801037f1038410110d701410010d301210010ac032201109e02220220001091022001200210ec020b4301037f1038410110d701410010d301210010ac032202109e022201200010880241ff017141024f044041f18d084110109801000b200120001092022002200110ec020b2401027f1038410110d701410010d301210010ac03220110ed0204402001200010ac020b0b0f001038410010d70110ac0310ad020b12001038410010d70110ac0310ed02ad103b0b1e001038410110d701410041b28d08410710c80110ac0310b00245ad103b0b12001038410010d70110ac0310a502ad10200b6401047f230041106b220124001038410010d701200141086a10a90320012802082102200128020c109f0221034101210002400340200020034d04402000417f460d022002200010c602ad1020200041016a21000c010b0b200141106a24000f0b1076000b5e01057f230041106b220024001038410110d701410041fe8c08410410ba012102200041086a10a9032000280208200028020c2204109f0241016a22014504401076000b200110c7022002ad10b60220042001ad10b602200041106a24000b5c01037f230041106b220024001038410110d701410041ad8d08410510ba012101200041086a10a90302402001450d002000280208200028020c109f022001490d00200110c602ad1020200041106a24000f0b41eb950841121003000b7401047f230041106b220024001038410210d701410041b28d08410710c8012102410141ad8d08410510ba012101200041086a10a90302402001450d0020002802082103200028020c200210c8022001490d0020022003200110c70210ae02ad1020200041106a24000f0b41eb950841121003000b2e01017f230041106b220024001038410010d701200041086a10a903200028020c109f02ad1020200041106a24000b3d01027f230041106b220024001038410110d701410041b28d08410710c8012101200041086a10a903200028020c200110c802ad1020200041106a24000be00102047f027e230041306b220124001038410310d7014100108e0121004101101b2104200141206a410210bf01200141106a200141286a2903003703002001200129032037030802400240106e22022000108203450440200210850310a402220341ff017141ff01460d0120022000108103200341016a2200ad42ff0183220510b6022002108503200510b6020c020b2002200010800321000c010b41ff890841d7001003000b200220002004108803450440200220002004200141086a2203108a032002200020032004108d03200141306a24000f0b41d68a0841171003000bb70102047f017e230041306b220024001038410310d7014100108e0121014101101b2104200041206a410210bf01200041106a200041286a290300370300200020002903203703080240106e22022001108203044020022002200110800322012004108803450d01200041186a2203200220012004108603200220012003108e03200220012004200041086a2203108a032002200120032004108d03200041306a24000f0b41b6890841101003000b41c68908411e1003000bb60102037f017e230041206b220024001038410210d7014100108e0121024101101b21030240106e22012002108203044020012001200210800322022003108803450d01200041086a2001200220031086032000108701200020002d00043a001c200020002802003602182000280210200041186a22011093012000290308200110df01200041146a2001108b03200028021820002d001c108b01200041206a24000f0b41b6890841101003000b41c68908411e1003000b920101037f230041306b220024001038410210d7014100108e012101200041206a410110bf01200041106a200041286a290300370300200020002903203703080240106e2202200110820304402002200220011080032201200041086a108c0310a502450d0120022001200041086a108c0310a0021020200041306a24000f0b41b6890841101003000b41c68908411e1003000b6c02037f017e230041106b220224001038410210d7014100108e0121004101101b21030240106e22012000108203450d0020012001200010800322002003108803450d00200220012000200310860320012000200310830310ad02200120002002108e030b200241106a24000b3a02027f017e1038410210d7014100108e0121004101101b2102106e22012000108203047e2001200120001080032002108903ad0542010b103b0b1d01017f1038410110d7014100108e01210010b203200010d90210ea020b1d01017f1038410110d7014100108e01210010b203200010d90210ad020b1d01017f1038410110d7014100108e01210010b203200010db02ad103b0b2c01027f1038410210d701410041b28d08410710c80121004101108e01210110b2032000200110d802ad103b0b2701017f1038410110d7014100108e01210010b203200010db0245044041fd950841141003000b0b3601027f1038410210d701410041b28d08410710c80121004101108e01210110b2032000200110d80245044041fd950841141003000b0b5401057f230041206b2200240010ac01410210d7014100108e012102410110cb01210310a501200041086a10b30310702101108a0121042000410036021420002802102001200420022003200041146a10ff02000b7c01077f230041206b2200240010ac01410210d7014100108e012104410110cb01210210a501200210fb022103108a012105200041086a10b30310702101108a0121062000200536021c2000411f411b20031b3602182000419a8f0841ff8e0820031b36021420002802102001200620042002200041146a10ff02000be10101067f230041206b2201240010ac01410110d7014100108e01210410a501200141086a10b30310702102108a0121052001410036021420012802102103230041d0006b22002400200310f6020240200141146a2201280200450440200041086a200310950210fa020c010b200041106a200141086a280200360200200020012902003703080b20034101200010a802200041306a200220052004410010f3012000412c6a200041106a28020036020020002000290308370224200020002802483602202000200028024036021c20002000290330370214200041146a10f401000bd20201087f230041206b220024001038410010d70120004181043b0006108a012102200041086a220110b3032000200236021c20004112360218200041ed8e08360214200041066a2105200041146a210210f7022103230041206b22002400200128020810ed02450440200110f802200041e3840810f00141d58408410e10f101108a011a2802001077210120002802042204200110b30120002802102106200028020021072003200410f90241002101034020014102470440200120056a2d00002203044020042003410274220341b494086a2802002802002003419494086a280200280200106f10b3010b200141016a21010c010b0b200010950236020c2000200636020820004100360210200020043602042000200736020020022802000440200041106a22012002290200370200200141086a200241086a2802003602000b200010f401000b41ea880841201003000b4001027f230041206b220024001038410110d701410010cb012101200041146a10b303200020002802142000280218200110fc02200010de01200041206a24000b7901037f230041306b220024001038410210d701410041bf8f08410210c801410110cb012102200041146a10b303200041206a20002802142000280218200210fc02200041286a22012802004200200028022c109901200041086a200129030037030020002000290320370300200010de01200041306a24000b3b01037f230041106b220024001038410110d701410010cb012101200041046a220210b303200210f80228020042002001109a01200041106a24000b3701027f230041106b220024001038410010d701200041046a220110b30310f702200110f802280200420010a2011021200041106a24000b4b01027f230041206b22002400410010d701200041106a220110a6012000200028021836020c200110b303200110f8022000410c6a10a503044041d5880841151003000b200041206a24000bd90102097f017e230041306b22002400410010d70110a70121022000410c6a220110b303200041206a2103200110f802210620021012210741002101024002400340200141106a22042001490d02200420074b0d01200342003703002000420037031820022001200041186a2205411010a8011a2000410036022c20052000412c6a220810a90121012005200810aa0121092000200041186a2000412c6a10a90136022420002001360220200020093703182006200310a503450440200421010c010b0b41d5880841151003000b200041306a24000f0b1076000b4701017f230041106b220024001038410010d701200041046a10b303027f200028020c10ed024504402000280204200028020810fd020c010b108a010b10081a200041106a24000b920201087f230041206b2200240010ac01410110d7014100108e01210610a501200041086a107210702102108a0121072000410036021420002802102103200041146a2101230041d0006b22002400200041086a20031073024002400240200028020841016b0e020001020b4199880841181003000b41b1880841141003000b027f2001280200220545044010a001108a01220410f90220042003109b01418a8908210541100c010b2001280208210420012802040b210120034101200010a802200041306a200220072006410310f3012000412c6a2004360200200041286a200136020020002005360224200020002802483602202000200028024036021c20002000290330370214200041146a10f401000b6701027f230041106b220024001038410110d7014100108e012101200041046a1072024020002802042000280208107941024704402001109a02450d01200028020c41022001107710a802200041106a24000f0b41b1880841141003000b41c5880841101003000b5a01037f230041206b220024001038410210d701410010cb0121012000410110ca0122024110763a0012200020023b0110200041146a10722000200028021420002802182001200041106a108f03200010de01200041206a24000b890101047f230041306b220024001038410310d701410041bf8f08410210c801410110cb0121032000410210ca0122014110763a0012200020013b0110200041146a1072200041206a2201200028021420002802182003200041106a108f032001109003200041086a200041286a29030037030020002000290320370300200010de01200041306a24000b4902027f017e230041206b220024001038410210d7014100101b2102410110cb012101200041146a107220002000280214200028021820022001109103200010de01200041206a24000b7802047f017e230041306b220024001038410310d701410041bf8f08410210c8014101101b2104410210cb012102200041146a1072200041206a220320002802142000280218200420021091032003109003200041086a200041286a29030037030020002000290320370300200010de01200041306a24000b4202037f017e230041106b220024001038410210d7014100101b2103410110cb012101200041046a22021072200210f80228020020032001109a01200041106a24000b3e02027f017e230041106b220024001038410110d7014100101b2102200041046a2201107210f702200110f802280200200210a2011021200041106a24000be402020b7f017e230041306b220024001038410110d7014100101b210b200041106a2201107210f702200110f8024200100b210610042102100421071004210810042103100421014200100b21091004210a280200200b2006200220072008200320012009200a106820011012450440200141f18108412010241a0b200041003b011c200241002000411c6a22042202410210a8011a200310772203101221012000412c6a41003a0000200041286a200136020020002003360224200020013602202000410036021c2002109d0321022004109d0321032000411c6a109d032104200028021c200028022010c401044020002d002c044041c4e608410036020041c8e60841003a00000b200041086a108701200020002d000c3a00202000200028020836021c2000411c6a2201200210e3012001200310e3012001200410e301200028021c20002d0020108b01200041306a24000f0b41e18608412041a58008410e107e000b4501017f230041106b220024001038410010d701200041046a1072027f200028020c10a50204402000280204200028020810fd020c010b108a010b10081a200041106a24000b4e01027f230041106b220024001038410110d701410041d78f08410310ba012101200041046a10b0032000280208109f02044041df8708410f1003000b200028020c200110d502200041106a24000b4201027f230041106b220024001038410110d701410041ad8d08410510ba012101200041046a10b00320002802042000280208200110d602ad1020200041106a24000b990101077f230041106b220024001038410110d701410041ad8d08410510ba012103200041046a10b00320002802082202109f022101200028020422042002200110d6022105024020012003460440200521060c010b20042002200310d6022106200420022003200510d7020b200420022001410010c90220014504401076000b200028020c200141016b10d5022006ad1020200041106a24000b4e01037f230041106b220024001038410210d701410041ad8d08410510ba012101410141d58f08410210ba012102200041046a10b003200028020420002802082001200210d702200041106a24000b6801057f230041106b220124001038410010d701200141046a10b00320012802082202109f022103200128020421044101210002400340200020034d04402000417f460d0220042002200010d602ad1020200041016a21000c010b0b200141106a24000f0b1076000b7e02057f017e230041206b220024001038410210d701200041086a410041e58f0810d201200041146a410141e38f0810d2012000411c6a2802002101200041186a280200210220002802102103200028020c210420002802082000280214108a0245200220044772047e420005200320011078ad0b103b200041206a24000b0d001038410010d701420010200b0c001038410010d7011076000b0d001038410010d701427e103b0b11001038410010d70141818708410410220b7101037f1038410110d701230041106b220124004100108e012200101241044604402001410036020c200041002001410c6a2202410410a8011a41feffffff0720002002410441818708410410d0011b21000b200141106a2400200041feffffff0747047e2000109a02ad0542010b103b0b14001038410110d7014100108e01109a02ad103b0b970102037f027e230041206b220024001038410110d701410041f08c08410810ba01ad2104108a01210103402003200451450440108a012202200342017c220310fc012001200210b3010c010b0b2000200136021020002001101236021c200041003602182000200041106a3602140340200041086a200041146a10e60120002802080440200028020c10081a0c010b0b200041206a24000b2b01017f1038410110d701410041f88c08410610ba01220045044041e28c08410e109801000b2000ad10200b2001017f1038410110d701410041b28d08410710c801210010b103200010a6020b4901017f230041206b220024001038410010d701200010b10310a10241c18f08410a106f10bf02200041106a2000280200200028020410d402200028021045ad103b200041206a24000b6001037f230041106b220024001038410110d701410041fe8c08410410ba01200010b10310a10241c18f08410a106f10bf02200028020c1077220141bc87084108100e1a200110b8022000280208200110ae02410047ad103b200041106a24000b4701017f230041206b220024001038410010d701200010b10310a10241c18f08410a106f10bf02200041106a2000280200200028020410d40220003502101020200041206a24000b6e01047f230041106b220124001038410110d701410041828d08410510ba0121024101210003402003200020024b72450440200141086a41c18f08410a106f1097032001280208200128020c200010b7021a200020024f2103200020002002496a21000c010b0b200141106a24000be10501057f230041e0006b220024000240024010f50122041095012201108e020d0020011077220210122101200041cc006a41003a0000200041c8006a200136020020002002360244200020013602402000410036023c2000413c6a2201109403210220011095032103108a01210103402003044020012000413c6a10940310b301200341016b21030c010b0b200028023c200028024010c401450d0120002d004c044041c4e608410036020041c8e60841003a00000b200410ad022000200210fa012000280220450d002000413c6a200210fa01200028025c450d00024002402000413c6a41ff8e08411b10f9014504402000413c6a419a8f08411f10f9010d012000413c6a41ed8e08411210f9010d02200041286a2002200110a1032000280228450d03200041306a28020021012000413c6a200028022c220210fa01200028025c450d03200041286a2002200110a1032000280228450d032000413c6a200028022c200041306a28020010a103200028023c450d0341ac8c0841361003000b10d901410010d80120004100360224200041286a2202200041246a10b901200028022410d5012000280228200028022c21042002200110da0110d901200028022c200028023010d601450440200041286a220110b30320012004109b030c030b200041286a10b303200028023010fe020c020b10d901410010d80120004100360224200041286a2202200041246a41b98f08410610af01200028022410d50120002802282002200110da0110d901200028022c200028023010d601450440200041286a220110a60120002802302102200110b30320012002109b030c020b200041286a10b303200028023010fe020c010b10d901410010d80120004100360224200041286a2202200041246a41b98f08410610af01200028022410d50120002802282002200110da0110d901200028022c200028023010d6010d0041e593084108106f10ea020b200041e0006a24000f0b41948108411941a58008410e107e000b3801017f230041106b2203240020034200370308200320012002200341086a109f0320002003280200200328020410ab02200341106a24000b4301027f108a0122062000109b01027f2001500440410d210720050c010b20062001109c012004210720030b210020062002109d01100920002007106f2006109e011a0b3401027f230041106b22032400200341086a20022001106f220410732000200329030837020020002004360208200341106a24000b0b9d180600418080080bf101546f6b656e417474726962757465736e6f6e46756e6769626c65546f6b656e4d6170706572696e70757420746f6f206c6f6e67696e76616c69642076616c756564656c6962657261746520746f70206465636f6465206572726f7264656c6962657261746520746f7020656e636f6465206572726f7264656c69626572617465206e657374656420656e636f6465206572726f7273657269616c697a6572206465636f6465206572726f723a20455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e465443726561746500419182080bd202696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473656e64706f696e7420726573756c7420656e636f6465206572726f723a2063616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e6567617469766566616c73657472756563616e467265657a6563616e5769706563616e506175736563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c650041ec84080b010100418085080bd70f02ffff464e474e46545346544d4554417265676973746572416e64536574416c6c526f6c65736973737565636f6e74726163742063616c6c20656e636f6465206572726f723a2043425f434c4f53555245696e70757420746f6f2073686f72746361737420746f20693634206572726f72703232347032353670333834703532316661696c656420746f206c6f616420746f20627974652061727261794d616e6167656456656320696e646578206f7574206f662072616e6765000000000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f776572726f72206465636f64696e67204553445420617474726962757465733a2045474c4473746f72616765206b657920656e636f6465206572726f723a2073746f7261676520656e636f6465206572726f723a202e6d61707065642e6e6f64655f69642e6974656d2e6e6f64655f6c696e6b732e76616c75652e696e666f6c656e20616c7265616479207365742e6c656e2e6e6f64652e73746f726167654164647265737320616c7265616479207265676973746572656449737375652077617320616c72656164792063616c6c6564546f6b656e20494420616c726561647920736574496e76616c696420746f6b656e204944496e76616c6964207061796d656e7420746f6b656e4d757374206973737565206f722073657420746f6b656e20494420666972737464656661756c745f69737375655f636264656661756c745f69737375655f696e69745f737570706c795f6362556e6b6e6f776e20746f6b656e206964412076616c756520776173206e6f742070726576696f75736c79207365742e617474722e636f756e7465722e6d617070696e672e6e6f6e6365436f756e746572206f766572666c6f772e2054686973206d6f64756c652063616e20686f6c642065766964656e636520666f72206d6178696d756d2075383a3a4d415820646966666572656e7420746f6b656e20494473412076616c75652077617320616c7265616479207365746c6f67206461746120656e636f6465206572726f723a206c6f6720746f70696320656e636f6465206572726f723a20726563697069656e742061646472657373206e6f742073657473746f72616765206465636f6465206572726f723a20786d616d766563616d76656e636f64655f6572726f725f6d6574686f6464617461617267326e756d5f6c6f67736261206d75737420657175616c206273635f70616e696320746573747369676e6b657973686173685f74797065617267617267336e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637477616e7473206e6f6e2d7a65726f686f775f6d616e796e756d6265726974656d76616c75656f7468657277697365696e6372656d656e7464656661756c746b65795f696e6372656d656e74696e64657861646472657373616464723261646472316d76326d7631696e646578206f7574206f6620626f756e6473696f70745f61646472517565756520656d707479216e6f7420656e6f7567682066756e647363757276655f62697473697a656d62326d6231736c6963655f6c656e7374617274696e675f706f736974696f6e6e725f6279746573617272617973746f726167655f6b65796e65775f76616c75656e6f64655f6964656c656d656e746f746865724e6f2073746f72616765217365745f726f6c65735f63616c6c6261636b637573746f6d5f69737375655f7a65726f5f737570706c795f6362637573746f6d5f69737375655f6e6f6e5f7a65726f5f737570706c795f6362726573756c74746f7365745f6d61707065726174747269627574657369646c656e617673656e7a6f70747332733170656e64696e67626164206172726179206c656e67746876617220617267736172726179206465636f6465206572726f726361706163697479206578636565646564696e707574206f7574206f662072616e6765696e697469616c5f63616c6c657263616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75656576656e745f616576656e745f626576656e745f6572725f646174616576656e745f6572725f746f7069636c6f61645f776974685f6b65795f6572726c6f61645f776974685f76616c75655f65727273746f72655f776974685f76616c75655f6572726d61705f6d61707065727665635f6d617070657273746f726167655f62797465737365725f327573697a656269675f696e746269675f75696e746e725f746f5f636c656172693634753634626f6f6c6d6170316d6170326d61703371756575655f6d6170706572454c524f4e44693634454c524f4e447265736572766564454c524f4e4442696755696e746933326d795f73696e676c655f76616c75655f6d61707065726c6973745f6d61707065726d61705f73746f726167655f6d6170706572616464726573735f696473756e697175655f69645f6d6170706572636f6e74726163745f6164647265737377686974656c6973744d617070657266756e6769626c65546f6b656e4d6170706572726f6c657353657400000003000000030000000300000004000000000000008302020086020200890202008c020200580a0200340b0200500b02006c0b02008c0b0200a40b0200c00b0200e40b0200fc0b0200300b02004c0b0200680b0200880b0200a00b0200bc0b0200e00b0200f80b020041e094080bcf03617474656d707420746f206164642077697468206f766572666c6f77456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e7473616464724964616464726c6173744964556e6b6e6f776e2061646472657373696e646578206f7574206f662072616e67654974656d206e6f742077686974656c6973746564454c524f4e4472657761726445534454526f6c654c6f63616c4d696e7400001d0b02001100000045534454526f6c654c6f63616c4275726e000000380b02001100000045534454526f6c654e4654437265617465000000540b02001100000045534454526f6c654e46544164645175616e746974790000700b02001600000045534454526f6c654e46544275726e00900b02000f00000045534454526f6c654e4654416464555249000000a80b02001100000045534454526f6c654e46545570646174654174747269627574657300c40b02001b000000455344545472616e73666572526f6c65e80b020010000000617474656d707420746f2073756274726163742077697468206f766572666c6f7770616e6963206f636375727265640041b098080b049cffffff" +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_int_from_i64.scen.json b/test/features/basic-features-ei-1-3/scenarios/big_int_from_i64.scen.json new file mode 100644 index 000000000..5c56a1159 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_int_from_i64.scen.json @@ -0,0 +1,67 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "big_int_from_i64_1", + "arguments": [ + "42" + ] + }, + "expect": { + "out": [ + "42" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "big_int_from_i64_1", + "arguments": [ + "0x7FFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [ + "0x7FFFFFFFFFFFFFFF" + ] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "big_int_from_i64_1", + "arguments": [ + "0xFFFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [ + "0xFF" + ] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_int_to_i64.scen.json b/test/features/basic-features-ei-1-3/scenarios/big_int_to_i64.scen.json new file mode 100644 index 000000000..2a526cff5 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_int_to_i64.scen.json @@ -0,0 +1,129 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_i64", + "arguments": [ + "0" + ] + }, + "expect": { + "out": [ + "0" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_i64", + "arguments": [ + "1" + ] + }, + "expect": { + "out": [ + "1" + ] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_i64", + "arguments": [ + "-1" + ] + }, + "expect": { + "out": [ + "-1" + ] + } + }, + { + "step": "scQuery", + "id": "4", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_i64", + "arguments": [ + "+0x7FFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [ + "+0x7FFFFFFFFFFFFFFF" + ] + } + }, + { + "step": "scQuery", + "id": "4", + "comment": "too big", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_i64", + "arguments": [ + "+0x8000000000000000" + ] + }, + "expect": { + "out": [] + } + }, + { + "step": "scQuery", + "id": "5", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_i64", + "arguments": [ + "-0x8000000000000000" + ] + }, + "expect": { + "out": [ + "-0x8000000000000000" + ] + } + }, + { + "step": "scQuery", + "id": "6", + "comment": "too small", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_i64", + "arguments": [ + "+0x8000000000000001" + ] + }, + "expect": { + "out": [] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_num_conversions.scen.json b/test/features/basic-features-ei-1-3/scenarios/big_num_conversions.scen.json new file mode 100644 index 000000000..ab207714f --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_num_conversions.scen.json @@ -0,0 +1,190 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "big_int_to_parts+", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_parts", + "arguments": [ + "1234" + ] + }, + "expect": { + "out": [ + "+1", + "1234" + ] + } + }, + { + "step": "scQuery", + "id": "big_int_to_parts0", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_parts", + "arguments": [ + "0" + ] + }, + "expect": { + "out": [ + "0", + "0" + ] + } + }, + { + "step": "scQuery", + "id": "big_int_to_parts-", + "tx": { + "to": "sc:basic-features", + "function": "big_int_to_parts", + "arguments": [ + "-1234" + ] + }, + "expect": { + "out": [ + "-1", + "1234" + ] + } + }, + { + "step": "scQuery", + "id": "big_int_from_biguint+", + "tx": { + "to": "sc:basic-features", + "function": "big_int_from_biguint", + "arguments": [ + "+1", + "1234" + ] + }, + "expect": { + "out": [ + "1234" + ] + } + }, + { + "step": "scQuery", + "id": "big_int_from_parts0", + "tx": { + "to": "sc:basic-features", + "function": "big_int_from_biguint", + "arguments": [ + "0", + "1234" + ] + }, + "expect": { + "out": [ + "1234" + ] + } + }, + { + "step": "scQuery", + "id": "big_int_from_biguint-", + "tx": { + "to": "sc:basic-features", + "function": "big_int_from_biguint", + "arguments": [ + "-1", + "1234" + ] + }, + "expect": { + "out": [ + "-1234" + ] + } + }, + { + "step": "scQuery", + "id": "big-num-mutable-arg", + "tx": { + "to": "sc:basic-features", + "function": "endpoint_with_mutable_arg", + "arguments": [ + "50", + "25", + "25" + ] + }, + "expect": { + "out": [ + "100" + ] + } + }, + { + "step": "scQuery", + "id": "big-uint-set-u64", + "tx": { + "to": "sc:basic-features", + "function": "biguint_overwrite_u64", + "arguments": [ + "100", + "200" + ] + }, + "expect": { + "out": [ + "200" + ] + } + }, + { + "step": "scQuery", + "id": "big-uint-set-u64", + "tx": { + "to": "sc:basic-features", + "function": "biguint_overwrite_u64", + "arguments": [ + "100", + "0xFFFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [], + "status": "4", + "message": "str:cast to i64 error" + } + }, + { + "step": "scQuery", + "id": "big-int-set-i64", + "tx": { + "to": "sc:basic-features", + "function": "bigint_overwrite_i64", + "arguments": [ + "-5", + "-10" + ] + }, + "expect": { + "out": [ + "-10" + ] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_uint_eq_u64.scen.json b/test/features/basic-features-ei-1-3/scenarios/big_uint_eq_u64.scen.json new file mode 100644 index 000000000..3b6e224eb --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_uint_eq_u64.scen.json @@ -0,0 +1,53 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_eq_u64", + "arguments": [ + "0x7FFFFFFFFFFFFFFF", + "0x7FFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [ + "1" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_eq_u64", + "arguments": [ + "0xFFFFFFFFFFFFFFFF", + "0xFFFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [], + "status": "4", + "message": "str:cast to i64 error" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_uint_from_u64.scen.json b/test/features/basic-features-ei-1-3/scenarios/big_uint_from_u64.scen.json new file mode 100644 index 000000000..6083fac2e --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_uint_from_u64.scen.json @@ -0,0 +1,83 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_from_u64_1", + "arguments": [ + "42" + ] + }, + "expect": { + "out": [ + "42" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_from_u64_1", + "arguments": [ + "0x7FFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [ + "0x7FFFFFFFFFFFFFFF" + ] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_from_u64_1", + "arguments": [ + "0xFFFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [], + "status": "4", + "message": "str:cast to i64 error" + } + }, + { + "step": "scQuery", + "id": "4", + "tx": { + "to": "sc:basic-features", + "function": "biguint_from_u128", + "arguments": [] + }, + "expect": { + "out": [ + "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + ], + "status": "0", + "message": "" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_uint_log2.json b/test/features/basic-features-ei-1-3/scenarios/big_uint_log2.json new file mode 100644 index 000000000..18fea6a2c --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_uint_log2.json @@ -0,0 +1,47 @@ +{ + "name": "log2-function", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "log2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "value": "0", + "function": "log2_big_uint", + "arguments": [ + "33" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_uint_pow.scen.json b/test/features/basic-features-ei-1-3/scenarios/big_uint_pow.scen.json new file mode 100644 index 000000000..378068fe2 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_uint_pow.scen.json @@ -0,0 +1,44 @@ +{ + "name": "pow", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "pow", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "pow_big_uint", + "arguments": [ + "10", + "2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "100" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_uint_sqrt.scen.json b/test/features/basic-features-ei-1-3/scenarios/big_uint_sqrt.scen.json new file mode 100644 index 000000000..b0bb89ea5 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_uint_sqrt.scen.json @@ -0,0 +1,43 @@ +{ + "name": "sqrt", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "sqrt", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "sqrt_big_uint", + "arguments": [ + "100" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "10" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/big_uint_to_u64.scen.json b/test/features/basic-features-ei-1-3/scenarios/big_uint_to_u64.scen.json new file mode 100644 index 000000000..545a3d237 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/big_uint_to_u64.scen.json @@ -0,0 +1,82 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_to_u64", + "arguments": [ + "0" + ] + }, + "expect": { + "out": [ + "0" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_to_u64", + "arguments": [ + "1" + ] + }, + "expect": { + "out": [ + "1" + ] + } + }, + { + "step": "scQuery", + "id": "4", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_to_u64", + "arguments": [ + "0x7FFFFFFFFFFFFFFF" + ] + }, + "expect": { + "out": [ + "0x7FFFFFFFFFFFFFFF" + ] + } + }, + { + "step": "scQuery", + "id": "5", + "comment": "too big because we are first converting to int64; TODO: change conversion to completely unsigned", + "tx": { + "to": "sc:basic-features", + "function": "big_uint_to_u64", + "arguments": [ + "0x8000000000000000" + ] + }, + "expect": { + "out": [] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/block_info.scen.json b/test/features/basic-features-ei-1-3/scenarios/block_info.scen.json new file mode 100644 index 000000000..47dbc4f51 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/block_info.scen.json @@ -0,0 +1,244 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + }, + "previousBlockInfo": { + "blockTimestamp": "506", + "blockNonce": "521", + "blockRound": "532", + "blockEpoch": "544", + "blockRandomSeed": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "currentBlockInfo": { + "blockTimestamp": "511", + "blockNonce": "522", + "blockRound": "533", + "blockEpoch": "544", + "blockRandomSeed": "0x123456000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007" + } + }, + { + "step": "scCall", + "id": "get_prev_block_timestamp", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_prev_block_timestamp", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "506" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_prev_block_nonce", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_prev_block_nonce", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "521" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_prev_block_round", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_prev_block_round", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "532" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_prev_block_epoch", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_prev_block_epoch", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "544" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_prev_block_random_seed", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_prev_block_random_seed", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_block_timestamp", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_block_timestamp", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "511" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_block_nonce", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_block_nonce", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "522" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_block_round", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_block_round", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "533" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_block_epoch", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_block_epoch", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "544" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_block_random_seed", + "comment": "0-padding added in out-value", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_block_random_seed", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x123456000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/codec_err.scen.json b/test/features/basic-features-ei-1-3/scenarios/codec_err.scen.json new file mode 100644 index 000000000..4951776ea --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/codec_err.scen.json @@ -0,0 +1,145 @@ +{ + "name": "test that codec errors are returned correctly", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": {} + } + }, + { + "step": "scCall", + "id": "codec_err_finish", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "codec_err_finish", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:endpoint result encode error: deliberate top encode error" + } + }, + { + "step": "scQuery", + "id": "codec_err_storage_key", + "tx": { + "to": "sc:basic-features", + "function": "codec_err_storage_key", + "arguments": [] + }, + "expect": { + "out": [], + "status": "4", + "message": "str:storage key encode error: deliberate nested encode error" + } + }, + { + "step": "scQuery", + "id": "codec_err_storage_get", + "tx": { + "to": "sc:basic-features", + "function": "codec_err_storage_get", + "arguments": [] + }, + "expect": { + "out": [], + "status": "4", + "message": "str:storage decode error: deliberate top decode error" + } + }, + { + "step": "scCall", + "id": "codec_err_storage_set", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "codec_err_storage_set", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:storage encode error: deliberate top encode error" + } + }, + { + "step": "scCall", + "id": "codec_err_event_topic", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "codec_err_event_topic", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:log topic encode error: deliberate top encode error" + } + }, + { + "step": "scCall", + "id": "codec_err_event_data", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "codec_err_event_data", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:log data encode error: deliberate top encode error" + } + }, + { + "step": "scCall", + "id": "codec_err_contract_init", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "codec_err_contract_init", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:contract call encode error: deliberate top encode error" + } + }, + { + "step": "scCall", + "id": "codec_err_contract_call", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "codec_err_contract_call", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:contract call encode error: deliberate top encode error" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/count_ones.scen.json b/test/features/basic-features-ei-1-3/scenarios/count_ones.scen.json new file mode 100644 index 000000000..f15dfa3b1 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/count_ones.scen.json @@ -0,0 +1,44 @@ +{ + "name": "count ones", + "comment": "should fail if the processor doesn't support the `count ones` instruction", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "count_ones", + "arguments": [ + "0b010110" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/crypto_elliptic_curves.scen.json b/test/features/basic-features-ei-1-3/scenarios/crypto_elliptic_curves.scen.json new file mode 100644 index 000000000..cf3dee28b --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/crypto_elliptic_curves.scen.json @@ -0,0 +1,1160 @@ +{ + "name": "crypto - elliptic curves", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:features_contract": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "FAIL-Create-ec", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_create_ec", + "arguments": [ + "str:p22424" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "*", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "Verify-P224", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_create_ec", + "arguments": [ + "str:p224" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + { + "field1": "biguint:26959946667150639794667015087019630673557916260026308143510066298881", + "field2": "biguint:26959946667150639794667015087019625940457807714424391721682722368061", + "field3": "biguint:0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4", + "field4": "biguint:0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "field5": "biguint:0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "field6": "u32:224" + } + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "Verify-P256", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_create_ec", + "arguments": [ + "str:p256" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + { + "field1": "biguint:115792089210356248762697446949407573530086143415290314195533631308867097853951", + "field2": "biguint:115792089210356248762697446949407573529996955224135760342422259061068512044369", + "field3": "biguint:0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", + "field4": "biguint:0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "field5": "biguint:0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "field6": "u32:256" + } + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "Verify-P384", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_create_ec", + "arguments": [ + "str:p384" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + { + "field1": "biguint:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319", + "field2": "biguint:39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643", + "field3": "biguint:0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef", + "field4": "biguint:0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "field5": "biguint:0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "field6": "u32:384" + } + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "Verify-P521", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_create_ec", + "arguments": [ + "str:p521" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + { + "field1": "biguint:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151", + "field2": "biguint:6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449", + "field3": "biguint:0x51953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00", + "field4": "biguint:0xc6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "field5": "biguint:0x11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "field6": "u32:521" + } + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetValues-P224", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_values", + "arguments": [ + "224" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + { + "field1": "biguint:26959946667150639794667015087019630673557916260026308143510066298881", + "field2": "biguint:26959946667150639794667015087019625940457807714424391721682722368061", + "field3": "biguint:0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4", + "field4": "biguint:0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "field5": "biguint:0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "field6": "u32:224" + } + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetValues-P256", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_values", + "arguments": [ + "256" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + { + "field1": "biguint:115792089210356248762697446949407573530086143415290314195533631308867097853951", + "field2": "biguint:115792089210356248762697446949407573529996955224135760342422259061068512044369", + "field3": "biguint:0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", + "field4": "biguint:0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "field5": "biguint:0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "field6": "u32:256" + } + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetValues-P384", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_values", + "arguments": [ + "384" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + { + "field1": "biguint:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319", + "field2": "biguint:39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643", + "field3": "biguint:0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef", + "field4": "biguint:0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "field5": "biguint:0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "field6": "u32:384" + } + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetValues-P521", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_values", + "arguments": [ + "521" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + { + "field1": "biguint:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151", + "field2": "biguint:6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449", + "field3": "biguint:0x51953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00", + "field4": "biguint:0xc6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "field5": "biguint:0x11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "field6": "u32:521" + } + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetEcLength-P224", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_ec_length", + "arguments": [ + "224" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "224" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetEcLength-P256", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_ec_length", + "arguments": [ + "256" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "256" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetEcLength-P384", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_ec_length", + "arguments": [ + "384" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "384" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetEcLength-P521", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_ec_length", + "arguments": [ + "521" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "521" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetPrivKeyLength-P224", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_priv_key_byte_length", + "arguments": [ + "224" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "28" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetPrivKeyLength-P256", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_priv_key_byte_length", + "arguments": [ + "256" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "32" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetPrivKeyLength-P384", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_priv_key_byte_length", + "arguments": [ + "384" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "48" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "GetPrivKeyLength-P521", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_get_priv_key_byte_length", + "arguments": [ + "521" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "66" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P521-IsOnCurve-ReturnTrue-V1", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_is_on_curve_ec", + "arguments": [ + "521", + "0xc6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "0x11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P521-IsOnCurve-ReturnTrue-V2", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_is_on_curve_ec", + "arguments": [ + "521", + "0xc6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "0x11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P521-IsOnCurve-ReturnFalse", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_is_on_curve_ec", + "arguments": [ + "521", + "0x1", + "0x2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P256-Add-Fail-OnePointNotOnCurve", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_ec_add", + "arguments": [ + "256", + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "0x2", + "0x3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P256-Add-Fail-BothPointsNotOnCurve", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_ec_add", + "arguments": [ + "256", + "0x0", + "0x0", + "0x2", + "0x3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P256-Add-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_ec_add", + "arguments": [ + "256", + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x7cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978", + "0x7775510db8ed040293d9ac69f7430dbba7dade63ce982299e04b79d227873d1" + ], + "status": "0", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P521-Double-Fail-PointNotOnCurve", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_ec_double", + "arguments": [ + "521", + "0x2", + "0x3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P521-Double-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_ec_double", + "arguments": [ + "521", + "0xc6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "0x11839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d", + "0xf4bb8cc7f86db26700a7f3eceeeed3f0b5c6b5107c4da97740ab21a29906c42dbbb3e377de9f251f6b93937fa99a3248f4eafcbe95edc0f4f71be356d661f41b02" + ], + "status": "0", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "P256-Marshal-FailExecution-BufferTooSmall", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_marshal_ec", + "arguments": [ + "256", + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f53" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve" + } + }, + { + "step": "scCall", + "id": "P256-Marshal-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_marshal_ec", + "arguments": [ + "256", + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P256-Marshal-Fail-Infinity/ZeroPoint", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_marshal_ec", + "arguments": [ + "256", + "0x0", + "0x0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve" + } + }, + { + "step": "scCall", + "id": "P256-Unmarshal-Fail-PointNotOnCurve", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_unmarshal_ec", + "arguments": [ + "256", + "0x0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve" + } + }, + { + "step": "scCall", + "id": "P256-Unmarshal-Fail-DataInvalid", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_unmarshal_ec", + "arguments": [ + "256", + "0x04000000000000000000000000000000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:length of buffer is not correct" + } + }, + { + "step": "scCall", + "id": "P256-Unmarshal-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_unmarshal_ec", + "arguments": [ + "256", + "0x046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P256-MarshalCompressed-FailExecution-BufferTooSmall", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_marshal_compressed_ec", + "arguments": [ + "256", + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f53" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve" + } + }, + { + "step": "scCall", + "id": "P256-MarshalCompressed-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_marshal_compressed_ec", + "arguments": [ + "256", + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P256-MarshalCompressed-Fail-Infinity/ZeroPoint", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_marshal_compressed_ec", + "arguments": [ + "256", + "0x0", + "0x0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve" + } + }, + { + "step": "scCall", + "id": "P256-UnmarshalCompressed-Fail-PointNotOnCurve", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_unmarshal_compressed_ec", + "arguments": [ + "256", + "0x036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a1394000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve" + } + }, + { + "step": "scCall", + "id": "P256-UnmarshalCompressed-Fail-DataInvalid", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_unmarshal_compressed_ec", + "arguments": [ + "256", + "0x040000000000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:length of buffer is not correct" + } + }, + { + "step": "scCall", + "id": "P256-UnmarshalCompressed-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_unmarshal_compressed_ec", + "arguments": [ + "256", + "0x036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P224-GenerateKey-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_generate_key_ec", + "arguments": [ + "224" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "*", + "*", + "*" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P256-GenerateKey-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_generate_key_ec", + "arguments": [ + "256" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "*", + "*", + "*" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P384-GenerateKey-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_generate_key_ec", + "arguments": [ + "384" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "*", + "*", + "*" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P521-GenerateKey-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_generate_key_ec", + "arguments": [ + "521" + ], + "gasLimit": "70,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "*", + "*", + "*" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P224-ScalarBaseMult-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_scalar_base_mult", + "arguments": [ + "224", + "112233445566778899112233445566778899" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x29895f0af496bfc62b6ef8d8a65c88c613949b03668aab4f0429e35", + "0x3ea6e53f9a841f2019ec24bde1a75677aa9b5902e61081c01064de93" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P256-ScalarMult-Fail", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_scalar_mult", + "arguments": [ + "256", + "0x2a265f8bcbdcaf94d58519141e578124cb40d64a501fba9c11847b28965bc737", + "0x023819813ac969847059028ea88a1f30dfbcde03fc791d3a252c6b41211882ea", + "0xf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:point is not on curve" + } + }, + { + "step": "scCall", + "id": "P224-ScalarMult-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_scalar_mult", + "arguments": [ + "224", + "0x2507b2a1719f88dbe16518d8e719644b9fe2192f4b0e82c6dad005d2", + "0xa2534b3825a715e632b2629f158b9d9135de3a523c78814e5eef25c5", + "0xf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad" + ], + "gasLimit": "1,500,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xa71786c1e0b23c0812fd3feb626edfae5174f739823dd802eab38827", + "0x2ac7327527e4d1db0d8a610c09186fc5cad7806523ac3ae690c27229" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P256-ScalarMult-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_scalar_mult", + "arguments": [ + "256", + "0x3b5fe724fd14ca9e214b77055d0ab712ded48e87551a49757acf776981f5389b", + "0x60854c6483a8d2b82bf766e3c3bc8ff2f1c261a9b17f2e073a70177bc3781094", + "0xf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad" + ], + "gasLimit": "1,500,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xd49802d2e004b0e393949a5621a9c8bc88da546cd74e836d42967e37ee3d4dac", + "0xfb4de9aa477321be0c2524e68f8a0d601c001c99d311ff899deed3a3016d86b" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P384-ScalarMult-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_scalar_mult", + "arguments": [ + "384", + "0xf705dc15013b3c76e0dc7f06c425cc9c30d9a216b70c3ba7ab2c42da32bcd16767466f2d5febd7615e04cc225312f565", + "0x953320d0d4e6dffe103f9d2a846fdf8c706d638f9101f04d1e00b2f51e050f7d35e49552fef6eac6c6e2868282636255", + "0xf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad" + ], + "gasLimit": "1,500,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x742bf14f0c2840dbdec06691f80dd7e291cc344cd49e5f5e036d9b5a398b4bf8be19ca7cfaf85da37e81cd34c4a2d886", + "0xd1c93b3c7c0afa8a8b4172ed58feeb1583212f45fa9b82af51ab0f22932cfe2dfd48d8d520869c28d9cb1f072003761f" + ], + "status": "0", + "message": "*" + } + }, + { + "step": "scCall", + "id": "P521-ScalarMult-Success", + "tx": { + "from": "address:an_account", + "to": "sc:features_contract", + "function": "compute_scalar_mult", + "arguments": [ + "521", + "0x5390bac258c83dda7bddd0b607353e77b8a1fe6d6b73ed65fcd2927f0febcf000897b8c29c5e7f30a490d6ae6de3a179ab69bcba2c0c1d1a236ca81de940735fe7", + "0x1b6f67ea88bf7506ea8e8ba39005a074426bd96b20022f5e3d2d7855ce9ed8de0de8baf6e85f8a2ceedff2ebd716405fe9d9a00580938b3cbbee66bad3a0cb94ec3", + "0xf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad" + ], + "gasLimit": "1,500,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x73e462389a122750193fe319737ce536e72a55c96baacea96e428b85fc71e9e3386051f0b03579218792c4325722d7c523baeb04959e2cbcd75a0c8249a59a3a48", + "0x36b9f6cc3e03dc5726ac86540b15ecf165291b70ada97c17cc52aedc29d5782ca6a246faab599eb3244629eb3617395be738a9f45c7781dcd0bb915bb8a9206776" + ], + "status": "0", + "message": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/crypto_keccak256.scen.json b/test/features/basic-features-ei-1-3/scenarios/crypto_keccak256.scen.json new file mode 100644 index 000000000..e23758b0a --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/crypto_keccak256.scen.json @@ -0,0 +1,66 @@ +{ + "name": "crypto", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "compute_keccak256", + "arguments": [ + "0x61" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "compute_keccak256", + "arguments": [ + "0x0102030405060708" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "keccak256:0x0102030405060708" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/crypto_ripemd160.scen.json b/test/features/basic-features-ei-1-3/scenarios/crypto_ripemd160.scen.json new file mode 100644 index 000000000..f049d09c9 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/crypto_ripemd160.scen.json @@ -0,0 +1,66 @@ +{ + "name": "crypto", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "compute_ripemd160", + "arguments": [ + "0x010203" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x79f901da2609f020adadbf2e5f68a16c8c3f7d57" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "compute_ripemd160", + "arguments": [ + "0x0102030405060708" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xc9883eece7dca619b830dc9d87e82c38478111c0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/crypto_sha256.scen.json b/test/features/basic-features-ei-1-3/scenarios/crypto_sha256.scen.json new file mode 100644 index 000000000..b91056606 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/crypto_sha256.scen.json @@ -0,0 +1,66 @@ +{ + "name": "crypto", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "compute_sha256", + "arguments": [ + "0x010203" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x039058c6f2c0cb492c533b0a4d14ef77cc0f78abccced5287d84a1a2011cfb81" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "compute_sha256", + "arguments": [ + "0x0102030405060708" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x66840dda154e8a113c31dd0ad32f7f3a366a80e8136979d8f5a101d3d29d6f72" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/crypto_verify_bls.scen.json b/test/features/basic-features-ei-1-3/scenarios/crypto_verify_bls.scen.json new file mode 100644 index 000000000..ead18354d --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/crypto_verify_bls.scen.json @@ -0,0 +1,46 @@ +{ + "name": "crypto", + "comment": "does not currently work with scenarios-rs, because verify_bls function is not yet mocked", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "verify_bls_signature", + "arguments": [ + "0xb5823f6e564251cc03ce7bad3da83e72576e92795d3500bba1acb30ec9a94dce87bb8aa794d67b2d61d15c33f28f6c0c23ba1dfcbf21e8f8b46286ff871afabac925303ddcaddce6254fcff6d3155797db40b3d3b5865e8fc0bd770b3d79b381", + "0x6d65737361676520746f206265207369676e6564", + "0xaf32a2ddf341c08d1eb7232f05dc34e4454155e676b58c40fddf9a036562ac2c01533d2d557cb49d73aa9d7a89744696" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/crypto_verify_ed25519.scen.json b/test/features/basic-features-ei-1-3/scenarios/crypto_verify_ed25519.scen.json new file mode 100644 index 000000000..63fe079a7 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/crypto_verify_ed25519.scen.json @@ -0,0 +1,65 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "verify ok", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "verify_ed25519_signature", + "arguments": [ + "0xf2445fdaca6607728fa06e0610062c3468cad6d54f19549916ef577f69c7eb86", + "0x6d65737361676520746f207369676e", + "0xf34eb80f5ef94e0928f42f26b4a14799d52a8f687eb644d6be73a8db3ae85de059002d369be28c8c188b179dcf6286fd009d540953ea932f70aead52d6aa7d09" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "verify fail", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "verify_ed25519_signature", + "arguments": [ + "0xf2445fdaca6607728fa06e0610062c3468cad6d54f19549916ef577f69c7eb86", + "0x6d65737361676520746f207369676e", + "str:absolutely-invalid-signature" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:invalid signature", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/crypto_verify_secp256k1.scen.json b/test/features/basic-features-ei-1-3/scenarios/crypto_verify_secp256k1.scen.json new file mode 100644 index 000000000..7810299d5 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/crypto_verify_secp256k1.scen.json @@ -0,0 +1,121 @@ +{ + "name": "crypto", + "comment": "does not currently work with scenarios-rs, because verify_secp256k1 functions are not yet mocked", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "5 - compressed key", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "verify_secp256k1_signature", + "arguments": [ + "0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5", + "0x6d65737361676520746f207369676e", + "0x3045022100fab29dbcb623e7e96f44665f312b89ffdb9e4d2e2f53353236fbbcf57b2f49bf02203d6f9c63df8be43121042970a549a2d3baeca093fd37b726ddcc0924638409f5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "6 - uncompressed key", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "verify_secp256k1_signature", + "arguments": [ + "0x04a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5ca1d22fe57c6103dbaac10cf15d15c0791cab8bb9a04f800e4d215276cb3e008", + "0x6d65737361676520746f207369676e", + "0x3045022100fab29dbcb623e7e96f44665f312b89ffdb9e4d2e2f53353236fbbcf57b2f49bf02203d6f9c63df8be43121042970a549a2d3baeca093fd37b726ddcc0924638409f5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "7 - encode key from r and s", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "compute_secp256k1_der_signature", + "arguments": [ + "0x90f27b8b488db00b00606796d2987f6a5f59ae62ea05effe84fef5b8b0e54998", + "0x4a691139ad57a3f0b906637673aa2f63d1f55cb1a69199d4009eea23ceaddc93" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x304502210090f27b8b488db00b00606796d2987f6a5f59ae62ea05effe84fef5b8b0e5499802204a691139ad57a3f0b906637673aa2f63d1f55cb1a69199d4009eea23ceaddc93" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "8 - verify custom secp256k1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "verify_custom_secp256k1_signature", + "arguments": [ + "0x04e32df42865e97135acfb65f3bae71bdc86f4d49150ad6a440b6f15878109880a0a2b2667f7e725ceea70c673093bf67663e0312623c8e091b13cf2c0f11ef652", + "0xce0677bb30baa8cf067c88db9811f4333d131bf8bcf12fe7065d211dce971008", + "0x304502210090f27b8b488db00b00606796d2987f6a5f59ae62ea05effe84fef5b8b0e5499802204a691139ad57a3f0b906637673aa2f63d1f55cb1a69199d4009eea23ceaddc93", + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_array_u8.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_array_u8.scen.json new file mode 100644 index 000000000..51b779c8d --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_array_u8.scen.json @@ -0,0 +1,82 @@ +{ + "name": "echo_array_u8", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_array_u8", + "arguments": [ + "0x0102030405" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x0102030405" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_array_u8", + "arguments": [ + "0x010203" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:argument decode error (s): input too short", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "2", + "balance": "0", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_arrayvec.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_arrayvec.scen.json new file mode 100644 index 000000000..c77d3eda3 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_arrayvec.scen.json @@ -0,0 +1,78 @@ +{ + "name": "echo_arrayvec", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_arrayvec", + "arguments": [ + [ + "u32:5", + "u32:6", + "u32:7" + ] + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + [ + "u32:5", + "u32:6", + "u32:7" + ] + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_arrayvec", + "arguments": [ + [ + "u32:5", + "u32:6", + "u32:7", + "u32:8" + ] + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:argument decode error (av): capacity exceeded", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_big_int_nested.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_big_int_nested.scen.json new file mode 100644 index 000000000..d7e2e01a5 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_big_int_nested.scen.json @@ -0,0 +1,106 @@ +{ + "name": "echo_big_int", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int_managed_vec", + "arguments": [ + "nested:+3|nested:+5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "nested:+3|nested:+5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int_tuple", + "arguments": [ + "nested:+3|nested:+5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "nested:+3|nested:+5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int_option", + "arguments": [ + "0x01|nested:+3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01|nested:+3" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_big_int_top.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_big_int_top.scen.json new file mode 100644 index 000000000..da9406582 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_big_int_top.scen.json @@ -0,0 +1,244 @@ +{ + "name": "echo_big_int", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "-3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xfd" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "4", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "0x010000000000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x010000000000000000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "5", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "0xffffffffffffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "6", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "0x7fffffffffffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x7fffffffffffffff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "7", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "+9223372036854775808" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "+9223372036854775808" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "8", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "-9223372036854775809" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "-9223372036854775809" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "9-zero", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_int", + "arguments": [ + "0x00" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_big_uint.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_big_uint.scen.json new file mode 100644 index 000000000..480111ebb --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_big_uint.scen.json @@ -0,0 +1,152 @@ +{ + "name": "echo_big_uint", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_uint", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_uint", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_uint", + "arguments": [ + "0xc8" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xc8" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "4", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_uint", + "arguments": [ + "0xffffffffffffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xffffffffffffffff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "5", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_big_uint", + "arguments": [ + "0x010000000000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x010000000000000000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_i32.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_i32.scen.json new file mode 100644 index 000000000..bf5756631 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_i32.scen.json @@ -0,0 +1,218 @@ +{ + "name": "echo_i32", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i32", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i32", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i32", + "arguments": [ + "-3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xfd" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "4", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i32", + "arguments": [ + "0x010000000000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "*", + "message": "str:argument out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "5", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i32", + "arguments": [ + "0xffffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "6", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i32", + "arguments": [ + "0x7fffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x7fffffff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "7", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i32", + "arguments": [ + "+2147483648" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:argument decode error (i): input out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "8", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i32", + "arguments": [ + "-2147483649" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:argument decode error (i): input out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "8", + "balance": "0", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_i64.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_i64.scen.json new file mode 100644 index 000000000..5f5693393 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_i64.scen.json @@ -0,0 +1,241 @@ +{ + "name": "echo_i64", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "-3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xfd" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "4", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "0x010000000000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "*", + "message": "str:argument out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "5", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "0xffffffffffffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "6", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "0x7fffffffffffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x7fffffffffffffff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "7", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "+9223372036854775808" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "*", + "message": "str:argument out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "8", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "-9223372036854775809" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "*", + "message": "str:argument out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "9-zero", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_i64", + "arguments": [ + "0x00" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_ignore.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_ignore.scen.json new file mode 100644 index 000000000..e53e7b4fe --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_ignore.scen.json @@ -0,0 +1,94 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_some_args_ignore_others", + "arguments": [ + "1" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_some_args_ignore_others", + "arguments": [ + "1", + "2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1", + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_some_args_ignore_others", + "arguments": [ + "1", + "2", + "3", + "str:more", + "str:even more!" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1", + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_managed_async_result_empty.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_managed_async_result_empty.scen.json new file mode 100644 index 000000000..a3e1167c7 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_managed_async_result_empty.scen.json @@ -0,0 +1,86 @@ +{ + "name": "echo_managed_async_result_empty", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1-ok", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_managed_async_result_empty", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2-err", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_managed_async_result_empty", + "arguments": [ + "5", + "str:message" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:message", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2-err-no-message", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_managed_async_result_empty", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_managed_bytes.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_managed_bytes.scen.json new file mode 100644 index 000000000..88dbe4b8c --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_managed_bytes.scen.json @@ -0,0 +1,72 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "echo_managed_address", + "arguments": [ + "address:a1" + ] + }, + "expect": { + "out": [ + "address:a1" + ], + "status": "" + } + }, + { + "step": "scQuery", + "id": "address-eq", + "tx": { + "to": "sc:basic-features", + "function": "managed_address_eq", + "arguments": [ + "address:a1", + "address:a1" + ] + }, + "expect": { + "out": [ + "true" + ], + "status": "" + } + }, + { + "step": "scQuery", + "id": "address-not-eq", + "tx": { + "to": "sc:basic-features", + "function": "managed_address_eq", + "arguments": [ + "address:a1", + "address:a2" + ] + }, + "expect": { + "out": [ + "false" + ], + "status": "" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_managed_vec.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_managed_vec.scen.json new file mode 100644 index 000000000..aca55e146 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_managed_vec.scen.json @@ -0,0 +1,122 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "echo_managed_vec_of_managed_vec", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_managed_vec_of_managed_vec", + "arguments": [ + [ + "u32:3", + [ + "u32:1", + "u32:2", + "u32:3" + ], + "u32:0", + "u32:2", + [ + "u32:5", + "u32:6" + ] + ] + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + [ + "u32:3", + [ + "u32:1", + "u32:2", + "u32:3" + ], + "u32:0", + "u32:2", + [ + "u32:5", + "u32:6" + ] + ] + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "echo_managed_vec_of_managed_vec-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_managed_vec_of_managed_vec", + "arguments": [ + [] + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + [] + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "echo_managed_vec_of_token_identifier", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_managed_vec_of_token_identifier", + "arguments": [ + [ + "nested:str:TOKENA-1234", + "nested:str:EGLD", + "nested:str:TOKENB-1234" + ] + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + [ + "nested:str:TOKENA-1234", + "nested:str:EGLD", + "nested:str:TOKENB-1234" + ] + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_multi_value_tuples.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_multi_value_tuples.scen.json new file mode 100644 index 000000000..bf91b3835 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_multi_value_tuples.scen.json @@ -0,0 +1,93 @@ +{ + "name": "echo_multi_value_tuples", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_multi_value_tuples", + "arguments": [ + "10", + "20", + "30", + "40" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "10", + "20", + "30", + "40" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_multi_value_tuples", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "comment": "only even number of arguments possible", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_multi_value_tuples", + "arguments": [ + "10", + "20", + "30" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:argument decode error (var args): too few arguments", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_nothing.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_nothing.scen.json new file mode 100644 index 000000000..5d1193679 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_nothing.scen.json @@ -0,0 +1,39 @@ +{ + "name": "echo_nothing", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_nothing", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_tuple_into_multiresult.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_tuple_into_multiresult.scen.json new file mode 100644 index 000000000..65f186f6c --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_tuple_into_multiresult.scen.json @@ -0,0 +1,70 @@ +{ + "name": "echo tuple into multiresult", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_tuple_into_multiresult", + "arguments": [ + "address:an_account", + "nested:str:some_str|nested:str:other_str" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "address:an_account", + "nested:str:some_str|nested:str:other_str" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_tuple_into_multiresult", + "arguments": [ + "address:an_account", + "" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "address:an_account", + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_u64.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_u64.scen.json new file mode 100644 index 000000000..925789254 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_u64.scen.json @@ -0,0 +1,151 @@ +{ + "name": "echo_u64", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_u64", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_u64", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_u64", + "arguments": [ + "0xc8" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xc8" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "4", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_u64", + "arguments": [ + "0xffffffffffffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xffffffffffffffff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "5", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_u64", + "arguments": [ + "0x010000000000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "*", + "message": "str:argument out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_usize.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_usize.scen.json new file mode 100644 index 000000000..d99b969f2 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_usize.scen.json @@ -0,0 +1,151 @@ +{ + "name": "echo_usize", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_usize", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_usize", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_usize", + "arguments": [ + "0xc8" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xc8" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "4", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_usize", + "arguments": [ + "0xffffffff" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0xffffffff" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "5", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_usize", + "arguments": [ + "0x0100000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:argument decode error (i): input too long", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_varargs_managed_eager.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_varargs_managed_eager.scen.json new file mode 100644 index 000000000..d66af41a8 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_varargs_managed_eager.scen.json @@ -0,0 +1,68 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_varags_managed_eager", + "arguments": [ + "10", + "20", + "30" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3", + "10", + "20", + "30" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_varags_managed_eager", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_varargs_managed_sum.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_varargs_managed_sum.scen.json new file mode 100644 index 000000000..ece4592cf --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_varargs_managed_sum.scen.json @@ -0,0 +1,94 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_varags_managed_sum", + "arguments": [ + "1", + "2", + "40", + "50" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1", + "2", + "3", + "40", + "50", + "90" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_varags_managed_sum", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "1", + "comment": "only even number of arguments possible", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_varags_managed_sum", + "arguments": [ + "10", + "20", + "30" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:argument decode error (var args): too few arguments", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/echo_varargs_u32.scen.json b/test/features/basic-features-ei-1-3/scenarios/echo_varargs_u32.scen.json new file mode 100644 index 000000000..55b1eb47c --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/echo_varargs_u32.scen.json @@ -0,0 +1,68 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_multi_value_u32", + "arguments": [ + "10", + "20", + "30" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3", + "10", + "20", + "30" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "echo_multi_value_u32", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/events.scen.json b/test/features/basic-features-ei-1-3/scenarios/events.scen.json new file mode 100644 index 000000000..3f299401b --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/events.scen.json @@ -0,0 +1,176 @@ +{ + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "A1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "logEventA", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": [ + { + "address": "sc:basic-features", + "endpoint": "str:logEventA", + "topics": [ + "str:event_a" + ], + "data": [ + "0" + ] + } + ], + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "logEventARepeat", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "logEventARepeat", + "arguments": [ + "3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": [ + { + "address": "sc:basic-features", + "endpoint": "str:logEventARepeat", + "topics": [ + "str:event_a" + ], + "data": [ + "0" + ] + }, + { + "address": "*", + "endpoint": "str:logEventARepeat", + "topics": [ + "str:event_a" + ], + "data": [ + "1" + ] + }, + { + "address": "sc:basic-features", + "endpoint": "str:logEventARepeat", + "topics": [ + "str:event_a" + ], + "data": [ + "2" + ] + } + ], + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "logEventARepeat", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "logEventARepeat", + "arguments": [ + "3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": [ + { + "address": "sc:basic-features", + "endpoint": "str:logEventARepeat", + "topics": [ + "str:event_a" + ], + "data": [ + "0" + ] + }, + "+" + ], + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "B1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "logEventB", + "arguments": [ + "0xa1", + "str:arg2_an_address_______________s3", + "1", + "2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": [ + { + "address": "sc:basic-features", + "endpoint": "str:logEventB", + "topics": [ + "str:event_b", + "0xa1", + "str:arg2_an_address_______________s3" + ], + "data": [ + [ + "biguint:1", + "biguint:2" + ] + ] + } + ], + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/get_caller.scen.json b/test/features/basic-features-ei-1-3/scenarios/get_caller.scen.json new file mode 100644 index 000000000..9e659b2bf --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/get_caller.scen.json @@ -0,0 +1,59 @@ +{ + "name": "get caller", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "get_caller", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_caller", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "address:an_account" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scQuery", + "id": "get_caller_query", + "tx": { + "to": "sc:basic-features", + "function": "get_caller", + "arguments": [] + }, + "expect": { + "out": [ + "sc:basic-features" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/get_code_metadata.scen.json b/test/features/basic-features-ei-1-3/scenarios/get_code_metadata.scen.json new file mode 100644 index 000000000..e60601f35 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/get_code_metadata.scen.json @@ -0,0 +1,90 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json", + "codeMetadata": "0x0104" + }, + "sc:basic-features-2": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json", + "codeMetadata": "0x0100" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "get_code_metadata", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_code_metadata", + "arguments": [ + "sc:basic-features" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x0104" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_code_metadata-2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_code_metadata", + "arguments": [ + "sc:basic-features-2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x0100" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_code_metadata-missing-address", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_code_metadata", + "arguments": [ + "sc:missing" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:account not found: 000000000000000005006d697373696e675f5f5f5f5f5f5f5f5f5f5f5f5f5f5f" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/get_cumulated_validator_rewards.scen.json b/test/features/basic-features-ei-1-3/scenarios/get_cumulated_validator_rewards.scen.json new file mode 100644 index 000000000..8fae02059 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/get_cumulated_validator_rewards.scen.json @@ -0,0 +1,99 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:viewer": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "0", + "tx": { + "from": "address:viewer", + "to": "sc:basic-features", + "function": "get_cumulated_validator_rewards", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "validatorReward", + "id": "validatorReward-1", + "tx": { + "to": "sc:basic-features", + "egldValue": "100,000,000" + } + }, + { + "step": "scCall", + "id": "0", + "tx": { + "from": "address:viewer", + "to": "sc:basic-features", + "function": "get_cumulated_validator_rewards", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "100,000,000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "validatorReward", + "id": "validatorReward-1", + "tx": { + "to": "sc:basic-features", + "egldValue": "300" + } + }, + { + "step": "scCall", + "id": "0", + "tx": { + "from": "address:viewer", + "to": "sc:basic-features", + "function": "get_cumulated_validator_rewards", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "100,000,300" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/get_shard_of_address.scen.json b/test/features/basic-features-ei-1-3/scenarios/get_shard_of_address.scen.json new file mode 100644 index 000000000..1aaf83861 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/get_shard_of_address.scen.json @@ -0,0 +1,63 @@ +{ + "name": "get caller", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "get_shard_of_address", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_shard_of_address", + "arguments": [ + "sc:basic-features" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scQuery", + "id": "get_shard_of_address_query", + "tx": { + "to": "sc:basic-features", + "function": "get_shard_of_address", + "arguments": [ + "sc:basic-features" + ] + }, + "expect": { + "out": [ + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/is_builtin_function.scen.json b/test/features/basic-features-ei-1-3/scenarios/is_builtin_function.scen.json new file mode 100644 index 000000000..dde9bc888 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/is_builtin_function.scen.json @@ -0,0 +1,65 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json", + "codeMetadata": "0x0104" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "is builtin function - true", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "is_builtin_function", + "arguments": [ + "str:ESDTTransfer" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "is builtin function - false", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "is_builtin_function", + "arguments": [ + "str:anyFunction" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/managed_address_array.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_address_array.scen.json new file mode 100644 index 000000000..ac0810369 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/managed_address_array.scen.json @@ -0,0 +1,50 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "maddress_from_array", + "arguments": [ + "address:an_account" + ] + }, + "expect": { + "out": [ + "address:an_account" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "maddress_from_array", + "arguments": [ + "address:an_account|u32:123" + ] + }, + "expect": { + "out": [], + "status": "4", + "message": "str:argument decode error (array): input too long" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/managed_address_managed_buffer.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_address_managed_buffer.scen.json new file mode 100644 index 000000000..0b8af730e --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/managed_address_managed_buffer.scen.json @@ -0,0 +1,50 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "maddress_from_managed_buffer", + "arguments": [ + "address:an_account" + ] + }, + "expect": { + "out": [ + "address:an_account" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "maddress_from_managed_buffer", + "arguments": [ + "address:an_account|u32:123" + ] + }, + "expect": { + "out": [], + "status": "4", + "message": "str:bad array length" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/managed_buffer_concat.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_buffer_concat.scen.json new file mode 100644 index 000000000..2b3a866b4 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/managed_buffer_concat.scen.json @@ -0,0 +1,86 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_concat", + "arguments": [ + "str:abc", + "str:def" + ] + }, + "expect": { + "out": [ + "str:abcdef" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_concat", + "arguments": [ + "", + "str:def" + ] + }, + "expect": { + "out": [ + "str:def" + ] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_concat", + "arguments": [ + "str:abc", + "" + ] + }, + "expect": { + "out": [ + "str:abc" + ] + } + }, + { + "step": "scQuery", + "id": "4", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_concat", + "arguments": [ + "", + "" + ] + }, + "expect": { + "out": [ + "" + ] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/managed_buffer_copy_slice.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_buffer_copy_slice.scen.json new file mode 100644 index 000000000..52ff3bcbf --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/managed_buffer_copy_slice.scen.json @@ -0,0 +1,104 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_copy_slice", + "arguments": [ + "str:abcdef", + "0", + "3" + ] + }, + "expect": { + "out": [ + "str:abc" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_copy_slice", + "arguments": [ + "str:abcdef", + "3", + "3" + ] + }, + "expect": { + "out": [ + "str:def" + ] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_copy_slice", + "arguments": [ + "str:abcdef", + "3", + "4" + ] + }, + "expect": { + "out": [] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_copy_slice", + "arguments": [ + "", + "0", + "0" + ] + }, + "expect": { + "out": [ + "" + ] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_copy_slice", + "arguments": [ + "", + "0", + "1" + ] + }, + "expect": { + "out": [] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/managed_buffer_eq.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_buffer_eq.scen.json new file mode 100644 index 000000000..823abd84e --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/managed_buffer_eq.scen.json @@ -0,0 +1,103 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_eq", + "arguments": [ + "str:abcdef", + "str:abcdef" + ] + }, + "expect": { + "out": [ + "true" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_eq", + "arguments": [ + "str:abcdef", + "str:abcdeg" + ] + }, + "expect": { + "out": [ + "false" + ] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_eq", + "arguments": [ + "", + "" + ] + }, + "expect": { + "out": [ + "true" + ] + } + }, + { + "step": "scQuery", + "id": "4", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_eq", + "arguments": [ + "str:x", + "" + ] + }, + "expect": { + "out": [ + "false" + ] + } + }, + { + "step": "scQuery", + "id": "5", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_eq", + "arguments": [ + "", + "str:x" + ] + }, + "expect": { + "out": [ + "false" + ] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/managed_buffer_set_random.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_buffer_set_random.scen.json new file mode 100644 index 000000000..52d73f9ac --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/managed_buffer_set_random.scen.json @@ -0,0 +1,66 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_set_random", + "arguments": [ + "4" + ] + }, + "expect": { + "out": [ + "0x4788781f" + ] + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_set_random", + "arguments": [ + "8" + ] + }, + "expect": { + "out": [ + "0x4788781f3960d577" + ] + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "mbuffer_set_random", + "arguments": [ + "16" + ] + }, + "expect": { + "out": [ + "0x4788781f3960d577c0d696621996458b" + ] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/managed_vec_address_push.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_vec_address_push.scen.json new file mode 100644 index 000000000..eb5b33c45 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/managed_vec_address_push.scen.json @@ -0,0 +1,52 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_address_push", + "arguments": [ + "address:a1", + "address:a2" + ] + }, + "expect": { + "out": [ + "address:a1|address:a2" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_address_push", + "arguments": [ + "", + "address:a2" + ] + }, + "expect": { + "out": [ + "address:a2" + ] + } + } + ] +} diff --git a/test/features/basic-features/scenarios/managed_vec_array_push.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_vec_array_push.scen.json similarity index 100% rename from test/features/basic-features/scenarios/managed_vec_array_push.scen.json rename to test/features/basic-features-ei-1-3/scenarios/managed_vec_array_push.scen.json diff --git a/test/features/basic-features-ei-1-3/scenarios/managed_vec_biguint_push.scen.json b/test/features/basic-features-ei-1-3/scenarios/managed_vec_biguint_push.scen.json new file mode 100644 index 000000000..0d3ef768e --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/managed_vec_biguint_push.scen.json @@ -0,0 +1,256 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "1", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_biguint_push", + "arguments": [ + "biguint:1", + "2" + ] + }, + "expect": { + "out": [ + "biguint:1|biguint:2" + ] + } + }, + { + "step": "scQuery", + "id": "2", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_biguint_push", + "arguments": [ + "", + "2" + ] + }, + "expect": { + "out": [ + "biguint:2" + ] + } + }, + { + "step": "scQuery", + "id": "3", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_biguint_push", + "arguments": [ + "biguint:1", + "" + ] + }, + "expect": { + "out": [ + "biguint:1|biguint:0" + ] + } + }, + { + "step": "scQuery", + "id": "4", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_biguint_push", + "arguments": [ + "", + "" + ] + }, + "expect": { + "out": [ + "biguint:0" + ] + } + }, + { + "step": "scQuery", + "id": "5", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_remove", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "0" + ] + }, + "expect": { + "out": [ + "biguint:2|biguint:3" + ] + } + }, + { + "step": "scQuery", + "id": "6", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_remove", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "1" + ] + }, + "expect": { + "out": [ + "biguint:1|biguint:3" + ] + } + }, + { + "step": "scQuery", + "id": "7", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_remove", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "2" + ] + }, + "expect": { + "out": [ + "biguint:1|biguint:2" + ] + } + }, + { + "step": "scQuery", + "id": "8", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_remove", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "3" + ] + }, + "expect": { + "out": [], + "status": "4", + "message": "str:ManagedVec index out of range" + } + }, + { + "step": "scQuery", + "id": "9", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_find", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "1" + ] + }, + "expect": { + "out": [ + "u8:1|u32:0" + ] + } + }, + { + "step": "scQuery", + "id": "10", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_find", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "2" + ] + }, + "expect": { + "out": [ + "u8:1|u32:1" + ] + } + }, + { + "step": "scQuery", + "id": "11", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_find", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "3" + ] + }, + "expect": { + "out": [ + "u8:1|u32:2" + ] + } + }, + { + "step": "scQuery", + "id": "12", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_find", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "4" + ] + }, + "expect": { + "out": [ + "0x" + ] + } + }, + { + "step": "scQuery", + "id": "13", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_contains", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "3" + ] + }, + "expect": { + "out": [ + "true" + ] + } + }, + { + "step": "scQuery", + "id": "14", + "tx": { + "to": "sc:basic-features", + "function": "managed_vec_contains", + "arguments": [ + "biguint:1|biguint:2|biguint:3", + "4" + ] + }, + "expect": { + "out": [ + "false" + ] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/new_address.scen.json b/test/features/basic-features-ei-1-3/scenarios/new_address.scen.json new file mode 100644 index 000000000..a37eb2db3 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/new_address.scen.json @@ -0,0 +1,48 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scDeploy", + "id": "deploy", + "tx": { + "from": "address:an_account", + "contractCode": "mxsc:../output/basic-features.mxsc.json", + "arguments": [], + "gasLimit": "200,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": [], + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "address:an_account": { + "nonce": "*", + "balance": "0", + "storage": {}, + "code": "" + }, + "0x0000000000000000050011111111616e5f6163636f756e745f5f5f5f5f005f5f": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/only_owner.scen.json b/test/features/basic-features-ei-1-3/scenarios/only_owner.scen.json new file mode 100644 index 000000000..cb977da24 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/only_owner.scen.json @@ -0,0 +1,89 @@ +{ + "name": "only_owner", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "address:owner": { + "nonce": "0", + "balance": "0" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + }, + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json", + "owner": "address:owner" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "only_owner_endpoint", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Endpoint can only be called by owner", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:owner", + "to": "sc:basic-features", + "function": "only_owner_endpoint", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "address:owner": { + "nonce": "1", + "balance": "0", + "storage": {}, + "code": "" + }, + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json", + "owner": "address:owner" + }, + "address:an_account": { + "nonce": "1", + "balance": "0", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/only_user_account.scen.json b/test/features/basic-features-ei-1-3/scenarios/only_user_account.scen.json new file mode 100644 index 000000000..c7ee531d3 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/only_user_account.scen.json @@ -0,0 +1,65 @@ +{ + "name": "only_owner", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "address:user": { + "nonce": "0", + "balance": "0" + }, + "sc:evil-caller-sc": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:user", + "to": "sc:basic-features", + "function": "only_user_account_endpoint", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "sc:evil-caller-sc", + "to": "sc:basic-features", + "function": "only_user_account_endpoint", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Endpoint can only be called by user accounts", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/out_of_gas.scen.json b/test/features/basic-features-ei-1-3/scenarios/out_of_gas.scen.json new file mode 100644 index 000000000..b7c9dd2c1 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/out_of_gas.scen.json @@ -0,0 +1,43 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "oog", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_map3", + "arguments": [ + "0x57", + "true" + ], + "gasLimit": "100", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "5", + "message": "str:not enough gas", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/panic.scen.json b/test/features/basic-features-ei-1-3/scenarios/panic.scen.json new file mode 100644 index 000000000..b3031c6fe --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/panic.scen.json @@ -0,0 +1,57 @@ +{ + "name": "panic", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "panicWithMessage", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0x04", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "1", + "balance": "0", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/return_codes.scen.json b/test/features/basic-features-ei-1-3/scenarios/return_codes.scen.json new file mode 100644 index 000000000..0f15a7d16 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/return_codes.scen.json @@ -0,0 +1,39 @@ +{ + "name": "return_codes", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "call-a-function-which-does-not-exist", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "function_which_does_not_exist", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "1", + "message": "str:invalid function (not found)", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/sc_properties.scen.json b/test/features/basic-features-ei-1-3/scenarios/sc_properties.scen.json new file mode 100644 index 000000000..658566418 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/sc_properties.scen.json @@ -0,0 +1,143 @@ +{ + "name": "smart contract properties: is_smart_contract, owner, more to follow", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json", + "owner": "address:someone_else" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + }, + "newAddresses": [ + { + "creatorAddress": "address:an_account", + "creatorNonce": "0", + "newAddress": "sc:also-features-contract" + } + ] + }, + { + "step": "scQuery", + "id": "is_smart_contract", + "tx": { + "to": "sc:basic-features", + "function": "is_smart_contract", + "arguments": [ + "address:an_account" + ] + }, + "expect": { + "out": [ + "false" + ] + } + }, + { + "step": "scQuery", + "id": "is_smart_contract", + "tx": { + "to": "sc:basic-features", + "function": "is_smart_contract", + "arguments": [ + "sc:basic-features" + ] + }, + "expect": { + "out": [ + "true" + ] + } + }, + { + "step": "scQuery", + "id": "get_owner_address", + "tx": { + "to": "sc:basic-features", + "function": "get_owner_address", + "arguments": [] + }, + "expect": { + "out": [ + "address:someone_else" + ] + } + }, + { + "step": "scDeploy", + "id": "1", + "tx": { + "from": "address:an_account", + "contractCode": "mxsc:../output/basic-features.mxsc.json", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [] + } + }, + { + "step": "scQuery", + "id": "is_smart_contract_deployed", + "tx": { + "to": "sc:basic-features", + "function": "is_smart_contract", + "arguments": [ + "sc:also-features-contract" + ] + }, + "expect": { + "out": [ + "true" + ] + } + }, + { + "step": "scQuery", + "id": "get_owner_address", + "tx": { + "to": "sc:also-features-contract", + "function": "get_owner_address", + "arguments": [] + }, + "expect": { + "out": [ + "address:an_account" + ] + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json", + "owner": "address:someone_else" + }, + "address:an_account": { + "nonce": "1", + "balance": "0", + "storage": {}, + "code": "" + }, + "sc:also-features-contract": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json", + "owner": "address:an_account" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/small_num_overflow.scen.json b/test/features/basic-features-ei-1-3/scenarios/small_num_overflow.scen.json new file mode 100644 index 000000000..d81ffc530 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/small_num_overflow.scen.json @@ -0,0 +1,430 @@ +{ + "name": "overflow", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "no_overflow_u8", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_u8", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_u8", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_u8", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_i8", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_i8", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_i8", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_i8", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "-2" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_u16", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_u16", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_u16", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_u16", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_i16", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_i16", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_i16", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_i16", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "-2" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_u32", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_u32", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_u32", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_u32", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_i32", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_i32", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_i32", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_i32", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "-2" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_u64", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_u64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_u64", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_u64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_i64", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_i64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_i64", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_i64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "-2" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_usize", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_usize", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_usize", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_usize", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "no_overflow_isize", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "no_overflow_isize", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:panic occurred", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "overflow_isize", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "overflow_isize", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "-2" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_big_int.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_big_int.scen.json new file mode 100644 index 000000000..4f2e6f23e --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_big_int.scen.json @@ -0,0 +1,142 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_big_int", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:big_int": "123" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_big_int", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_big_int", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:big_int": "0" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_big_int", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_big_uint.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_big_uint.scen.json new file mode 100644 index 000000000..e2896b0e1 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_big_uint.scen.json @@ -0,0 +1,142 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_big_uint", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:big_uint": "123" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_big_uint", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_big_uint", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:big_uint": "0" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_big_uint", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_bool.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_bool.scen.json new file mode 100644 index 000000000..1d8f9fda3 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_bool.scen.json @@ -0,0 +1,142 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_bool", + "arguments": [ + "true" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:bool": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_bool", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_bool", + "arguments": [ + "false" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:bool": "false" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_bool", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "false" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_clear.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_clear.scen.json new file mode 100644 index 000000000..9b844953f --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_clear.scen.json @@ -0,0 +1,80 @@ +{ + "name": "storage clear test", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:nr_to_clear": "42" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "check-initial-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_nr_to_clear", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "42" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "clear val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "clear_storage_value", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "2", + "balance": "0", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_i64.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_i64.scen.json new file mode 100644 index 000000000..d9f3bc0ec --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_i64.scen.json @@ -0,0 +1,142 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_i64", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:i64": "123" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_i64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_i64", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:i64": "0" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_i64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_i64_bad.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_i64_bad.scen.json new file mode 100644 index 000000000..74ae9f7bf --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_i64_bad.scen.json @@ -0,0 +1,43 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:i64": "0x008000000000000000" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_i64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "*", + "message": "str:storage decode error: input too long", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_load_from_address.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_load_from_address.scen.json new file mode 100644 index 000000000..300113dc1 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_load_from_address.scen.json @@ -0,0 +1,76 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:external-contract": { + "nonce": "0", + "balance": "0", + "storage": { + "str:external-key": "str:external-value" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "load_from_address_raw_ok", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_from_address_raw", + "arguments": [ + "sc:external-contract", + "str:external-key" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "str:external-value" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "load_from_address_raw_wrong_address", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_from_address_raw", + "arguments": [ + "sc:basic-features", + "str:external-key" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_managed_address.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_managed_address.scen.json new file mode 100644 index 000000000..deb20bc06 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_managed_address.scen.json @@ -0,0 +1,81 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_addr", + "arguments": [ + "str:____________address_____________" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:addr": "str:____________address_____________" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_addr", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "str:____________address_____________" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_map1.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_map1.scen.json new file mode 100644 index 000000000..95afef927 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_map1.scen.json @@ -0,0 +1,148 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_map1", + "arguments": [ + "str:__________address_1_____________", + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map1__________address_1_____________": "123" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_map1", + "arguments": [ + "str:__________address_1_____________" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_map1", + "arguments": [ + "str:__________address_1_____________", + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map1__________address_1_____________": "0" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_map1", + "arguments": [ + "str:__________address_1_____________" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_map2.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_map2.scen.json new file mode 100644 index 000000000..26e36e4f9 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_map2.scen.json @@ -0,0 +1,152 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_map2", + "arguments": [ + "str:__________address_1_____________", + "str:__________address_2_____________", + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map2|str:__________address_1_____________|str:__________address_2_____________": "123" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_map2", + "arguments": [ + "str:__________address_1_____________", + "str:__________address_2_____________" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_map2", + "arguments": [ + "str:__________address_1_____________", + "str:__________address_2_____________", + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map2|str:__________address_1_____________|str:__________address_2_____________": "0" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_map2", + "arguments": [ + "str:__________address_1_____________", + "str:__________address_2_____________" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_map3.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_map3.scen.json new file mode 100644 index 000000000..0dcaee928 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_map3.scen.json @@ -0,0 +1,148 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_map3", + "arguments": [ + "0x57", + "true" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map3|0x00000057": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_map3", + "arguments": [ + "0x57" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_map3", + "arguments": [ + "0x57", + "false" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map3|0x00000057": "false" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_map3", + "arguments": [ + "0x57" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "false" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_address_to_id.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_address_to_id.scen.json new file mode 100644 index 000000000..91493a8d0 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_address_to_id.scen.json @@ -0,0 +1,209 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "get_id_or_insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "address_to_id_mapper_get_id_or_insert", + "arguments": [ + "address:an_account" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_id", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "address_to_id_mapper_get_id", + "arguments": [ + "address:an_account" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_id_non_zero", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "address_to_id_mapper_get_id_non_zero", + "arguments": [ + "address:an_account" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get_address", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "address_to_id_mapper_get_address", + "arguments": [ + "1" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1|address:an_account" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "contains", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "address_to_id_mapper_contains", + "arguments": [ + "1" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "remove_by_id", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "address_to_id_mapper_remove_by_id", + "arguments": [ + "1" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1|address:an_account" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "set", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "address_to_id_mapper_set", + "arguments": [ + "address:an_account" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "remove_by_address", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "address_to_id_mapper_remove_by_address", + "arguments": [ + "address:an_account" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_fungible_token.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_fungible_token.scen.json new file mode 100644 index 000000000..190b33f2a --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_fungible_token.scen.json @@ -0,0 +1,797 @@ +{ + "name": "storage", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "100" + }, + "0x000000000000000000010000000000000000000000000000000000000002ffff": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + }, + "str:TICKER-222222": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "code": "mxsc:../../esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "issue-default-callback-non-zero-initial-supply", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "issue_fungible_default_callback", + "arguments": [ + "str:TICKER", + "1000" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": "1000" + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-000000" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*" + }, + "0x000000000000000000010000000000000000000000000000000000000002ffff": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + }, + "str:TICKER-222222": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "storage": { + "str:nrIssuedTokens": "1" + }, + "code": "mxsc:../../esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json" + } + } + }, + { + "step": "setState", + "comment": "reset the token ID so we can issue again", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": "1000" + }, + "storage": { + "str:fungibleTokenMapper": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "issue-default-callback-zero-initial-supply", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "issue_fungible_default_callback", + "arguments": [ + "str:TICKER", + "0" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "str:TICKER-111111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": "1000" + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-111111" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*" + }, + "0x000000000000000000010000000000000000000000000000000000000002ffff": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + }, + "str:TICKER-222222": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "storage": { + "str:nrIssuedTokens": "2" + }, + "code": "mxsc:../../esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json" + } + } + }, + { + "step": "setState", + "comment": "reset the token ID so we can issue again", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": "1000" + }, + "storage": { + "str:fungibleTokenMapper": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "issue-custom-callback-non-zero-initial-supply", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "issue_fungible_custom_callback", + "arguments": [ + "str:TICKER", + "2000" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": "1000", + "str:TICKER-222222": "2000" + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-222222" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*" + }, + "0x000000000000000000010000000000000000000000000000000000000002ffff": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + }, + "str:TICKER-222222": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "storage": { + "str:nrIssuedTokens": "3" + }, + "code": "mxsc:../../esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json" + } + } + }, + { + "step": "setState", + "comment": "reset the token ID so we can issue again", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": "1000", + "str:TICKER-222222": "2000" + }, + "storage": { + "str:fungibleTokenMapper": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "issue-custom-callback-initial-supply", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "issue_fungible_custom_callback", + "arguments": [ + "str:TICKER", + "0" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "str:TICKER-333333" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": "1000", + "str:TICKER-222222": "2000" + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-333333" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*" + }, + "0x000000000000000000010000000000000000000000000000000000000002ffff": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + }, + "str:TICKER-222222": { + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "storage": { + "str:nrIssuedTokens": "4" + }, + "code": "mxsc:../../esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json" + } + } + }, + { + "step": "setState", + "comment": "set balance", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-333333": "3000" + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-333333" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "simulate-set-local-roles", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_local_roles_fungible", + "arguments": [], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-333333": "3000" + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-333333", + "str:rolesSet": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "+": "" + } + }, + { + "step": "setState", + "comment": "actually set roles", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-333333": { + "instances": [ + { + "nonce": "", + "balance": "3000" + } + ], + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-333333", + "str:rolesSet": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "mint-fungible", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "mint_fungible", + "arguments": [ + "1000" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "nested:str:TICKER-333333|u64:0|biguint:1000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-333333": { + "instances": [ + { + "nonce": "", + "balance": "4000" + } + ], + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-333333", + "str:rolesSet": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "+": "" + } + }, + { + "step": "scCall", + "id": "mint-and-send-fungible", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "mint_and_send_fungible", + "arguments": [ + "address:an_account", + "2000" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "nested:str:TICKER-333333|u64:0|biguint:2000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "address:an_account": { + "nonce": "*", + "balance": "100", + "esdt": { + "str:TICKER-333333": "2000" + } + }, + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-333333": { + "instances": [ + { + "nonce": "", + "balance": "4000" + } + ], + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-333333", + "str:rolesSet": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "+": "" + } + }, + { + "step": "scCall", + "id": "burn-fungible", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "burn_fungible", + "arguments": [ + "1000" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-333333": { + "instances": [ + { + "nonce": "", + "balance": "3000" + } + ], + "roles": [ + "ESDTRoleLocalMint", + "ESDTRoleLocalBurn" + ] + } + }, + "storage": { + "str:fungibleTokenMapper": "str:TICKER-333333", + "str:rolesSet": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "+": "" + } + }, + { + "step": "scCall", + "id": "get-balance-fungible-non-zero", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_balance_fungible", + "arguments": [], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "burn-all-fungible", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "burn_fungible", + "arguments": [ + "3000" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get-balance-fungible-zero", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "get_balance_fungible", + "arguments": [], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "require-same-fungible-token-success", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "esdtValue": [ + { + "tokenIdentifier": "str:TICKER-333333", + "value": "500" + } + ], + "function": "require_same_token_fungible", + "arguments": [], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "require-same-fungible-token-failed", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "egldValue": "100", + "function": "require_same_token_fungible", + "arguments": [], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:incorrect number of ESDT transfers", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "require-all-same-fungible-token-success", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "esdtValue": [ + { + "tokenIdentifier": "str:TICKER-333333", + "value": "100" + }, + { + "tokenIdentifier": "str:TICKER-333333", + "value": "100" + }, + { + "tokenIdentifier": "str:TICKER-333333", + "value": "100" + } + ], + "function": "require_all_same_token_fungible", + "arguments": [], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scQuery", + "id": "get-fungible-token-id", + "tx": { + "to": "sc:basic-features", + "function": "getFungibleTokenId", + "arguments": [] + }, + "expect": { + "out": [ + "str:TICKER-333333" + ], + "status": "0", + "message": "", + "logs": "*" + } + }, + { + "step": "setState", + "comment": "reset the token ID so we can issue again", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": "1000", + "str:TICKER-222222": "2000" + }, + "storage": { + "str:fungibleTokenMapper": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "issue-and-set-all-roles-fungible", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "issue_and_set_all_roles_fungible", + "arguments": [ + "str:TICKER" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "str:TICKER-444444" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_get_at_address.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_get_at_address.scen.json new file mode 100644 index 000000000..7577d8d5b --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_get_at_address.scen.json @@ -0,0 +1,157 @@ +{ + "name": "storage mapper get at address", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:caller": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:to-be-called": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "set contract address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "set_contract_address", + "arguments": [ + "sc:to-be-called" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "fill set mapper", + "tx": { + "from": "address:an_account", + "to": "sc:to-be-called", + "function": "fill_set_mapper", + "arguments": [ + "10" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:caller": { + "nonce": "0", + "balance": "0", + "storage": { + "str:contract_address": "sc:to-be-called" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:to-be-called": { + "nonce": "0", + "balance": "0", + "storage": "*", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "is empty at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "is_empty_at_address", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "contains at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "contains_at_address", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "len at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "len_at_address", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "10" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_linked_list.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_linked_list.scen.json new file mode 100644 index 000000000..29aef3246 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_linked_list.scen.json @@ -0,0 +1,727 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "before", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPushBack", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:list_mapper.node|u32:1": "u32:123|u32:1|u32:0|u32:0", + "str:list_mapper.info": "u32:1|u32:1|u32:1|u32:1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-list-after-first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "second-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPushBack", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-list-after-second-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123", + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "set-node-value", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperSetValue", + "arguments": [ + "1", + "500" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-list-after-set-value", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "500", + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "set-node-value-by-id", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperSetValueById", + "arguments": [ + "1", + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-list-after-set-value-back-to-original", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123", + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:list_mapper.node|u32:1": "u32:123|u32:1|u32:2|u32:0", + "str:list_mapper.node|u32:2": "u32:111|u32:2|u32:0|u32:1", + "str:list_mapper.info": "u32:2|u32:1|u32:2|u32:2" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-front-after-second-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperFront", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-pop-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPopFront", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:list_mapper.node|u32:2": "u32:111|u32:2|u32:0|u32:0", + "str:list_mapper.info": "u32:1|u32:2|u32:2|u32:2" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "second-pop-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPopFront", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-front-after-second-pop-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperFront", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "message": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPushBack", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPushAfter", + "arguments": [ + "1", + "6" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "6" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPushBefore", + "arguments": [ + "1", + "4" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "4" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPushFront", + "arguments": [ + "3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3", + "4", + "5", + "6" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperIterateByHand", + "arguments": [ + "4" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3", + "4", + "5", + "6" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperIterateByIter", + "arguments": [ + "4" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3", + "4", + "5", + "6" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperRemoveNode", + "arguments": [ + "1" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3", + "4", + "6" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPopFront", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "4", + "6" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperRemoveNodeById", + "arguments": [ + "2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "6" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "4" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "listMapperPopBack", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "4" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "getListMapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_map.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_map.scen.json new file mode 100644 index 000000000..e3ba28d22 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_map.scen.json @@ -0,0 +1,746 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "before", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_keys", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_insert", + "arguments": [ + "123", + "456" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.node_links|u32:1": "u32:0|u32:0", + "str:map_mapper.value|u32:1": "123", + "str:map_mapper.node_id|u32:123": "1", + "str:map_mapper.mapped|u32:123": "456", + "str:map_mapper.info": "u32:1|u32:1|u32:1|u32:1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-map-keys-after-first-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_keys", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-map-values-after-first-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_values", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "456" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_insert", + "arguments": [ + "111", + "222" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-map-keys-after-second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_keys", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123", + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-map-values-after-second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_values", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "456", + "222" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.node_links|u32:1": "u32:0|u32:2", + "str:map_mapper.node_links|u32:2": "u32:1|u32:0", + "str:map_mapper.value|u32:1": "123", + "str:map_mapper.value|u32:2": "111", + "str:map_mapper.node_id|u32:123": "1", + "str:map_mapper.node_id|u32:111": "2", + "str:map_mapper.mapped|u32:123": "456", + "str:map_mapper.mapped|u32:111": "222", + "str:map_mapper.info": "u32:2|u32:1|u32:2|u32:2" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scQuery", + "id": "check-map-key-value-pairs", + "tx": { + "to": "sc:basic-features", + "function": "map_mapper", + "arguments": [] + }, + "expect": { + "out": [ + "123", + "456", + "111", + "222" + ], + "status": "" + } + }, + { + "step": "scCall", + "id": "check-contains-after-second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_contains_key", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-remove", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_remove", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1|u32:456" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.node_links|u32:2": "u32:0|u32:0", + "str:map_mapper.value|u32:2": "111", + "str:map_mapper.node_id|u32:111": "2", + "str:map_mapper.mapped|u32:111": "222", + "str:map_mapper.info": "u32:1|u32:2|u32:2|u32:2" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "second-remove", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_remove", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1|u32:222" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-get-after-second-remove", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_get", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "entry or default for a non-existing item", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_entry_or_default_update_increment", + "arguments": [ + "123", + "50" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "50" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.info": "u32:1|u32:1|u32:1|u32:1", + "str:map_mapper.node_links|u32:1": "u32:0|u32:0", + "str:map_mapper.node_id|u32:123": "1", + "str:map_mapper.value|u32:1": "123", + "str:map_mapper.mapped|u32:123": "50" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "entry or default for the previously added item", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_entry_or_default_update_increment", + "arguments": [ + "123", + "42" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "92" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.info": "u32:1|u32:1|u32:1|u32:1", + "str:map_mapper.node_links|u32:1": "u32:0|u32:0", + "str:map_mapper.node_id|u32:123": "1", + "str:map_mapper.value|u32:1": "123", + "str:map_mapper.mapped|u32:123": "92" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "entry or insert default for an existing entry shouldn't change anything, only return its existing value", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_entry_or_insert_default", + "arguments": [ + "123", + "60" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "92" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.info": "u32:1|u32:1|u32:1|u32:1", + "str:map_mapper.node_links|u32:1": "u32:0|u32:0", + "str:map_mapper.node_id|u32:123": "1", + "str:map_mapper.value|u32:1": "123", + "str:map_mapper.mapped|u32:123": "92" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "entry or insert default for an non-existing entry should add it", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_entry_or_insert_default", + "arguments": [ + "142", + "60" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "60" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.info": "u32:2|u32:1|u32:2|u32:2", + "str:map_mapper.node_links|u32:1": "u32:0|u32:2", + "str:map_mapper.node_id|u32:123": "1", + "str:map_mapper.value|u32:1": "123", + "str:map_mapper.mapped|u32:123": "92", + "str:map_mapper.node_links|u32:2": "u32:1|u32:0", + "str:map_mapper.node_id|u32:142": "2", + "str:map_mapper.value|u32:2": "142", + "str:map_mapper.mapped|u32:142": "60" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "entry or modify should simply increment the value if it exists", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_entry_and_modify", + "arguments": [ + "123", + "5", + "400" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "97" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "entry or modify should set the value if the entry doesn't exist", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_entry_and_modify", + "arguments": [ + "167", + "5", + "400" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "400" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.info": "u32:3|u32:1|u32:3|u32:3", + "str:map_mapper.node_links|u32:1": "u32:0|u32:2", + "str:map_mapper.node_id|u32:123": "1", + "str:map_mapper.value|u32:1": "123", + "str:map_mapper.mapped|u32:123": "97", + "str:map_mapper.node_links|u32:2": "u32:1|u32:3", + "str:map_mapper.node_id|u32:142": "2", + "str:map_mapper.value|u32:2": "142", + "str:map_mapper.mapped|u32:142": "60", + "str:map_mapper.node_links|u32:3": "u32:2|u32:0", + "str:map_mapper.node_id|u32:167": "3", + "str:map_mapper.value|u32:3": "167", + "str:map_mapper.mapped|u32:167": "400" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "entry or insert with key should do nothing if the key already exists", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_entry_or_insert_with_key", + "arguments": [ + "123", + "1000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "97" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "entry or insert with key should add a new value if the key doesn't exist", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_mapper_entry_or_insert_with_key", + "arguments": [ + "78", + "1000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1078" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_mapper.info": "u32:4|u32:1|u32:4|u32:4", + "str:map_mapper.node_links|u32:1": "u32:0|u32:2", + "str:map_mapper.node_id|u32:123": "1", + "str:map_mapper.value|u32:1": "123", + "str:map_mapper.mapped|u32:123": "97", + "str:map_mapper.node_links|u32:2": "u32:1|u32:3", + "str:map_mapper.node_id|u32:142": "2", + "str:map_mapper.value|u32:2": "142", + "str:map_mapper.mapped|u32:142": "60", + "str:map_mapper.node_links|u32:3": "u32:2|u32:4", + "str:map_mapper.node_id|u32:167": "3", + "str:map_mapper.value|u32:3": "167", + "str:map_mapper.mapped|u32:167": "400", + "str:map_mapper.node_links|u32:4": "u32:3|u32:0", + "str:map_mapper.node_id|u32:78": "4", + "str:map_mapper.value|u32:4": "78", + "str:map_mapper.mapped|u32:78": "1078" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_map_storage.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_map_storage.scen.json new file mode 100644 index 000000000..4d5019014 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_map_storage.scen.json @@ -0,0 +1,741 @@ +{ + "name": "storage", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "before", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_view", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_insert_default", + "arguments": [ + "42" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-map-insert-value", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_insert_value", + "arguments": [ + "42", + "420", + "421" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + [] + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_storage_mapper.node_links|u32:1": "u32:0|u32:0", + "str:map_storage_mapper.value|u32:1": "42", + "str:map_storage_mapper.node_id|u32:42": "1", + "str:map_storage_mapper.info": "u32:1|u32:1|u32:1|u32:1", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:1": "u32:0|u32:0", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:1": "420", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:420": "1", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:420": "421", + "str:map_storage_mapper.storage|u32:42|str:.info": "u32:1|u32:1|u32:1|u32:1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-map-storage-after-first-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_view", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "42", + "420", + "421" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_insert_default", + "arguments": [ + "43" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "second-map-insert-value", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_insert_value", + "arguments": [ + "43", + "430", + "431" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + [] + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-map-storage-after-second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_view", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "42", + "420", + "421", + "43", + "430", + "431" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_storage_mapper.node_links|u32:1": "u32:0|u32:2", + "str:map_storage_mapper.node_links|u32:2": "u32:1|u32:0", + "str:map_storage_mapper.value|u32:1": "42", + "str:map_storage_mapper.value|u32:2": "43", + "str:map_storage_mapper.node_id|u32:42": "1", + "str:map_storage_mapper.node_id|u32:43": "2", + "str:map_storage_mapper.info": "u32:2|u32:1|u32:2|u32:2", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:1": "u32:0|u32:0", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:1": "420", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:420": "1", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:420": "421", + "str:map_storage_mapper.storage|u32:42|str:.info": "u32:1|u32:1|u32:1|u32:1", + "str:map_storage_mapper.storage|u32:43|str:.node_links|u32:1": "u32:0|u32:0", + "str:map_storage_mapper.storage|u32:43|str:.value|u32:1": "430", + "str:map_storage_mapper.storage|u32:43|str:.node_id|u32:430": "1", + "str:map_storage_mapper.storage|u32:43|str:.mapped|u32:430": "431", + "str:map_storage_mapper.storage|u32:43|str:.info": "u32:1|u32:1|u32:1|u32:1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-contains-after-second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_contains_key", + "arguments": [ + "42" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "insert-first-value-into-first-storage", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_insert_value", + "arguments": [ + "42", + "100", + "200" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_storage_mapper.node_links|u32:1": "u32:0|u32:2", + "str:map_storage_mapper.node_links|u32:2": "u32:1|u32:0", + "str:map_storage_mapper.value|u32:1": "42", + "str:map_storage_mapper.value|u32:2": "43", + "str:map_storage_mapper.node_id|u32:42": "1", + "str:map_storage_mapper.node_id|u32:43": "2", + "str:map_storage_mapper.info": "u32:2|u32:1|u32:2|u32:2", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:1": "u32:0|u32:2", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:1": "420", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:420": "1", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:420": "421", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:2": "u32:1|u32:0", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:2": "100", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:100": "2", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:100": "200", + "str:map_storage_mapper.storage|u32:42|str:.info": "u32:2|u32:1|u32:2|u32:2", + "str:map_storage_mapper.storage|u32:43|str:.node_links|u32:1": "u32:0|u32:0", + "str:map_storage_mapper.storage|u32:43|str:.value|u32:1": "430", + "str:map_storage_mapper.storage|u32:43|str:.node_id|u32:430": "1", + "str:map_storage_mapper.storage|u32:43|str:.mapped|u32:430": "431", + "str:map_storage_mapper.storage|u32:43|str:.info": "u32:1|u32:1|u32:1|u32:1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "first-remove", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_remove", + "arguments": [ + "42" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_storage_mapper.node_links|u32:2": "u32:0|u32:0", + "str:map_storage_mapper.value|u32:2": "43", + "str:map_storage_mapper.node_id|u32:43": "2", + "str:map_storage_mapper.info": "u32:1|u32:2|u32:2|u32:2", + "str:map_storage_mapper.storage|u32:43|str:.node_links|u32:1": "u32:0|u32:0", + "str:map_storage_mapper.storage|u32:43|str:.value|u32:1": "430", + "str:map_storage_mapper.storage|u32:43|str:.node_id|u32:430": "1", + "str:map_storage_mapper.storage|u32:43|str:.mapped|u32:430": "431", + "str:map_storage_mapper.storage|u32:43|str:.info": "u32:1|u32:1|u32:1|u32:1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "clear-map-storage", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_clear", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-get-after-second-remove", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_get", + "arguments": [ + "42" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:No storage!", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "map storage mapper entry or default should create a map if it doesn't exist", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_entry_or_default_update_increment", + "arguments": [ + "42", + "5", + "10" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "10" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "map storage mapper entry or default - calling it again should update the value from the existing map", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_entry_or_default_update_increment", + "arguments": [ + "42", + "5", + "20" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "30" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_storage_mapper.info": "u32:1|u32:1|u32:1|u32:1", + "str:map_storage_mapper.node_links|u32:1": "u32:0|u32:0", + "str:map_storage_mapper.value|u32:1": "42", + "str:map_storage_mapper.node_id|u32:42": "1", + "str:map_storage_mapper.storage|u32:42|str:.info": "u32:1|u32:1|u32:1|u32:1", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:1": "u32:0|u32:0", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:1": "5", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:5": "1", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:5": "30" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "map storage mapper entry and modify should insert a new value if the entry already exists", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_entry_and_modify_increment_or_default", + "arguments": [ + "42", + "15", + "100", + "500" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "100" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "map storage mapper entry and modify should create a new default map, but should not insert anything, only return the default", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_entry_and_modify_increment_or_default", + "arguments": [ + "55", + "15", + "100", + "500" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "500" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_storage_mapper.info": "u32:2|u32:1|u32:2|u32:2", + "str:map_storage_mapper.node_links|u32:1": "u32:0|u32:2", + "str:map_storage_mapper.value|u32:1": "42", + "str:map_storage_mapper.node_id|u32:42": "1", + "str:map_storage_mapper.node_links|u32:2": "u32:1|u32:0", + "str:map_storage_mapper.value|u32:2": "55", + "str:map_storage_mapper.node_id|u32:55": "2", + "str:map_storage_mapper.storage|u32:42|str:.info": "u32:2|u32:1|u32:2|u32:2", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:1": "u32:0|u32:2", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:1": "5", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:5": "1", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:5": "30", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:2": "u32:1|u32:0", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:2": "15", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:15": "2", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:15": "100" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "map storage mapper entry or default update - should create a new map and insert the value and return none if the map doesn't exist", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_entry_or_default_update", + "arguments": [ + "77", + "222", + "20" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "map storage mapper entry or default update - should re-use the existing map and insert the value and return none if the map exists but the value doesn't", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_entry_or_default_update", + "arguments": [ + "77", + "444", + "40" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "map storage mapper entry or default update - should replace the existing value and return it", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_storage_mapper_entry_or_default_update", + "arguments": [ + "77", + "444", + "50" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1|u32:40" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:map_storage_mapper.info": "u32:3|u32:1|u32:3|u32:3", + "str:map_storage_mapper.node_links|u32:1": "u32:0|u32:2", + "str:map_storage_mapper.value|u32:1": "42", + "str:map_storage_mapper.node_id|u32:42": "1", + "str:map_storage_mapper.node_links|u32:2": "u32:1|u32:3", + "str:map_storage_mapper.value|u32:2": "55", + "str:map_storage_mapper.node_id|u32:55": "2", + "str:map_storage_mapper.node_links|u32:3": "u32:2|u32:0", + "str:map_storage_mapper.value|u32:3": "77", + "str:map_storage_mapper.node_id|u32:77": "3", + "str:map_storage_mapper.storage|u32:42|str:.info": "u32:2|u32:1|u32:2|u32:2", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:1": "u32:0|u32:2", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:1": "5", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:5": "1", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:5": "30", + "str:map_storage_mapper.storage|u32:42|str:.node_links|u32:2": "u32:1|u32:0", + "str:map_storage_mapper.storage|u32:42|str:.value|u32:2": "15", + "str:map_storage_mapper.storage|u32:42|str:.node_id|u32:15": "2", + "str:map_storage_mapper.storage|u32:42|str:.mapped|u32:15": "100", + "str:map_storage_mapper.storage|u32:77|str:.info": "u32:2|u32:1|u32:2|u32:2", + "str:map_storage_mapper.storage|u32:77|str:.node_links|u32:1": "u32:0|u32:2", + "str:map_storage_mapper.storage|u32:77|str:.value|u32:1": "222", + "str:map_storage_mapper.storage|u32:77|str:.node_id|u32:222": "1", + "str:map_storage_mapper.storage|u32:77|str:.mapped|u32:222": "20", + "str:map_storage_mapper.storage|u32:77|str:.node_links|u32:2": "u32:1|u32:0", + "str:map_storage_mapper.storage|u32:77|str:.value|u32:2": "444", + "str:map_storage_mapper.storage|u32:77|str:.node_id|u32:444": "2", + "str:map_storage_mapper.storage|u32:77|str:.mapped|u32:444": "50" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_non_fungible_token.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_non_fungible_token.scen.json new file mode 100644 index 000000000..e3a982447 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_non_fungible_token.scen.json @@ -0,0 +1,410 @@ +{ + "name": "storage", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "roles": [ + "ESDTRoleNFTCreate", + "ESDTRoleNFTAddQuantity", + "ESDTRoleNFTBurn" + ] + } + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + }, + "0x000000000000000000010000000000000000000000000000000000000002ffff": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../../esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "issue-and-set-all-roles-meta", + "comment": "returns the token id on VM 1.4, but nothing on VM 1.5", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "issue_and_set_all_roles_meta", + "arguments": [ + "str:TICKER" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": "*", + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "setState", + "comment": "reset the token ID so we can set it again", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "roles": [ + "ESDTRoleNFTCreate", + "ESDTRoleNFTAddQuantity", + "ESDTRoleNFTBurn" + ] + } + }, + "storage": { + "str:nonFungibleTokenMapper": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "mapper-nft-set-token-id", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "mapper_nft_set_token_id", + "arguments": [ + "str:TICKER-000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "mapper-nft-create", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "mapper_nft_create", + "arguments": [ + "1000", + "u8:1|u8:2|u8:3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "nested:str:TICKER-000000|u64:1|biguint:1000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "mapper-nft-create-and-send", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "mapper_nft_create_and_send", + "arguments": [ + "address:an_account", + "2000", + "u8:4|u8:5|u8:6" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "nested:str:TICKER-000000|u64:2|biguint:2000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "instances": [ + { + "nonce": "1", + "balance": "1000", + "attributes": "u8:1|u8:2|u8:3" + } + ], + "lastNonce": "2", + "roles": [ + "ESDTRoleNFTCreate", + "ESDTRoleNFTAddQuantity", + "ESDTRoleNFTBurn" + ] + } + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "instances": [ + { + "nonce": "2", + "balance": "2000", + "attributes": "u8:4|u8:5|u8:6" + } + ] + } + } + }, + "+": "" + } + }, + { + "step": "scCall", + "id": "mapper-nft-add-quantity", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "mapper_nft_add_quantity", + "arguments": [ + "1", + "5000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "nested:str:TICKER-000000|u64:1|biguint:5000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "mapper-nft-add-quantity-and-send", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "mapper_nft_add_quantity_and_send", + "arguments": [ + "address:an_account", + "1", + "7000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "nested:str:TICKER-000000|u64:1|biguint:7000" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "instances": [ + { + "nonce": "1", + "balance": "6000", + "attributes": "u8:1|u8:2|u8:3" + } + ], + "lastNonce": "2", + "roles": [ + "ESDTRoleNFTCreate", + "ESDTRoleNFTAddQuantity", + "ESDTRoleNFTBurn" + ] + } + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "instances": [ + { + "nonce": "2", + "balance": "2000", + "attributes": "u8:4|u8:5|u8:6" + }, + { + "nonce": "1", + "balance": "7000", + "attributes": "u8:1|u8:2|u8:3" + } + ] + } + } + }, + "+": "" + } + }, + { + "step": "scCall", + "id": "mapper-nft-burn", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "mapper_nft_burn", + "arguments": [ + "1", + "2000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "instances": [ + { + "nonce": "1", + "balance": "4000", + "attributes": "u8:1|u8:2|u8:3" + } + ], + "lastNonce": "2", + "roles": [ + "ESDTRoleNFTCreate", + "ESDTRoleNFTAddQuantity", + "ESDTRoleNFTBurn" + ] + } + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "0", + "esdt": { + "str:TICKER-000000": { + "instances": [ + { + "nonce": "2", + "balance": "2000", + "attributes": "u8:4|u8:5|u8:6" + }, + { + "nonce": "1", + "balance": "7000", + "attributes": "u8:1|u8:2|u8:3" + } + ] + } + } + }, + "+": "" + } + }, + { + "step": "scQuery", + "id": "mapper-nft-get-balance", + "tx": { + "to": "sc:basic-features", + "function": "mapper_nft_get_balance", + "arguments": [ + "1" + ] + }, + "expect": { + "out": [ + "4000" + ], + "status": "", + "logs": "*" + } + }, + { + "step": "scQuery", + "id": "mapper-nft-get-attributes", + "tx": { + "to": "sc:basic-features", + "function": "mapper_get_token_attributes", + "arguments": [ + "1" + ] + }, + "expect": { + "out": [ + "u8:1|u8:2|u8:3" + ], + "status": "", + "logs": "*" + } + }, + { + "step": "scQuery", + "id": "mapper-nft-token-id", + "tx": { + "to": "sc:basic-features", + "function": "getNonFungibleTokenId", + "arguments": [] + }, + "expect": { + "out": [ + "str:TICKER-000000" + ], + "status": "", + "logs": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_queue.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_queue.scen.json new file mode 100644 index 000000000..44224aecf --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_queue.scen.json @@ -0,0 +1,289 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "before", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper_push_back", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:queue_mapper.node_links|u32:1": "u32:0|u32:0", + "str:queue_mapper.value|u32:1": "123", + "str:queue_mapper.info": "u32:1|u32:1|u32:1|u32:1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-queue-after-first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "second-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper_push_back", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-queue-after-second-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123", + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:queue_mapper.node_links|u32:1": "u32:0|u32:2", + "str:queue_mapper.node_links|u32:2": "u32:1|u32:0", + "str:queue_mapper.value|u32:1": "123", + "str:queue_mapper.value|u32:2": "111", + "str:queue_mapper.info": "u32:2|u32:1|u32:2|u32:2" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-front-after-second-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper_front", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-pop-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper_pop_front", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1|u32:123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:queue_mapper.node_links|u32:2": "u32:0|u32:0", + "str:queue_mapper.value|u32:2": "111", + "str:queue_mapper.info": "u32:1|u32:2|u32:2|u32:2" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "second-pop-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper_pop_front", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1|u32:111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-front-after-second-pop-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper_front", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Queue empty!", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_set.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_set.scen.json new file mode 100644 index 000000000..0bdd15381 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_set.scen.json @@ -0,0 +1,303 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "before", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_insert", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:set_mapper.node_links|u32:1": "u32:0|u32:0", + "str:set_mapper.value|u32:1": "123", + "str:set_mapper.node_id|u32:123": "1", + "str:set_mapper.info": "u32:1|u32:1|u32:1|u32:1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-list-after-first-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "second-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_insert", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-set-after-second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123", + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:set_mapper.node_links|u32:1": "u32:0|u32:2", + "str:set_mapper.node_links|u32:2": "u32:1|u32:0", + "str:set_mapper.value|u32:1": "123", + "str:set_mapper.value|u32:2": "111", + "str:set_mapper.node_id|u32:123": "1", + "str:set_mapper.node_id|u32:111": "2", + "str:set_mapper.info": "u32:2|u32:1|u32:2|u32:2" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-contains-after-second-push-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_contains", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "first-remove", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_remove", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:set_mapper.node_links|u32:2": "u32:0|u32:0", + "str:set_mapper.value|u32:2": "111", + "str:set_mapper.node_id|u32:111": "2", + "str:set_mapper.info": "u32:1|u32:2|u32:2|u32:2" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "second-pop-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_remove", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "check-front-after-second-pop-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "queue_mapper_front", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Queue empty!", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_single_value.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_single_value.scen.json new file mode 100644 index 000000000..192e77337 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_single_value.scen.json @@ -0,0 +1,439 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "before", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_my_single_value_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "increment-1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "my_single_value_mapper_increment_1", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "after-1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_my_single_value_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "increment-2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "my_single_value_mapper_increment_2", + "arguments": [ + "121" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "subtract-too-much", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "my_single_value_mapper_subtract_with_require", + "arguments": [ + "10,000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:not enough funds", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "subtract-ok", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "my_single_value_mapper_subtract_with_require", + "arguments": [ + "10" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "after-2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "map_my_single_value_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "+234" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:my_single_value_mapper": "+234" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "is-empty-before-clear", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "is_empty_single_value_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "false" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "is-empty-at-address-before-clear", + "tx": { + "from": "address:an_account", + "to": "sc:extra-instance", + "function": "is_empty_at_address_single_value_mapper", + "arguments": [ + "sc:basic-features" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "false" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "clear-single-value-mapper", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "clear_single_value_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "is-empty-after-clear", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "is_empty_single_value_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "is-empty-at-address-after-clear", + "tx": { + "from": "address:an_account", + "to": "sc:extra-instance", + "function": "is_empty_at_address_single_value_mapper", + "arguments": [ + "sc:basic-features" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "set-empty-entry", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "my_single_value_mapper_set_if_empty", + "arguments": [ + "42" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "message": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:my_single_value_mapper": "42" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "call-set-if-empty-on-non-empty-entry", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "my_single_value_mapper_set_if_empty", + "arguments": [ + "100" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "message": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:my_single_value_mapper": "42" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scQuery", + "id": "query-raw-byte-length", + "tx": { + "to": "sc:basic-features", + "function": "raw_byte_length_single_value_mapper", + "arguments": [] + }, + "expect": { + "out": [ + "1" + ], + "status": "", + "message": "", + "logs": [] + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_token_attributes.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_token_attributes.scen.json new file mode 100644 index 000000000..9b2a586cf --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_token_attributes.scen.json @@ -0,0 +1,623 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:contract": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:owner": { + "nonce": "0", + "balance": "1000" + } + } + }, + { + "step": "scCall", + "id": "set-token-attributes-1", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_set", + "arguments": [ + "str:ALICE-abcdef", + "u64:1", + "biguint:10|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "set-token-attributes-2", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_set", + "arguments": [ + "str:ALICE-abcdef", + "u64:1", + "biguint:10|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:A value was already set", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "set-token-attributes-3", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_set", + "arguments": [ + "str:BOB-abcdef", + "u64:1", + "biguint:20|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "set-token-attributes-4", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_set", + "arguments": [ + "str:BOB-abcdef", + "u64:1", + "biguint:20|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:A value was already set", + "gas": "*" + } + }, + { + "step": "checkState", + "accounts": { + "address:owner": { + "nonce": "4", + "balance": "1000", + "storage": {}, + "code": "" + }, + "sc:contract": { + "nonce": "0", + "balance": "0", + "storage": { + "str:TokenAttributes.attr|u8:1|u64:1": "biguint:10|u64:20|u32:2|u32:1|u32:2", + "str:TokenAttributes.attr|u8:2|u64:1": "biguint:20|u64:20|u32:2|u32:1|u32:2", + "str:TokenAttributes.nonce|u8:1|biguint:10|u64:20|u32:2|u32:1|u32:2": "1", + "str:TokenAttributes.nonce|u8:2|biguint:20|u64:20|u32:2|u32:1|u32:2": "1", + "str:TokenAttributes.counter": "2", + "str:TokenAttributes.mapping|nested:str:BOB-abcdef": "2", + "str:TokenAttributes.mapping|nested:str:ALICE-abcdef": "1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "get-token-attributes-1", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_get_attributes", + "arguments": [ + "str:ALICE-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "biguint:10|u64:20|u32:2|u32:1|u32:2" + ], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "get-token-attributes-2", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_get_attributes", + "arguments": [ + "str:ALICE-abcdef", + "u64:10" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:A value was not previously set", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "get-token-attributes-3", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_get_attributes", + "arguments": [ + "str:BOB-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "biguint:20|u64:20|u32:2|u32:1|u32:2" + ], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "get-token-attributes-4", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_get_attributes", + "arguments": [ + "str:BOB2-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Unknown token id", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "get-token-nonce-1", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_get_nonce", + "arguments": [ + "str:ALICE-abcdef", + "biguint:10|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "get-token-nonce-2", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_get_nonce", + "arguments": [ + "str:ALICE-abcdef", + "biguint:10|u64:20|u32:2|u32:1|u32:10" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:A value was not previously set", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "get-token-nonce-3", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_get_nonce", + "arguments": [ + "str:BOB-abcdef", + "biguint:20|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "get-token-nonce-4", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_get_nonce", + "arguments": [ + "str:BOB2-abcdef", + "biguint:10|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Unknown token id", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "has_attributes-token-attributes-1", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_has_attributes", + "arguments": [ + "str:ALICE-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "has_attributes-token-attributes-2", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_has_attributes", + "arguments": [ + "str:ALICE-abcdef", + "u64:10" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "has_attributes-token-attributes-3", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_has_attributes", + "arguments": [ + "str:BOB-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "has_attributes-token-attributes-4", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_has_attributes", + "arguments": [ + "str:BOB2-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "update-token-attributes-1", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_update", + "arguments": [ + "str:ALICE-abcdef", + "u64:1", + "biguint:30|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "update-token-attributes-2", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_update", + "arguments": [ + "str:ALICE-abcdef", + "u64:10", + "biguint:30|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:A value was not previously set", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "update-token-attributes-3", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_update", + "arguments": [ + "str:BOB-abcdef", + "u64:1", + "biguint:40|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "update-token-attributes-4", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_update", + "arguments": [ + "str:BOB2-abcdef", + "u64:1", + "biguint:40|u64:20|u32:2|u32:1|u32:2" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Unknown token id", + "gas": "*" + } + }, + { + "step": "checkState", + "accounts": { + "address:owner": { + "nonce": "20", + "balance": "1000", + "storage": {}, + "code": "" + }, + "sc:contract": { + "nonce": "0", + "balance": "0", + "storage": { + "str:TokenAttributes.attr|u8:1|u64:1": "biguint:30|u64:20|u32:2|u32:1|u32:2", + "str:TokenAttributes.attr|u8:2|u64:1": "biguint:40|u64:20|u32:2|u32:1|u32:2", + "str:TokenAttributes.nonce|u8:1|biguint:30|u64:20|u32:2|u32:1|u32:2": "1", + "str:TokenAttributes.nonce|u8:2|biguint:40|u64:20|u32:2|u32:1|u32:2": "1", + "str:TokenAttributes.counter": "2", + "str:TokenAttributes.mapping|nested:str:BOB-abcdef": "2", + "str:TokenAttributes.mapping|nested:str:ALICE-abcdef": "1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + }, + { + "step": "scCall", + "id": "clear-token-attributes-1", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_clear", + "arguments": [ + "str:ALICE-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "clear-token-attributes-2", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_clear", + "arguments": [ + "str:ALICE-abcdef", + "u64:10" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "scCall", + "id": "clear-token-attributes-3", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_clear", + "arguments": [ + "str:BOB-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "clear-token-attributes-4", + "tx": { + "from": "address:owner", + "to": "sc:contract", + "function": "token_attributes_clear", + "arguments": [ + "str:BOB2-abcdef", + "u64:1" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0", + "message": "*", + "gas": "*" + } + }, + { + "step": "checkState", + "accounts": { + "address:owner": { + "nonce": "24", + "balance": "1000", + "storage": {}, + "code": "" + }, + "sc:contract": { + "nonce": "0", + "balance": "0", + "storage": { + "str:TokenAttributes.counter": "2", + "str:TokenAttributes.mapping|nested:str:BOB-abcdef": "2", + "str:TokenAttributes.mapping|nested:str:ALICE-abcdef": "1" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + } + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_unique_id.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_unique_id.scen.json new file mode 100644 index 000000000..37f01b7d3 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_unique_id.scen.json @@ -0,0 +1,299 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "set-initial-len", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "init_unique_id_mapper", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:unique_id_mapper.len": "5", + "str:unique_id_mapper.item|u32:1": "", + "str:unique_id_mapper.item|u32:2": "", + "str:unique_id_mapper.item|u32:3": "", + "str:unique_id_mapper.item|u32:4": "", + "str:unique_id_mapper.item|u32:5": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "get-unique-id-mapper", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "unique_id_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1", + "2", + "3", + "4", + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "try-set-len-again", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "init_unique_id_mapper", + "arguments": [ + "10" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:len already set", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "swap-remove", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "unique_id_mapper_swap_remove", + "arguments": [ + "3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "3" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:unique_id_mapper.len": "4", + "str:unique_id_mapper.item|u32:1": "", + "str:unique_id_mapper.item|u32:2": "", + "str:unique_id_mapper.item|u32:3": "5", + "str:unique_id_mapper.item|u32:4": "", + "str:unique_id_mapper.item|u32:5": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "get-unique-id-mapper", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "unique_id_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1", + "2", + "5", + "4" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get-modified-entry", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "unique_id_mapper_get", + "arguments": [ + "3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get-empty-entry", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "unique_id_mapper_get", + "arguments": [ + "1" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "set-entry", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "unique_id_mapper_set", + "arguments": [ + "3", + "3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:unique_id_mapper.len": "4", + "str:unique_id_mapper.item|u32:1": "", + "str:unique_id_mapper.item|u32:2": "", + "str:unique_id_mapper.item|u32:3": "", + "str:unique_id_mapper.item|u32:4": "", + "str:unique_id_mapper.item|u32:5": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "get-unique-id-mapper", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "unique_id_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1", + "2", + "3", + "4" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_vec.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_vec.scen.json new file mode 100644 index 000000000..5fef8a4c7 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_vec.scen.json @@ -0,0 +1,291 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "before", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "increment-1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper_push", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "after-1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "increment-2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper_push", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "after-2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123", + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "after-2-len", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper_len", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:vec_mapper.len": "2", + "str:vec_mapper.item|u32:1": "123", + "str:vec_mapper.item|u32:2": "111" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "index-0", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper_get", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:index out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "index-2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper_get", + "arguments": [ + "2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "index-3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "vec_mapper_get", + "arguments": [ + "3" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:index out of range", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "index-0-at-address", + "tx": { + "from": "address:an_account", + "to": "sc:extra-instance", + "function": "vec_mapper_get_at_address", + "arguments": [ + "sc:basic-features", + "2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "after-2-len-at-address", + "tx": { + "from": "address:an_account", + "to": "sc:extra-instance", + "function": "vec_mapper_len_at_address", + "arguments": [ + "sc:basic-features" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_mapper_whitelist.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_whitelist.scen.json new file mode 100644 index 000000000..f1332e11b --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_mapper_whitelist.scen.json @@ -0,0 +1,321 @@ +{ + "name": "storage", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "before", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "check_contains", + "arguments": [ + "str:item" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "add", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "add_to_whitelist", + "arguments": [ + "str:item" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:whitelistMapper|nested:str:item": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "after", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "check_contains", + "arguments": [ + "str:item" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "after-at-address", + "tx": { + "from": "address:an_account", + "to": "sc:extra-instance", + "function": "check_contains_at_address", + "arguments": [ + "sc:basic-features", + "str:item" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "add-second", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "add_to_whitelist", + "arguments": [ + "str:item2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:whitelistMapper|nested:str:item": "true", + "str:whitelistMapper|nested:str:item2": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "remove", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "remove_from_whitelist", + "arguments": [ + "str:item" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:whitelistMapper|nested:str:item2": "true" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:extra-instance": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "require-contains-success", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "require_contains", + "arguments": [ + "str:item2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "require-contains-failed", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "require_contains", + "arguments": [ + "str:item" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Item not whitelisted", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "require-contains-success-at-address", + "tx": { + "from": "address:an_account", + "to": "sc:extra-instance", + "function": "require_contains_at_address", + "arguments": [ + "sc:basic-features", + "str:item2" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "require-contains-failed-at-address", + "tx": { + "from": "address:an_account", + "to": "sc:extra-instance", + "function": "require_contains_at_address", + "arguments": [ + "sc:basic-features", + "str:item" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:Item not whitelisted", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_opt_managed_addr.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_opt_managed_addr.scen.json new file mode 100644 index 000000000..352c818b2 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_opt_managed_addr.scen.json @@ -0,0 +1,196 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:opt_addr": [ + "1", + "str:____________address_too_long____________" + ] + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_opt_addr", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:storage decode error: input too long", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_opt_addr", + "arguments": [ + "str:____________address_____________" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:opt_addr": "1|str:____________address_____________" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "+": "" + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_opt_addr", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "str:____________address_____________" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "is-empty-false", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "is_empty_opt_addr", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "false" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_opt_addr", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "is-empty-true", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "is_empty_opt_addr", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "*", + "balance": "*", + "storage": { + "str:opt_addr": "" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "+": "" + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_opt_addr", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_raw_api_features.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_raw_api_features.scen.json new file mode 100644 index 000000000..a5817ab5d --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_raw_api_features.scen.json @@ -0,0 +1,111 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:other": { + "nonce": "0", + "balance": "0", + "storage": { + "str:otherStorage": "str:myValue" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "storage_write_raw", + "arguments": [ + "str:coolKey", + "str:12345" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:coolKey": "str:12345" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "+": "" + } + }, + { + "step": "scCall", + "id": "read-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "storage_read_raw", + "arguments": [ + "str:coolKey" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "str:12345" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "read-val-from-other", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "storage_read_from_address", + "arguments": [ + "sc:other", + "str:otherStorage" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "str:myValue" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_reserved.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_reserved.scen.json new file mode 100644 index 000000000..99f42f58a --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_reserved.scen.json @@ -0,0 +1,86 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-reserved-1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_reserved_vec_u8", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:cannot write to storage under reserved key", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-reserved-2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_reserved_big_uint", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:cannot write to storage under reserved key", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-reserved-3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_reserved_i64", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "10", + "message": "str:cannot write to storage under reserved key", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_u64.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_u64.scen.json new file mode 100644 index 000000000..d2cd5cc02 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_u64.scen.json @@ -0,0 +1,142 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_u64", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:u64": "123" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_u64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_u64", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:u64": "0" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_u64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_u64_bad.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_u64_bad.scen.json new file mode 100644 index 000000000..4bceff73d --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_u64_bad.scen.json @@ -0,0 +1,43 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:u64": "0x010000000000000000" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_u64", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:storage decode error: input too long", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_usize.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_usize.scen.json new file mode 100644 index 000000000..e828b13e4 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_usize.scen.json @@ -0,0 +1,142 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "store-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_usize", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:usize": "123" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_usize", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "123" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "store-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "store_usize", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:usize": "0" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "*", + "storage": {}, + "code": "" + } + } + }, + { + "step": "scCall", + "id": "load-empty", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_usize", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/storage_usize_bad.scen.json b/test/features/basic-features-ei-1-3/scenarios/storage_usize_bad.scen.json new file mode 100644 index 000000000..677f74a60 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/storage_usize_bad.scen.json @@ -0,0 +1,43 @@ +{ + "name": "storage", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "storage": { + "str:usize": "0x0100000000" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "load-val", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "load_usize", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:storage decode error: input too long", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/basic-features-ei-1-3/scenarios/struct_eq.scen.json b/test/features/basic-features-ei-1-3/scenarios/struct_eq.scen.json new file mode 100644 index 000000000..b7f50c4e7 --- /dev/null +++ b/test/features/basic-features-ei-1-3/scenarios/struct_eq.scen.json @@ -0,0 +1,68 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scQuery", + "id": "managed_struct_eq_yes", + "tx": { + "to": "sc:basic-features", + "function": "managed_struct_eq", + "arguments": [ + { + "1": "biguint:1", + "2": "u32:2", + "3": "nested:str:data3" + }, + { + "1": "biguint:1", + "2": "u32:2", + "3": "nested:str:data3" + } + ] + }, + "expect": { + "out": [ + "true" + ] + } + }, + { + "step": "scQuery", + "id": "managed_struct_eq_no", + "tx": { + "to": "sc:basic-features", + "function": "managed_struct_eq", + "arguments": [ + { + "1": "biguint:1", + "2": "u32:2", + "3": "nested:str:data3" + }, + { + "1": "biguint:1", + "2": "u32:2", + "3": "nested:str:data4" + } + ] + }, + "expect": { + "out": [ + "false" + ] + } + } + ] +} diff --git a/test/features/basic-features/output/basic-features-dbg.mxsc.json b/test/features/basic-features/output/basic-features-dbg.mxsc.json deleted file mode 100644 index a23e4ce24..000000000 --- a/test/features/basic-features/output/basic-features-dbg.mxsc.json +++ /dev/null @@ -1,5871 +0,0 @@ -{ - "buildInfo": { - "rustc": { - "version": "1.76.0-nightly", - "commitHash": "21cce21d8c012f14cf74d5afddd795d324600dac", - "commitDate": "2023-12-11", - "channel": "Nightly", - "short": "rustc 1.76.0-nightly (21cce21d8 2023-12-11)" - }, - "contractCrate": { - "name": "basic-features", - "version": "0.0.0" - }, - "framework": { - "name": "multiversx-sc", - "version": "0.46.1" - } - }, - "abi": { - "name": "BasicFeatures", - "constructor": { - "inputs": [], - "outputs": [] - }, - "endpoints": [ - { - "name": "panicWithMessage", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "docs": [ - "Operation that has caused issues in the past" - ], - "name": "count_ones", - "mutability": "mutable", - "inputs": [ - { - "name": "arg", - "type": "u64" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "endpoint_with_mutable_arg", - "mutability": "mutable", - "inputs": [ - { - "name": "arg1", - "type": "BigUint" - }, - { - "name": "arg2", - "type": "u64" - }, - { - "name": "arg3", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sqrt_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sqrt_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "log2_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "log2_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "pow_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "pow_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "pow_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "pow_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_to_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "bu", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "biguint_overwrite_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "bu", - "type": "BigUint" - }, - { - "name": "small", - "type": "u64" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_zero", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_from_u64_1", - "mutability": "mutable", - "inputs": [ - { - "name": "small", - "type": "u64" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_from_u64_2", - "mutability": "mutable", - "inputs": [ - { - "name": "small", - "type": "u64" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "biguint_from_u128", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_from_managed_buffer", - "mutability": "mutable", - "inputs": [ - { - "name": "mb", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_from_managed_buffer_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "mb", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_int_zero", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "big_int_from_i64_1", - "mutability": "mutable", - "inputs": [ - { - "name": "small", - "type": "i64" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "big_int_from_i64_2", - "mutability": "mutable", - "inputs": [ - { - "name": "small", - "type": "i64" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "big_uint_eq_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigUint" - }, - { - "name": "small", - "type": "u64" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "big_int_to_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "bigint_overwrite_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - }, - { - "name": "small", - "type": "i64" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "big_int_to_parts", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "Sign" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "big_int_from_biguint", - "mutability": "mutable", - "inputs": [ - { - "name": "sign", - "type": "Sign" - }, - { - "name": "unsigned", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_int_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_uint_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_int_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_uint_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "add_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sub_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "sub_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "sub_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sub_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mul_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "mul_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "mul_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mul_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "div_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "div_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "div_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "div_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "rem_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "rem_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "rem_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "rem_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "add_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "add_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sub_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "sub_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "sub_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sub_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mul_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "mul_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "mul_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mul_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "div_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "div_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "div_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "div_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "rem_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "rem_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "rem_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "rem_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_and_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_and_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_or_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_or_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_xor_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_xor_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_and_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_and_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_or_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_or_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_xor_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_xor_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shr_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shr_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shl_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shl_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shr_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shr_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shl_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shl_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "get_block_timestamp", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_block_nonce", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_block_round", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_block_epoch", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_block_random_seed", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "array48" - } - ] - }, - { - "name": "get_prev_block_timestamp", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_nonce", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_round", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_epoch", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_random_seed", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "array48" - } - ] - }, - { - "name": "get_caller", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "get_owner_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "get_shard_of_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "is_smart_contract", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "get_state_root_hash", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "array32" - } - ] - }, - { - "name": "get_tx_hash", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "array32" - } - ] - }, - { - "name": "get_gas_left", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_cumulated_validator_rewards", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "codec_err_finish", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "CodecErrorTestType" - } - ] - }, - { - "name": "codec_err_storage_key", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "codec_err_storage_get", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "CodecErrorTestType" - } - ] - }, - { - "name": "codec_err_storage_set", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "codec_err_event_topic", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "codec_err_event_data", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "docs": [ - "Never actually calls any deploy/upgrade, so it is appropriate in this contract.", - "It just covers contract init serialization errors." - ], - "name": "codec_err_contract_init", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "docs": [ - "Never actually calls any async/sync call, so it is appropriate in this contract.", - "It just covers contract call serialization errors." - ], - "name": "codec_err_contract_call", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "compute_sha256", - "mutability": "mutable", - "inputs": [ - { - "name": "input", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "array32" - } - ] - }, - { - "name": "compute_keccak256", - "mutability": "mutable", - "inputs": [ - { - "name": "input", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "array32" - } - ] - }, - { - "name": "compute_ripemd160", - "mutability": "mutable", - "inputs": [ - { - "name": "input", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "array20" - } - ] - }, - { - "name": "verify_bls_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "verify_ed25519_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "verify_secp256k1_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "verify_custom_secp256k1_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - }, - { - "name": "hash_type", - "type": "MessageHashType" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "compute_secp256k1_der_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "r", - "type": "bytes" - }, - { - "name": "s", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "echo_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u64" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "echo_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i64" - } - ], - "outputs": [ - { - "type": "i64" - } - ] - }, - { - "name": "echo_i32", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i32" - } - ], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "echo_u32", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "echo_isize", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i32" - } - ], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "echo_usize", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "echo_i8", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i8" - } - ], - "outputs": [ - { - "type": "i8" - } - ] - }, - { - "name": "echo_u8", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u8" - } - ], - "outputs": [ - { - "type": "u8" - } - ] - }, - { - "name": "echo_bool", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "bool" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "echo_opt_bool", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "Option" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "echo_nothing", - "mutability": "mutable", - "inputs": [ - { - "name": "nothing", - "type": "()" - } - ], - "outputs": [] - }, - { - "name": "echo_array_u8", - "mutability": "mutable", - "inputs": [ - { - "name": "s", - "type": "array5" - } - ], - "outputs": [ - { - "type": "array5" - } - ] - }, - { - "name": "echo_multi_value_u32", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "u32" - }, - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "echo_multi_value_tuples", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "variadic>", - "multi_result": true - } - ] - }, - { - "name": "echo_ser_example_2", - "mutability": "mutable", - "inputs": [ - { - "name": "se", - "type": "ExampleEnumWithFields" - } - ], - "outputs": [ - { - "type": "ExampleEnumWithFields" - } - ] - }, - { - "name": "echo_simple_enum", - "mutability": "readonly", - "inputs": [ - { - "name": "se", - "type": "ExampleEnumSimple" - } - ], - "outputs": [ - { - "type": "ExampleEnumSimple" - } - ] - }, - { - "name": "finish_simple_enum_variant_1", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "ExampleEnumSimple" - } - ] - }, - { - "name": "echo_non_zero_usize", - "mutability": "readonly", - "inputs": [ - { - "name": "nz", - "type": "NonZeroUsize" - } - ], - "outputs": [ - { - "type": "NonZeroUsize" - } - ] - }, - { - "name": "echo_some_args_ignore_others", - "mutability": "readonly", - "inputs": [ - { - "name": "i", - "type": "i32" - }, - { - "name": "opt", - "type": "optional", - "multi_arg": true - }, - { - "name": "_ignore", - "type": "ignore", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "i32" - }, - { - "type": "optional", - "multi_result": true - } - ], - "allow_multiple_var_args": true - }, - { - "name": "echo_arrayvec", - "mutability": "readonly", - "inputs": [ - { - "name": "av", - "type": "List" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "echo_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "echo_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "echo_managed_buffer", - "mutability": "mutable", - "inputs": [ - { - "name": "mb", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "echo_managed_address", - "mutability": "mutable", - "inputs": [ - { - "name": "ma", - "type": "Address" - } - ], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "docs": [ - "This tests that nested serialization of big ints within unmanaged types works." - ], - "name": "echo_big_int_managed_vec", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "List" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "docs": [ - "This tests that nested serialization of big ints within unmanaged types works." - ], - "name": "echo_big_int_tuple", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "tuple" - } - ], - "outputs": [ - { - "type": "tuple" - } - ] - }, - { - "docs": [ - "This tests that nested serialization of big ints within unmanaged types works." - ], - "name": "echo_big_int_option", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "Option" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "echo_tuple_into_multiresult", - "mutability": "mutable", - "inputs": [ - { - "name": "addr", - "type": "Address" - }, - { - "name": "vec", - "type": "List" - } - ], - "outputs": [ - { - "type": "Address" - }, - { - "type": "List" - } - ] - }, - { - "name": "echo_managed_vec_of_managed_vec", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List>" - } - ], - "outputs": [ - { - "type": "List>" - } - ] - }, - { - "name": "echo_managed_vec_of_token_identifier", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "echo_managed_async_result_empty", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "AsyncCallResult<()>" - } - ], - "outputs": [] - }, - { - "name": "echo_varags_managed_eager", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "u32" - }, - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "echo_varags_managed_sum", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "variadic>", - "multi_result": true - } - ] - }, - { - "name": "compute_get_values", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - } - ], - "outputs": [ - { - "type": "tuple" - } - ] - }, - { - "name": "compute_create_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "tuple" - } - ] - }, - { - "name": "compute_get_ec_length", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "compute_get_priv_key_byte_length", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "compute_ec_add", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_first_point", - "type": "BigUint" - }, - { - "name": "y_first_point", - "type": "BigUint" - }, - { - "name": "x_second_point", - "type": "BigUint" - }, - { - "name": "y_second_point", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_ec_double", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_point", - "type": "BigUint" - }, - { - "name": "y_point", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_is_on_curve_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_point", - "type": "BigUint" - }, - { - "name": "y_point", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "compute_scalar_mult", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_point", - "type": "BigUint" - }, - { - "name": "y_point", - "type": "BigUint" - }, - { - "name": "data", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_scalar_base_mult", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "data", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_marshal_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_pair", - "type": "BigUint" - }, - { - "name": "y_pair", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "compute_marshal_compressed_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_pair", - "type": "BigUint" - }, - { - "name": "y_pair", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "compute_unmarshal_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "data", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_unmarshal_compressed_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "data", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_generate_key_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - }, - { - "type": "bytes" - } - ] - }, - { - "name": "logEventA", - "mutability": "mutable", - "inputs": [ - { - "name": "data", - "type": "u32" - } - ], - "outputs": [] - }, - { - "docs": [ - "Logs `event_a` a repeated number of times." - ], - "name": "logEventARepeat", - "mutability": "mutable", - "inputs": [ - { - "name": "num_logs", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "logEventB", - "mutability": "mutable", - "inputs": [ - { - "name": "arg1", - "type": "BigUint" - }, - { - "name": "arg2", - "type": "Address" - }, - { - "name": "data", - "type": "variadic", - "multi_arg": true - } - ], - "outputs": [] - }, - { - "name": "only_owner_endpoint", - "onlyOwner": true, - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "only_user_account_endpoint", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "require_equals", - "mutability": "readonly", - "inputs": [ - { - "name": "a", - "type": "u32" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "sc_panic", - "mutability": "readonly", - "inputs": [], - "outputs": [] - }, - { - "name": "maddress_from_array", - "mutability": "mutable", - "inputs": [ - { - "name": "array", - "type": "array32" - } - ], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "maddress_from_managed_buffer", - "mutability": "mutable", - "inputs": [ - { - "name": "managed_buffer", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "mbuffer_new", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "mbuffer_concat", - "mutability": "mutable", - "inputs": [ - { - "name": "mb1", - "type": "bytes" - }, - { - "name": "mb2", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "mbuffer_copy_slice", - "mutability": "mutable", - "inputs": [ - { - "name": "mb", - "type": "bytes" - }, - { - "name": "starting_position", - "type": "u32" - }, - { - "name": "slice_len", - "type": "u32" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "mbuffer_set_random", - "mutability": "mutable", - "inputs": [ - { - "name": "nr_bytes", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "mbuffer_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "mb1", - "type": "bytes" - }, - { - "name": "mb2", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_address_zero", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "managed_address_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "mb1", - "type": "Address" - }, - { - "name": "mb2", - "type": "Address" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_vec_new", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "managed_vec_biguint_push", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "item", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "managed_vec_biguint_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "mv1", - "type": "List" - }, - { - "name": "mv2", - "type": "List" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_vec_address_push", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List
" - }, - { - "name": "item", - "type": "Address" - } - ], - "outputs": [ - { - "type": "List
" - } - ] - }, - { - "name": "managed_vec_set", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "index", - "type": "u32" - }, - { - "name": "item", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "managed_vec_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "managed_vec_find", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "item", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "managed_vec_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "item", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_vec_array_push", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List>" - }, - { - "name": "item", - "type": "array5" - } - ], - "outputs": [ - { - "type": "List>" - } - ] - }, - { - "name": "managed_ref_explicit", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "storage_read_raw", - "mutability": "mutable", - "inputs": [ - { - "name": "storage_key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "storage_write_raw", - "mutability": "mutable", - "inputs": [ - { - "name": "storage_key", - "type": "bytes" - }, - { - "name": "value", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "storage_read_from_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "storage_key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "load_bytes", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "load_big_uint", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "load_big_int", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "load_u64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "load_usize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "load_i64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i64" - } - ] - }, - { - "name": "load_bool", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "load_addr", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "load_opt_addr", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional
", - "multi_result": true - } - ] - }, - { - "name": "is_empty_opt_addr", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "get_nr_to_clear", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "clear_storage_value", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "load_ser_2", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "ExampleEnumWithFields" - } - ] - }, - { - "name": "load_map1", - "mutability": "mutable", - "inputs": [ - { - "name": "addr", - "type": "Address" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "load_map2", - "mutability": "mutable", - "inputs": [ - { - "name": "addr1", - "type": "Address" - }, - { - "name": "addr2", - "type": "Address" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "load_map3", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "load_from_address_raw", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "store_bytes", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "store_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "store_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "name": "store_usize", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "store_i32", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i32" - } - ], - "outputs": [] - }, - { - "name": "store_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u64" - } - ], - "outputs": [] - }, - { - "name": "store_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i64" - } - ], - "outputs": [] - }, - { - "name": "store_bool", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "bool" - } - ], - "outputs": [] - }, - { - "name": "store_addr", - "mutability": "mutable", - "inputs": [ - { - "name": "arg", - "type": "Address" - } - ], - "outputs": [] - }, - { - "name": "store_opt_addr", - "mutability": "mutable", - "inputs": [ - { - "name": "opt_addr", - "type": "optional
", - "multi_arg": true - } - ], - "outputs": [] - }, - { - "name": "store_ser_2", - "mutability": "mutable", - "inputs": [ - { - "name": "arg", - "type": "ExampleEnumWithFields" - } - ], - "outputs": [] - }, - { - "name": "store_map1", - "mutability": "mutable", - "inputs": [ - { - "name": "addr", - "type": "Address" - }, - { - "name": "bi", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "store_map2", - "mutability": "mutable", - "inputs": [ - { - "name": "addr1", - "type": "Address" - }, - { - "name": "addr2", - "type": "Address" - }, - { - "name": "bi", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "store_map3", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "u32" - }, - { - "name": "b", - "type": "bool" - } - ], - "outputs": [] - }, - { - "name": "store_reserved_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i64" - } - ], - "outputs": [] - }, - { - "name": "store_reserved_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "store_reserved_vec_u8", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "address_to_id_mapper_get_id", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "address_to_id_mapper_get_id_non_zero", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "address_to_id_mapper_get_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address_id", - "type": "u64" - } - ], - "outputs": [ - { - "type": "Option
" - } - ] - }, - { - "name": "address_to_id_mapper_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "address_id", - "type": "u64" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "address_to_id_mapper_set", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "address_to_id_mapper_get_id_or_insert", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "address_to_id_mapper_remove_by_id", - "mutability": "mutable", - "inputs": [ - { - "name": "address_id", - "type": "u64" - } - ], - "outputs": [ - { - "type": "Option
" - } - ] - }, - { - "name": "address_to_id_mapper_remove_by_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "getListMapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "listMapperPushBack", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperPushFront", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperPopFront", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperPopBack", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperFront", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperBack", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperPushAfter", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - }, - { - "name": "element", - "type": "u32" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperPushBefore", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - }, - { - "name": "element", - "type": "u32" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperRemoveNode", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperRemoveNodeById", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperSetValue", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - }, - { - "name": "new_value", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperSetValueById", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - }, - { - "name": "new_value", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperIterateByHand", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - } - ], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "listMapperIterateByIter", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - } - ], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "queue_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "queue_mapper_push_back", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "queue_mapper_pop_front", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "queue_mapper_front", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic>", - "multi_result": true - } - ] - }, - { - "name": "map_mapper_keys", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "map_mapper_values", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "map_mapper_insert", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "value", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_mapper_contains_key", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_mapper_get", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_mapper_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_mapper_entry_or_default_update_increment", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "increment", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_mapper_entry_or_insert_default", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "default", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_mapper_entry_and_modify", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "increment", - "type": "u32" - }, - { - "name": "otherwise", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_mapper_entry_or_insert_with_key", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key_increment", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_storage_mapper_view", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "map_storage_mapper_insert_default", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_storage_mapper_contains_key", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_storage_mapper_get", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "map_storage_mapper_insert_value", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - }, - { - "name": "value", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_storage_mapper_get_value", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_storage_mapper_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_storage_mapper_clear", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "map_storage_mapper_entry_or_default_update_increment", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - }, - { - "name": "increment", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_storage_mapper_entry_and_modify_increment_or_default", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - }, - { - "name": "value", - "type": "u32" - }, - { - "name": "other", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_storage_mapper_entry_or_default_update", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - }, - { - "name": "value", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "set_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "set_mapper_insert", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "set_mapper_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "set_mapper_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_my_single_value_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "my_single_value_mapper_increment_1", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "docs": [ - "Same as my_single_value_mapper_increment_1, but expressed more compactly." - ], - "name": "my_single_value_mapper_increment_2", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "name": "my_single_value_mapper_subtract_with_require", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "name": "my_single_value_mapper_set_if_empty", - "mutability": "mutable", - "inputs": [ - { - "name": "value", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "name": "clear_single_value_mapper", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "get_from_address_single_value_mapper", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "is_empty_single_value_mapper", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "is_empty_at_address_single_value_mapper", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "raw_byte_length_single_value_mapper", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "vec_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "vec_mapper_push", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "vec_mapper_get", - "mutability": "readonly", - "inputs": [ - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "vec_mapper_get_at_address", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "vec_mapper_len", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "vec_mapper_len_at_address", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "token_attributes_set", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "attributes", - "type": "TokenAttributesStruct" - } - ], - "outputs": [] - }, - { - "name": "token_attributes_update", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "attributes", - "type": "TokenAttributesStruct" - } - ], - "outputs": [] - }, - { - "name": "token_attributes_get_attributes", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "TokenAttributesStruct" - } - ] - }, - { - "name": "token_attributes_get_nonce", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "attributes", - "type": "TokenAttributesStruct" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "token_attributes_clear", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [] - }, - { - "name": "token_attributes_has_attributes", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "add_to_whitelist", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "remove_from_whitelist", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "check_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "check_contains_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "require_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "require_contains_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "issue_fungible_default_callback", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [ - { - "name": "token_ticker", - "type": "bytes" - }, - { - "name": "initial_supply", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "issue_fungible_custom_callback", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [ - { - "name": "token_ticker", - "type": "bytes" - }, - { - "name": "initial_supply", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "issue_and_set_all_roles_fungible", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [ - { - "name": "token_ticker", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "set_local_roles_fungible", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "mint_fungible", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mint_and_send_fungible", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "burn_fungible", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "get_balance_fungible", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "require_same_token_fungible", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [] - }, - { - "name": "require_all_same_token_fungible", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [] - }, - { - "name": "getFungibleTokenId", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "TokenIdentifier" - } - ] - }, - { - "name": "issue_and_set_all_roles_meta", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [ - { - "name": "token_ticker", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "mapper_nft_set_token_id", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - } - ], - "outputs": [] - }, - { - "name": "mapper_nft_create", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigUint" - }, - { - "name": "attributes", - "type": "RgbColor" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mapper_nft_create_and_send", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "amount", - "type": "BigUint" - }, - { - "name": "attributes", - "type": "RgbColor" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mapper_nft_add_quantity", - "mutability": "mutable", - "inputs": [ - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mapper_nft_add_quantity_and_send", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mapper_nft_burn", - "mutability": "mutable", - "inputs": [ - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "mapper_nft_get_balance", - "mutability": "mutable", - "inputs": [ - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mapper_get_token_attributes", - "mutability": "mutable", - "inputs": [ - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "RgbColor" - } - ] - }, - { - "name": "getNonFungibleTokenId", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "TokenIdentifier" - } - ] - }, - { - "name": "init_unique_id_mapper", - "mutability": "mutable", - "inputs": [ - { - "name": "len", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "unique_id_mapper_get", - "mutability": "mutable", - "inputs": [ - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "unique_id_mapper_swap_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "unique_id_mapper_set", - "mutability": "mutable", - "inputs": [ - { - "name": "index", - "type": "u32" - }, - { - "name": "id", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "unique_id_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "managed_struct_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "s1", - "type": "ExampleStructManaged" - }, - { - "name": "s2", - "type": "ExampleStructManaged" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "no_overflow_usize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "no_overflow_u8", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u8" - } - ] - }, - { - "name": "no_overflow_u16", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u16" - } - ] - }, - { - "name": "no_overflow_u32", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "no_overflow_u64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "overflow_usize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "overflow_u8", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u8" - } - ] - }, - { - "name": "overflow_u16", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u16" - } - ] - }, - { - "name": "overflow_u32", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "overflow_u64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "no_overflow_isize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "no_overflow_i8", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i8" - } - ] - }, - { - "name": "no_overflow_i16", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i16" - } - ] - }, - { - "name": "no_overflow_i32", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "no_overflow_i64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i64" - } - ] - }, - { - "name": "overflow_isize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "overflow_i8", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i8" - } - ] - }, - { - "name": "overflow_i16", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i16" - } - ] - }, - { - "name": "overflow_i32", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "overflow_i64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i64" - } - ] - }, - { - "name": "token_identifier_egld", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "token_identifier_is_valid_1", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "EgldOrEsdtTokenIdentifier" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "token_identifier_is_valid_2", - "mutability": "mutable", - "inputs": [ - { - "name": "bytes", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "non_zero_usize_iter", - "mutability": "readonly", - "inputs": [ - { - "name": "how_many", - "type": "u32" - } - ], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "non_zero_usize_macro", - "mutability": "readonly", - "inputs": [ - { - "name": "number", - "type": "u32" - } - ], - "outputs": [ - { - "type": "NonZeroUsize" - } - ] - }, - { - "name": "set_contract_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [] - }, - { - "name": "is_empty_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "contains_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "len_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "check_internal_consistency_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - } - ], - "events": [ - { - "identifier": "event_err_topic", - "inputs": [ - { - "name": "err_topic", - "type": "CodecErrorTestType", - "indexed": true - } - ] - }, - { - "identifier": "event_err_data", - "inputs": [ - { - "name": "data", - "type": "CodecErrorTestType" - } - ] - }, - { - "identifier": "event_a", - "inputs": [ - { - "name": "data", - "type": "u32" - } - ] - }, - { - "identifier": "event_b", - "inputs": [ - { - "name": "arg1", - "type": "BigUint", - "indexed": true - }, - { - "name": "arg2", - "type": "Address", - "indexed": true - }, - { - "name": "data", - "type": "List" - } - ] - } - ], - "esdtAttributes": [], - "hasCallback": true, - "types": { - "CodecErrorTestType": { - "type": "struct", - "docs": [ - "Helper type to explore encode/decode errors." - ] - }, - "EsdtTokenPayment": { - "type": "struct", - "fields": [ - { - "name": "token_identifier", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ] - }, - "ExampleEnumSimple": { - "type": "enum", - "docs": [ - "Copied from multiversx-sc serialization tests." - ], - "variants": [ - { - "docs": [ - "Variant 0 doc comment.", - "This will show up in the ABI." - ], - "name": "Variant0", - "discriminant": 0 - }, - { - "name": "Variant1", - "discriminant": 1 - }, - { - "docs": [ - "One line is enough. The one above doesn't have any." - ], - "name": "Variant2", - "discriminant": 2 - } - ] - }, - "ExampleEnumWithFields": { - "type": "enum", - "docs": [ - "Copied from multiversx-sc serialization tests." - ], - "variants": [ - { - "name": "Unit", - "discriminant": 0 - }, - { - "name": "Newtype", - "discriminant": 1, - "fields": [ - { - "name": "0", - "type": "u32" - } - ] - }, - { - "name": "Tuple", - "discriminant": 2, - "fields": [ - { - "name": "0", - "type": "u32" - }, - { - "name": "1", - "type": "u32" - } - ] - }, - { - "name": "Struct", - "discriminant": 3, - "fields": [ - { - "name": "a", - "type": "u32" - } - ] - } - ] - }, - "ExampleStructManaged": { - "type": "struct", - "fields": [ - { - "name": "big_uint", - "type": "BigUint" - }, - { - "name": "int", - "type": "u32" - }, - { - "name": "bytes", - "type": "bytes" - } - ] - }, - "RgbColor": { - "type": "struct", - "fields": [ - { - "name": "r", - "type": "u8" - }, - { - "name": "g", - "type": "u8" - }, - { - "name": "b", - "type": "u8" - } - ] - }, - "TokenAttributesStruct": { - "type": "struct", - "fields": [ - { - "name": "field_biguint", - "type": "BigUint" - }, - { - "name": "field_u64", - "type": "u64" - }, - { - "name": "field_vec_u32", - "type": "List" - } - ] - } - } - }, - "size": 492544, - "code": "0061736d0100000001f2012460017f0060027f7e0060037f7f7f0060027f7f006000017f60027f7f017f60017f017f6000017e60017e017f60067e7f7f7f7f7f017f60000060037f7f7f017f60057f7f7e7f7f017f60057f7f7f7e7f0060017f017e60017e0060067f7f7f7f7f7f017f60047f7f7f7f017f60077f7f7f7f7f7f7f0060057f7f7f7f7f00600b7f7f7e7f7f7f7f7f7f7f7f0060047f7f7f7f0060047f7f7e7f0060067f7f7e7f7f7f0060037f7e7f0060037e7f7f017f60037f7f7e017f60027f7f017e60037f7f7f017e60027e7f0060067f7f7f7f7f7f0060027f7e017f60017e017e60037f7f7e0060047f7f7f7e0060047f7e7f7f0002a6146c03656e76126d616e616765645369676e616c4572726f72000003656e760e626967496e74536574496e743634000103656e7609626967496e74416464000203656e760b7369676e616c4572726f72000303656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000503656e76096d4275666665724571000503656e76136d42756666657253746f7261676553746f7265000503656e760d6d42756666657246696e697368000603656e760a6765744761734c656674000703656e76106d616e61676564534341646472657373000003656e7609626967496e744e6577000803656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000903656e760f636c65616e52657475726e44617461000a03656e76126d427566666572417070656e644279746573000b03656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000c03656e760d6d616e6167656443616c6c6572000003656e76186d616e616765644765744f726967696e616c547848617368000003656e76106d4275666665724765744c656e677468000603656e760f6d4275666665724765744279746573000503656e761c626967496e744765744553445445787465726e616c42616c616e6365000d03656e76136d616e616765644f776e657241646472657373000003656e7612626967496e7447657443616c6c56616c7565000003656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000003656e76126d427566666572476574417267756d656e74000503656e76136765744e756d455344545472616e7366657273000403656e7611676574417267756d656e744c656e677468000603656e7619736d616c6c496e744765745369676e6564417267756d656e74000e03656e7617626967496e744765745369676e6564417267756d656e74000303656e7619626967496e74476574556e7369676e6564417267756d656e74000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000e03656e760f6765744e756d417267756d656e7473000403656e7616736d616c6c496e7446696e697368556e7369676e6564000f03656e7614626967496e7446696e697368556e7369676e6564000003656e760666696e697368000303656e7609626967496e74537562000203656e760f6d4275666665725365744279746573000b03656e7616656c6c6970746963437572766547657456616c756573001003656e761067657443757276654c656e6774684543000603656e76086372656174654543000503656e76146d427566666572436f707942797465536c696365001103656e7609626967496e7453686c000203656e7609626967496e74536872000203656e76176d42756666657246726f6d426967496e745369676e6564000503656e76156d427566666572546f426967496e745369676e6564000503656e7609626967496e74506f77000203656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e76176d427566666572546f426967496e74556e7369676e6564000503656e760a626967496e7453717274000303656e761776616c6964617465546f6b656e4964656e746966696572000603656e76126d42756666657253746f726167654c6f6164000503656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000203656e761b6d616e616765645472616e7366657256616c756545786563757465000c03656e7609626967496e74436d70000503656e760f6973536d617274436f6e7472616374000603656e760f6d616e6167656457726974654c6f67000303656e760e636865636b4e6f5061796d656e74000a03656e760a626967496e744c6f6732000603656e7612626967496e7446696e6973685369676e6564000003656e7614736d616c6c496e7446696e6973685369676e6564000f03656e7609626967496e74416273000303656e7609626967496e744e6567000303656e7609626967496e744d756c000203656e760a626967496e7454446976000203656e760a626967496e74544d6f64000203656e7609626967496e74416e64000203656e7608626967496e744f72000203656e7609626967496e74586f72000203656e7611676574426c6f636b54696d657374616d70000703656e760d676574426c6f636b4e6f6e6365000703656e760d676574426c6f636b526f756e64000703656e760d676574426c6f636b45706f6368000703656e76196d616e61676564476574426c6f636b52616e646f6d53656564000003656e761567657450726576426c6f636b54696d657374616d70000703656e761167657450726576426c6f636b4e6f6e6365000703656e761167657450726576426c6f636b526f756e64000703656e761167657450726576426c6f636b45706f6368000703656e761d6d616e6167656447657450726576426c6f636b52616e646f6d53656564000003656e761167657453686172644f6641646472657373000603656e76176d616e616765644765745374617465526f6f7448617368000003656e760d6d616e61676564536861323536000503656e76106d616e616765644b656363616b323536000503656e76106d616e61676564526970656d64313630000503656e76106d616e61676564566572696679424c53000b03656e76146d616e6167656456657269667945643235353139000b03656e76166d616e61676564566572696679536563703235366b31000b03656e761c6d616e61676564566572696679437573746f6d536563703235366b31001103656e76226d616e61676564456e636f6465536563703235366b314465725369676e6174757265000b03656e760f6d616e616765644372656174654543000603656e7616676574507269764b6579427974654c656e6774684543000603656e76056164644543001203656e7608646f75626c654543001303656e760b69734f6e43757276654543000b03656e76136d616e616765645363616c61724d756c744543001003656e76176d616e616765645363616c6172426173654d756c744543001103656e76106d616e616765644d61727368616c4543001103656e761a6d616e616765644d61727368616c436f6d707265737365644543001103656e76126d616e61676564556e6d61727368616c4543001103656e761c6d616e61676564556e6d61727368616c436f6d707265737365644543001103656e76146d616e6167656447656e65726174654b65794543001103656e76106d42756666657253657452616e646f6d000503656e76136d42756666657253657442797465536c696365001103656e76176d616e6167656447657445534454546f6b656e44617461001403656e760d626967496e744973496e743634000603656e760e626967496e74476574496e743634000e03656e760a626967496e745369676e000603656e76136d42756666657247657442797465536c696365001103656e76106d616e616765644173796e6343616c6c001503e705e50500040506040003031303130605030302050503150303020306000315040305030603030603030306020203001617180301031918151504041a000404000411051b150a030b0b0b030b000b030615030b060b060b0405150b0305020b0e020b0b040500131c060004040b0b04110b040406040606040b0411030b04000604040504000e0404000300000a0306001d03000300030006110303030300030a0003020615021e061503130004030202000b031501020203060605150203031f052005030303060505030303030506060401060215020406110200060e06060606060606060303030202000200051b0505050503050315050215010b0315050002050503050b02050505061503020206150311030603150303030b150b0503050305030202050202030203150302030600010306211f0618051b1d1b000402150606031302061505001e0505051a030622021a1a16030b03220213030d1305000606000300030402030a03031306032306020003060b05000000030313000a0a00000000060404040004000404000a0a0a0a0a0a0a0a0a0a0a0a0a030a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a060a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a000b0b020a0405017001010105030100030616037f01418080080b7f004192e7080b7f0041a0e7080b07cc44fa02066d656d6f7279020004696e697400fa031070616e6963576974684d65737361676500fb030a636f756e745f6f6e657300fd0319656e64706f696e745f776974685f6d757461626c655f61726700fe030d737172745f6269675f75696e7400ff030d6c6f67325f6269675f75696e740080040b706f775f6269675f696e740081040c706f775f6269675f75696e740082040f6269675f75696e745f746f5f7536340083041562696775696e745f6f76657277726974655f7536340085040d6269675f75696e745f7a65726f008604136269675f75696e745f66726f6d5f7536345f310087041162696775696e745f66726f6d5f753132380088041c6269675f75696e745f66726f6d5f6d616e616765645f6275666665720089040c6269675f696e745f7a65726f008a04126269675f696e745f66726f6d5f6936345f31008b040f6269675f75696e745f65715f753634008c040e6269675f696e745f746f5f693634008d0414626967696e745f6f76657277726974655f693634008e04106269675f696e745f746f5f7061727473008f04146269675f696e745f66726f6d5f62696775696e740090040b6164645f6269675f696e74009104146164645f6269675f696e745f6269675f75696e74009204146164645f6269675f75696e745f6269675f696e74009304186164645f6269675f696e745f6269675f75696e745f726566009404186164645f6269675f75696e745f6269675f696e745f7265660095040f6164645f6269675f696e745f7265660096040c6164645f6269675f75696e74009704106164645f6269675f75696e745f7265660098040b7375625f6269675f696e740099040f7375625f6269675f696e745f726566009a040c7375625f6269675f75696e74009b04107375625f6269675f75696e745f726566009c040b6d756c5f6269675f696e74009d040f6d756c5f6269675f696e745f726566009e040c6d756c5f6269675f75696e74009f04106d756c5f6269675f75696e745f72656600a0040b6469765f6269675f696e7400a1040f6469765f6269675f696e745f72656600a2040c6469765f6269675f75696e7400a304106469765f6269675f75696e745f72656600a4040b72656d5f6269675f696e7400a5040f72656d5f6269675f696e745f72656600a6040c72656d5f6269675f75696e7400a7041072656d5f6269675f75696e745f72656600a804126164645f61737369676e5f6269675f696e7400a904166164645f61737369676e5f6269675f696e745f72656600aa04136164645f61737369676e5f6269675f75696e7400ab04127375625f61737369676e5f6269675f696e7400ac04167375625f61737369676e5f6269675f696e745f72656600ad04137375625f61737369676e5f6269675f75696e7400ae04126d756c5f61737369676e5f6269675f696e7400af04136d756c5f61737369676e5f6269675f75696e7400b004126469765f61737369676e5f6269675f696e7400b104136469765f61737369676e5f6269675f75696e7400b2041272656d5f61737369676e5f6269675f696e7400b3041372656d5f61737369676e5f6269675f75696e7400b404106269745f616e645f6269675f75696e7400b504146269745f616e645f6269675f75696e745f72656600b6040f6269745f6f725f6269675f75696e7400b704136269745f6f725f6269675f75696e745f72656600b804106269745f786f725f6269675f75696e7400b904146269745f786f725f6269675f75696e745f72656600ba04176269745f616e645f61737369676e5f6269675f75696e7400bb04166269745f6f725f61737369676e5f6269675f75696e7400bc04176269745f786f725f61737369676e5f6269675f75696e7400bd040c7368725f6269675f75696e7400be04107368725f6269675f75696e745f72656600bf040c73686c5f6269675f75696e7400c0041073686c5f6269675f75696e745f72656600c104137368725f61737369676e5f6269675f75696e7400c2041373686c5f61737369676e5f6269675f75696e7400c304136765745f626c6f636b5f74696d657374616d7000c4040f6765745f626c6f636b5f6e6f6e636500c5040f6765745f626c6f636b5f726f756e6400c6040f6765745f626c6f636b5f65706f636800c704156765745f626c6f636b5f72616e646f6d5f7365656400c804186765745f707265765f626c6f636b5f74696d657374616d7000c904146765745f707265765f626c6f636b5f6e6f6e636500ca04146765745f707265765f626c6f636b5f726f756e6400cb04146765745f707265765f626c6f636b5f65706f636800cc041a6765745f707265765f626c6f636b5f72616e646f6d5f7365656400cd040a6765745f63616c6c657200ce04116765745f6f776e65725f6164647265737300cf04146765745f73686172645f6f665f6164647265737300d0041169735f736d6172745f636f6e747261637400d104136765745f73746174655f726f6f745f6861736800d2040b6765745f74785f6861736800d3040c6765745f6761735f6c65667400d4041f6765745f63756d756c617465645f76616c696461746f725f7265776172647300d50410636f6465635f6572725f66696e69736800d60415636f6465635f6572725f73746f726167655f6b657900d70415636f6465635f6572725f73746f726167655f67657400d80415636f6465635f6572725f73746f726167655f73657400d90415636f6465635f6572725f6576656e745f746f70696300da0414636f6465635f6572725f6576656e745f6461746100db0417636f6465635f6572725f636f6e74726163745f696e697400dc0417636f6465635f6572725f636f6e74726163745f63616c6c00dd040e636f6d707574655f73686132353600de0411636f6d707574655f6b656363616b32353600df0411636f6d707574655f726970656d6431363000e004147665726966795f626c735f7369676e617475726500e104187665726966795f656432353531395f7369676e617475726500e2041a7665726966795f736563703235366b315f7369676e617475726500e304217665726966795f637573746f6d5f736563703235366b315f7369676e617475726500e4041f636f6d707574655f736563703235366b315f6465725f7369676e617475726500e504086563686f5f75363400e604086563686f5f69363400e704086563686f5f69333200e804086563686f5f75333200e9040a6563686f5f6973697a6500ea04076563686f5f693800eb04076563686f5f753800ec04096563686f5f626f6f6c00ed040d6563686f5f6f70745f626f6f6c00ee040c6563686f5f6e6f7468696e6700ef040d6563686f5f61727261795f753800f004146563686f5f6d756c74695f76616c75655f75333200f104176563686f5f6d756c74695f76616c75655f7475706c657300f204126563686f5f7365725f6578616d706c655f3200f304106563686f5f73696d706c655f656e756d00f4041c66696e6973685f73696d706c655f656e756d5f76617269616e745f3100f504136563686f5f6e6f6e5f7a65726f5f7573697a6500f6041c6563686f5f736f6d655f617267735f69676e6f72655f6f746865727300f7040d6563686f5f617272617976656300f8040d6563686f5f6269675f75696e7400f9040c6563686f5f6269675f696e7400fa04136563686f5f6d616e616765645f62756666657200fb04146563686f5f6d616e616765645f6164647265737300fc04186563686f5f6269675f696e745f6d616e616765645f76656300fd04126563686f5f6269675f696e745f7475706c6500fe04136563686f5f6269675f696e745f6f7074696f6e00ff041b6563686f5f7475706c655f696e746f5f6d756c7469726573756c740080051f6563686f5f6d616e616765645f7665635f6f665f6d616e616765645f766563008105246563686f5f6d616e616765645f7665635f6f665f746f6b656e5f6964656e7469666965720082051f6563686f5f6d616e616765645f6173796e635f726573756c745f656d707479008305176563686f5f7661726167735f6d616e616765645f73756d00840512636f6d707574655f6765745f76616c75657300850511636f6d707574655f6372656174655f656300860515636f6d707574655f6765745f65635f6c656e67746800870520636f6d707574655f6765745f707269765f6b65795f627974655f6c656e6774680088050e636f6d707574655f65635f61646400890511636f6d707574655f65635f646f75626c65008a0516636f6d707574655f69735f6f6e5f63757276655f6563008b0513636f6d707574655f7363616c61725f6d756c74008c0518636f6d707574655f7363616c61725f626173655f6d756c74008d0512636f6d707574655f6d61727368616c5f6563008e051d636f6d707574655f6d61727368616c5f636f6d707265737365645f6563008f0514636f6d707574655f756e6d61727368616c5f65630090051f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f656300910517636f6d707574655f67656e65726174655f6b65795f6563009205096c6f674576656e74410093050f6c6f674576656e7441526570656174009405096c6f674576656e7442009505136f6e6c795f6f776e65725f656e64706f696e740096051a6f6e6c795f757365725f6163636f756e745f656e64706f696e740097050e726571756972655f657175616c730098050873635f70616e6963009905136d616464726573735f66726f6d5f6172726179009a051c6d616464726573735f66726f6d5f6d616e616765645f627566666572009b050b6d6275666665725f6e6577009c050e6d6275666665725f636f6e636174009d05126d6275666665725f636f70795f736c696365009e05126d6275666665725f7365745f72616e646f6d009f050a6d6275666665725f657100a005146d616e616765645f616464726573735f7a65726f00a105126d616e616765645f616464726573735f657100a2050f6d616e616765645f7665635f6e657700a305186d616e616765645f7665635f62696775696e745f7075736800a405166d616e616765645f7665635f62696775696e745f657100a505186d616e616765645f7665635f616464726573735f7075736800a6050f6d616e616765645f7665635f73657400a705126d616e616765645f7665635f72656d6f766500a805106d616e616765645f7665635f66696e6400a905146d616e616765645f7665635f636f6e7461696e7300aa05166d616e616765645f7665635f61727261795f7075736800ab05146d616e616765645f7265665f6578706c6963697400ac051073746f726167655f726561645f72617700ad051173746f726167655f77726974655f72617700ae051973746f726167655f726561645f66726f6d5f6164647265737300af050a6c6f61645f627974657300b0050d6c6f61645f6269675f75696e7400b1050c6c6f61645f6269675f696e7400b205086c6f61645f75363400b3050a6c6f61645f7573697a6500b405086c6f61645f69363400b505096c6f61645f626f6f6c00b605096c6f61645f6164647200b7050d6c6f61645f6f70745f6164647200b8051169735f656d7074795f6f70745f6164647200b9050f6765745f6e725f746f5f636c65617200ba0513636c6561725f73746f726167655f76616c756500bb050a6c6f61645f7365725f3200bc05096c6f61645f6d61703100bd05096c6f61645f6d61703200be05096c6f61645f6d61703300bf05156c6f61645f66726f6d5f616464726573735f72617700c0050b73746f72655f627974657300c1050e73746f72655f6269675f75696e7400c2050d73746f72655f6269675f696e7400c3050b73746f72655f7573697a6500c4050973746f72655f69333200c5050973746f72655f75363400c6050973746f72655f69363400c7050a73746f72655f626f6f6c00c8050a73746f72655f6164647200c9050e73746f72655f6f70745f6164647200ca050b73746f72655f7365725f3200cb050a73746f72655f6d61703100cc050a73746f72655f6d61703200cd050a73746f72655f6d61703300ce051273746f72655f72657365727665645f69363400cf051773746f72655f72657365727665645f6269675f75696e7400d0051573746f72655f72657365727665645f7665635f753800d1051b616464726573735f746f5f69645f6d61707065725f6765745f696400d20524616464726573735f746f5f69645f6d61707065725f6765745f69645f6e6f6e5f7a65726f00d30520616464726573735f746f5f69645f6d61707065725f6765745f6164647265737300d4051d616464726573735f746f5f69645f6d61707065725f636f6e7461696e7300d50518616464726573735f746f5f69645f6d61707065725f73657400d60525616464726573735f746f5f69645f6d61707065725f6765745f69645f6f725f696e7365727400d70521616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f696400d80526616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f6164647265737300d9050d6765744c6973744d617070657200da05126c6973744d6170706572507573684261636b00db05136c6973744d61707065725075736846726f6e7400dd05126c6973744d6170706572506f7046726f6e7400de05116c6973744d6170706572506f704261636b00df050f6c6973744d617070657246726f6e7400e0050e6c6973744d61707065724261636b00e105136c6973744d617070657250757368416674657200e205146c6973744d6170706572507573684265666f726500e305146c6973744d617070657252656d6f76654e6f646500e405186c6973744d617070657252656d6f76654e6f64654279496400e505126c6973744d617070657253657456616c756500e605166c6973744d617070657253657456616c75654279496400e705176c6973744d617070657249746572617465427948616e6400e805176c6973744d61707065724974657261746542794974657200e9050c71756575655f6d617070657200ea051671756575655f6d61707065725f707573685f6261636b00eb051671756575655f6d61707065725f706f705f66726f6e7400ec051271756575655f6d61707065725f66726f6e7400ed050a6d61705f6d617070657200ee050f6d61705f6d61707065725f6b65797300ef05116d61705f6d61707065725f76616c75657300f005116d61705f6d61707065725f696e7365727400f105176d61705f6d61707065725f636f6e7461696e735f6b657900f2050e6d61705f6d61707065725f67657400f305116d61705f6d61707065725f72656d6f766500f4052c6d61705f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e7400f505226d61705f6d61707065725f656e7472795f6f725f696e736572745f64656661756c7400f6051b6d61705f6d61707065725f656e7472795f616e645f6d6f6469667900f705236d61705f6d61707065725f656e7472795f6f725f696e736572745f776974685f6b657900f805176d61705f73746f726167655f6d61707065725f7669657700f905216d61705f73746f726167655f6d61707065725f696e736572745f64656661756c7400fa051f6d61705f73746f726167655f6d61707065725f636f6e7461696e735f6b657900fb05166d61705f73746f726167655f6d61707065725f67657400fc051f6d61705f73746f726167655f6d61707065725f696e736572745f76616c756500fd051c6d61705f73746f726167655f6d61707065725f6765745f76616c756500fe05196d61705f73746f726167655f6d61707065725f72656d6f766500ff05186d61705f73746f726167655f6d61707065725f636c656172008006346d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e74008106386d61705f73746f726167655f6d61707065725f656e7472795f616e645f6d6f646966795f696e6372656d656e745f6f725f64656661756c740082062a6d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174650083060a7365745f6d6170706572008406117365745f6d61707065725f696e73657274008506137365745f6d61707065725f636f6e7461696e73008606117365745f6d61707065725f72656d6f76650087061a6d61705f6d795f73696e676c655f76616c75655f6d6170706572008806226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f31008906226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f32008a062c6d795f73696e676c655f76616c75655f6d61707065725f73756274726163745f776974685f72657175697265008b06236d795f73696e676c655f76616c75655f6d61707065725f7365745f69665f656d707479008c0619636c6561725f73696e676c655f76616c75655f6d6170706572008d06246765745f66726f6d5f616464726573735f73696e676c655f76616c75655f6d6170706572008e062769735f656d7074795f61745f616464726573735f73696e676c655f76616c75655f6d6170706572008f06237261775f627974655f6c656e6774685f73696e676c655f76616c75655f6d61707065720090060a7665635f6d61707065720091060f7665635f6d61707065725f707573680092060e7665635f6d61707065725f676574009306197665635f6d61707065725f6765745f61745f616464726573730094060e7665635f6d61707065725f6c656e009506197665635f6d61707065725f6c656e5f61745f6164647265737300960614746f6b656e5f617474726962757465735f73657400970617746f6b656e5f617474726962757465735f7570646174650098061f746f6b656e5f617474726962757465735f6765745f617474726962757465730099061a746f6b656e5f617474726962757465735f6765745f6e6f6e6365009a0616746f6b656e5f617474726962757465735f636c656172009b061f746f6b656e5f617474726962757465735f6861735f61747472696275746573009c06106164645f746f5f77686974656c697374009d061572656d6f76655f66726f6d5f77686974656c697374009e060e636865636b5f636f6e7461696e73009f0619636865636b5f636f6e7461696e735f61745f6164647265737300a00610726571756972655f636f6e7461696e7300a1061b726571756972655f636f6e7461696e735f61745f6164647265737300a2061f69737375655f66756e6769626c655f64656661756c745f63616c6c6261636b00a3061e69737375655f66756e6769626c655f637573746f6d5f63616c6c6261636b00a4062069737375655f616e645f7365745f616c6c5f726f6c65735f66756e6769626c6500a506187365745f6c6f63616c5f726f6c65735f66756e6769626c6500a6060d6d696e745f66756e6769626c6500a706166d696e745f616e645f73656e645f66756e6769626c6500a8060d6275726e5f66756e6769626c6500a906146765745f62616c616e63655f66756e6769626c6500aa061b726571756972655f73616d655f746f6b656e5f66756e6769626c6500ab061f726571756972655f616c6c5f73616d655f746f6b656e5f66756e6769626c6500ac061267657446756e6769626c65546f6b656e496400ad061c69737375655f616e645f7365745f616c6c5f726f6c65735f6d65746100ae06176d61707065725f6e66745f7365745f746f6b656e5f696400af06116d61707065725f6e66745f63726561746500b0061a6d61707065725f6e66745f6372656174655f616e645f73656e6400b106176d61707065725f6e66745f6164645f7175616e7469747900b206206d61707065725f6e66745f6164645f7175616e746974795f616e645f73656e6400b3060f6d61707065725f6e66745f6275726e00b406166d61707065725f6e66745f6765745f62616c616e636500b5061b6d61707065725f6765745f746f6b656e5f6174747269627574657300b606156765744e6f6e46756e6769626c65546f6b656e496400b70615696e69745f756e697175655f69645f6d617070657200b80614756e697175655f69645f6d61707065725f67657400b9061c756e697175655f69645f6d61707065725f737761705f72656d6f766500ba0614756e697175655f69645f6d61707065725f73657400bb0610756e697175655f69645f6d617070657200bc06116d616e616765645f7374727563745f657100bd060c6f766572666c6f775f75313600be060f6e6f5f6f766572666c6f775f69313600bf060c6f766572666c6f775f69313600c00615746f6b656e5f6964656e7469666965725f65676c6400c1061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3100c2061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3200c306136e6f6e5f7a65726f5f7573697a655f6974657200c406146e6f6e5f7a65726f5f7573697a655f6d6163726f00c506147365745f636f6e74726163745f6164647265737300c6061369735f656d7074795f61745f6164647265737300c70613636f6e7461696e735f61745f6164647265737300c8060e6c656e5f61745f6164647265737300c90625636865636b5f696e7465726e616c5f636f6e73697374656e63795f61745f6164647265737300ca060863616c6c4261636b00cb06196563686f5f7661726167735f6d616e616765645f656167657200f104136269675f75696e745f66726f6d5f7536345f32008704126269675f696e745f66726f6d5f6936345f32008b041c69735f656d7074795f73696e676c655f76616c75655f6d6170706572008e060e6f766572666c6f775f7573697a6500be060b6f766572666c6f775f753800be060c6f766572666c6f775f75333200be060c6f766572666c6f775f75363400be060e6f766572666c6f775f6973697a6500c0060b6f766572666c6f775f693800c0060c6f766572666c6f775f69333200c0060c6f766572666c6f775f69363400c0060a6563686f5f7573697a6500e904116c6f67325f6269675f75696e745f726566008004176164645f61737369676e5f6269675f75696e745f72656600ab04177375625f61737369676e5f6269675f75696e745f72656600ae04166d756c5f61737369676e5f6269675f696e745f72656600af04176d756c5f61737369676e5f6269675f75696e745f72656600b004166469765f61737369676e5f6269675f696e745f72656600b104176469765f61737369676e5f6269675f75696e745f72656600b2041672656d5f61737369676e5f6269675f696e745f72656600b3041772656d5f61737369676e5f6269675f75696e745f72656600b4041b6269745f616e645f61737369676e5f6269675f75696e745f72656600bb041a6269745f6f725f61737369676e5f6269675f75696e745f72656600bc041b6269745f786f725f61737369676e5f6269675f75696e745f72656600bd04177368725f61737369676e5f6269675f75696e745f72656600c2041773686c5f61737369676e5f6269675f75696e745f72656600c30411737172745f6269675f75696e745f72656600ff03206269675f75696e745f66726f6d5f6d616e616765645f6275666665725f726566008904116e6f5f6f766572666c6f775f7573697a6500bf060e6e6f5f6f766572666c6f775f753800bf060f6e6f5f6f766572666c6f775f75333200bf060f6e6f5f6f766572666c6f775f75363400bf060f6e6f5f6f766572666c6f775f75313600bf06116e6f5f6f766572666c6f775f6973697a6500bf060e6e6f5f6f766572666c6f775f693800bf060f6e6f5f6f766572666c6f775f69333200bf060f6e6f5f6f766572666c6f775f69363400bf060f706f775f6269675f696e745f72656600810410706f775f6269675f75696e745f7265660082040a5f5f646174615f656e6403010b5f5f686561705f6261736503020ae88804e5050b002000108080808000000b1000418080888000410f10ee808080000b1901017f10f08080800022022000200110a4808080001a20020b2201017f10f0808080002201420010818080800020012001200010828080800020010b3901027f024041002802ac988880002200417f6a220120004e0d00410020013602ac9888800020010f0b41e0978880004121108282808000000b4c01027f23808080800041106b2201248080808000200141086a418f80888000411610ee80808000220210f2808080002000200129030837020020002002360208200141106a2480808080000b960101027f23808080800041106b2202248080808000410021030240200110ca82808000220110af828080000d00024020011092808080004107470d002002410036000b2002410036020820014100200241086a410710aa818080001a41012103200241086a410741c78f888000410710d8818080000d010b410221030b2000200136020420002003360200200241106a2480808080000b0d0020002001108380808000000b40000240024020022001490d00200220044d0d012002200410f580808000000b2001200210f580808000000b2000200220016b3602042000200320016a3602000b090010fc83808000000b40000240024020022001490d00200220044d0d012002200410f580808000000b2001200210f580808000000b2000200220016b3602042000200320016a3602000b1701017f108480808000220120001085808080001a20010b0f002000200110868080800041004a0b0d0020002001108380808000000b7701037f23808080800041106b220224808080800002400240200128020422030d00410021010c010b200241086a20012802002204280200200310fb808080002001200228020c360204410121012004280200200310fc8080800021030b2000200336020420002001360200200241106a2480808080000baf0101017f23808080800041206b22032480808080002003410c6a200141ae87888000410b200210fb828080001092818080002003410c6a10f88280800021022003410c6a10f88280800021010240200328020c200328021010c581808000450d0002402003411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200136020420002002360200200341206a2480808080000f0b41a580888000410e10a082808000000b1a00200041b9878880004106200110fb8280800010c6828080000b1700024020004102490d00200110f7808080001a0b20000b15002000200141db80888000411b10ff80808000000b22002000200110ee80808000220120022003108e808080001a2001108080808000000ba30101037f23808080800041306b22022480808080000240024020012802000d00410021030c010b2002411c6a410c6a2001410c6a290200370200410121032002410136021c200220012902043702202002410c6a2002411c6a10818180800020012001280214280200200241146a22042802001082818080002000410c6a20042902003702002000200229020c3702040b20002003360200200241306a2480808080000b3500024020012802000d0041a990888000412b108282808000000b20002001290204370200200041086a2001410c6a2902003702000b3101017f41002103024020012002108a838080000d00200041046a20012002108c83808000410121030b200020033602000b1300200120001084818080001087808080001a0b1701017f10f0808080002201200010ae808080001a20010b990101037f23808080800041106b22012480808080000240024041002d00c4e688800022020d00410041013a00c4e6888000410041003602c0e6888000200141086a41001086818080002001280208200128020c41e097888000410010878180800010888180800021030c010b41e097888000410010ee8080800021030b20002003360200200020024101733a0004200141106a2480808080000b4f01017f23808080800041106b2202248080808000200241086a41b0988880004190ce002001109c82808000200228020c21012000200228020836020020002001360204200241106a2480808080000b2500024020012003470d0020002002200110ce868080001a0f0b2001200310f580808000000b1d01017f10f080808000220041e097888000410010a4808080001a20000b130020002001108a818080001088808080001a0b6301017f23808080800041106b2202248080808000200220013a000c20022000360208200241086a10c38280800020022802082101024020022d000c450d00410041003602c0e6888000410041003a00c4e68880000b200241106a24808080800020010b120020002001108c81808000108d818080000b1701017f200010f08080800022011098808080001a20010b3701017f20011092808080002102200041106a41003a00002000410c6a20023602002000200136020820002002360204200041003602000b12002000108f8180800020011090818080000b1701017f10f0808080002201200010ab808080001a20010b6701027f23808080800041106b220224808080800020022000108082808000220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410978280800020012000108582808000200241106a2480808080000b1200200010848180800020011090818080000b120020002001109381808000108d818080000b1701017f200010f080808000220110b2808080001a20010b4d01017f23808080800041106b2203248080808000200341086a20011093818080002002109581808000200328020c21022000200328020836020020002002360204200341106a2480808080000b7801027f23808080800041106b220324808080800002402001109280808000220441084b0d00200341086a20022004109f828080002001410020032802082202200328020c220410aa818080001a2000200436020420002002360200200341106a2480808080000f0b41a580888000410e10a082808000000b0d002000200110f380808000000b0b00200010ec80808000000b1c0020002001200220031088818080001088818080001099818080000bfe0101027f23808080800041106b22062480808080001088818080002107200110f7808080002101200310ef8080800021032006200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484843702042006200141187420014180fe03714108747220014108764180fe0371200141187672723602002006200341187420034180fe03714108747220034108764180fe03712003411876727236020c200720064110108e808080001a20002007420020042005108f808080001a200641106a2480808080000b6701027f10888180800022032000109b8180800002400240200150450d0041ad818880002100410d21040c010b20032001109c8180800041ba818880002100410b21040b20032002109d818080001089808080002000200410ee808080002003109e818080001a0b19001088818080001a2000200110f78080800010b7818080000b1e01017f10888180800022022001109d828080002000200210b7818080000b19001088818080001a2000200110848180800010b7818080000b3301017f4167108a80808000200041674200108b808080002001200210f0808080002203108c808080001a108d8080800020030b6701027f10888180800022032000109b8180800002400240200150450d0041c5818880002100410d21040c010b20032001109c8180800041d2818880002100411221040b20032002109d818080001089808080002000200410ee808080002003109e818080001a0b1100200020012002200310a181808000000b1100200020012002200310eb80808000000b1401017f10f080808000220010908080800020000b1401017f10f080808000220010918080800020000b4701027f10f080808000210320011092808080002104200010a581808000200141f1e68880001093808080001a41d1e688800041f1e688800020042002200310948080800020030b1100200041d1e68880001093808080001a0b1401017f10f080808000220010958080800020000b3601017f024041002d00cce68880002200450d00417541ffffffff0720001b0f0b410041013a00cce6888000417510968080800041750b870203097f017e017f23808080800041206b22012480808080000240024010a98180800022021092808080004170714110470d004100210320021092808080002104200141106a2105410121060340200341106a220720044b0d02200542003703002001420037030820022003200141086a411010aa818080001a2001410036021c20064101712108200141086a2001411c6a10ab818080002109200141086a2001411c6a10ac81808000210a200141086a2001411c6a10ab81808000210b200721034100210620080d000b4101410110f580808000000b4191828880004122108380808000000b2000200b36020c200020093602082000200a370300200141206a2480808080000b3601017f024041002d00d0e68880002200450d00416b41ffffffff0720001b0f0b410041013a00d0e6888000416b109780808000416b0b1300200020012003200210ea808080004100470ba00101037f23808080800041106b22022480808080002002410036020c02402001280200220341046a220420034f0d0041c094888000411c108282808000000b2002200320042000411010f4808080002002410c6a41042002280200200228020410878180800020012004360200200228020c2101200241106a248080808000200141187420014180fe03714108747220014108764180fe0371200141187672720bd40102037f017e23808080800041106b22022480808080002002420037030802402001280200220341086a220420034f0d0041c094888000411c108282808000000b2002200320042000411010f480808000200241086a4108200228020020022802041087818080002001200436020020022903082105200241106a248080808000200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe038320054238888484840b4601017f41b382888000411710ee80808000220420002001108e808080001a200441ca828880004103108e808080001a200420022003108e808080001a2004108080808000000b1d0002401099808080000d000f0b41cd828880004125108380808000000bda0101027f23808080800041106b2202248080808000024002400240200141998f888000410610b081808000220341ebde01460d0020030d010b200141998f888000410610b181808000108c81808000210120024100360204410421030c010b02400240200128020041002802c8e6888000480d0010888180800021010c010b200141998f888000410610b28180800021010b2002200336020820024101360204410821030b200241046a20036a200136020020002002290204370200200041086a200241046a41086a280200360200200241106a2480808080000b180020002001200210b1818080002001200210d5818080000b3901017f02402000280200220341002802c8e6888000480d002001200241f282888000411110ad81808000000b2000200341016a36020020030b140020002001200210b181808000108c818080000b5301017f4100210202400240200128020041002802c8e6888000480d00410121020c010b200141c08f888000410310b18180800041c08f888000410310b48180800021010b20002001360204200020023602000b3701017e02402000109b8080800022034280808080787c42ffffffff6f560d0020012002418990888000411210ad81808000000b2003a70b1000200041002802c8e68880003602000b3b01017f108881808000210302400340200028020041002802c8e68880004e0d01200320002001200210b28180800010b7818080000c000b0b20030b5601017f23808080800041106b22022480808080002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104108e808080001a200241106a2480808080000b3f01017f108881808000210102400340200028020041002802c8e68880004e0d012001200041ae8b888000410110b08180800010b7818080000c000b0b20010b7201037f410021040240024020012002200310b08180800022050d000c010b200541ebde01460d000240200128020041002802c8e6888000480d004101210410888180800021060c010b4101210420012002200310b28180800021060b2000200636020820002005360204200020043602000b5301017f4100210202400240200128020041002802c8e6888000480d00410121020c010b200141bd8d888000410810b18180800041bd8d888000410810bb8180800021010b20002001360204200020023602000b2f0002402000108c8180800022001092808080004120460d002001200241ce8f888000411010ad81808000000b20000b410002402000419b90888000410e10bd8180800010f78080800022001092808080004120460d00419b90888000410e41ce8f888000411010ad81808000000b20000b8c0101027f23808080800041106b2203248080808000200341086a20002802002000280208220410be828080000240024020032802084101470d00200441016a22040d0141c094888000411c108282808000000b2001200241f282888000411110ad81808000000b200328020c210220002004360208200210f7808080002100200341106a24808080800020000b12002000419b8e888000410b10bf818080000b140020002001200210bd8180800010f7808080000b2601017f41004102410141f48b888000410410c181808000220041ff01711b2000c04100481b0b3101017e02404100109b80808000220242807f7c42ff7d560d0020002001418990888000411210ad81808000000b2002a70b990202057f017e23808080800041206b220424808080800020042001108b81808000200441146a41046a2105410021064105210102400340024020010d00200641054f0d022002200341e68f888000411210ad81808000000b20042002200310c38180800021070240200641044b22080d00200520066a20073a0000200641016a21060b2008200710c4818080002001417f6a21010c000b0b2004290218210902402004280200200428020410c581808000450d000240200441106a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b20002009a722013b0000200020094218883d0003200041026a20014110763a0000200441206a2480808080000f0b2002200341a580888000410e10ad81808000000b4301017f23808080800041106b2203248080808000200341003a000f20002003410f6a41012001200210cf8180800020032d000f2102200341106a24808080800020020b3401017f23808080800041106b2202248080808000024020000d00200241106a2480808080000f0b2002410f6a10e283808000000b0d002000200110cd81808000450bba0202027f017e23808080800041206b2203248080808000410021040240024002404100109a808080000d000c010b2003410c6a4100108b81808000024002400240024002402003410c6a2001200210c38180800041ff017122040e0404010203000b2001200241b380888000410d10ad81808000000b2003410c6a2001200210c781808000ad2105410121040c020b2003410c6a2001200210c78180800021042003410c6a2001200210c781808000ad4220862004ad842105410221040c010b2003410c6a2001200210c781808000ad2105410321040b200328020c200328021010c581808000450d012003411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200537020420002004360200200341206a2480808080000f0b2001200241a580888000410e10ad81808000000b5002017f017e23808080800041106b22032480808080002003410036020c20002003410c6a41042001200210cf818080002003410c6a4104410010d0818080002104200341106a2480808080002004a70b0a002000109b808080000bc30101037f23808080800041206b22032480808080002003410c6a2001108b818080002003410c6a2002410210ca8180800021012003410c6a2002410210c78180800021042003410c6a2002410210cb8180800021050240200328020c200328021010c581808000450d0002402003411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b200020053602082000200436020420002001360200200341206a2480808080000f0b2002410241a580888000410e10ad81808000000b140020002001200210cb8180800010a2828080000b1a00200020002001200210c7818080002001200210e3818080000bca0101057f23808080800041206b22002480808080004101108c818080002101108881808000210241002103200110928080800021042000411c6a41003a0000200041186a200436020020002001360214200020043602102000410036020c037f02402003200410cd818080000d00024020002d001c450d00410041003602c0e6888000410041003a00c4e68880000b200041206a24808080800020020f0b20022000410c6a41af8b888000410310cb8180800010b78180800020002802102104200028020c21030c000b0b2100024020012000490d00200120006b0f0b41e0978880004121108282808000000bd50202057f017e23808080800041c0006b2201248080808000200141003602282001412c6a4100108b818080002001411c6a21024101210302400340200128022c22042001280230220510c5818080000d01200141003602082001412c6a200141086a410441ba8f888000410210cf81808000200141086a4104410110d0818080002106024020034104460d00200220063e0200200241046a210220012003360228200341016a21030c010b0b41ba8f888000410241f88f888000411110ad81808000000b02402004200510c581808000450d00200141086a41086a22032001411c6a41086a2902003703002001200129021c37030802402001413c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b20002001290308370200200041086a2003290300370200200141c0006a2480808080000f0b41ba8f888000410241a580888000410e10ad81808000000b500002400240200041086a20002802002001200210c1828080000d002000280200220120026a220220014f0d0141c094888000411c108282808000000b2003200410d383808000000b200020023602000b4a01017e4200210302402001450d0002402002450d0020002c0000410775ac21030b03402001450d012001417f6a210120034208862000310000842103200041016a21000c000b0b20030b0a002000108c818080000bc20301077f23808080800041e0006b220124808080800041002102200141046a4100108b818080004120210302400340024020030d00200241204f0d0241968e888000410541e68f888000411210ad81808000000b200141046a41968e888000410510c381808000210402402002411f4b22050d00200141386a20026a20043a0000200241016a21020b2005200410c4818080002003417f6a21030c000b0b200141186a41186a2203200141386a41186a2202290200370300200141186a41106a2204200141386a41106a2205290200370300200141186a41086a2206200141386a41086a22072902003703002001200129023837031802402001280204200128020810c581808000450d00200220032903003703002005200429030037030020072006290300370300200120012903183703380240200141046a41106a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b20002001290338370000200041186a200141386a41186a290300370000200041106a200141386a41106a290300370000200041086a200141386a41086a290300370000200141e0006a2480808080000f0b41968e888000410541a580888000410e10ad81808000000b1200410041bc8d888000410110b4818080000b3401017f0240410041be8f888000410210d58180800022000d0041be8f888000410241b380888000410d10ad81808000000b20000b3101017e02402000109e80808000220342ffffffff0f560d002003a70f0b2001200241a580888000410e10ad81808000000b0e0020002001200210bb818080000b7301027f23808080800041106b220024808080800002404100108c8180800022011092808080004104470d002000410036020c200141002000410c6a410410aa818080001a41feffffff0720012000410c6a410441e186888000410410d8818080001b21010b200041106a24808080800020010b2301017f41002104024020012003470d0020002002200110de838080004521040b20040bc60101047f23808080800041206b22032480808080002000108c818080002104108881808000210541002106200410928080800021002003411c6a41003a0000200341186a200036020020032004360214200320003602102003410036020c037f02402006200010cd818080000d00024020032d001c450d00410041003602c0e6888000410041003a00c4e68880000b200341206a24808080800020050f0b20052003410c6a2001200210ca8180800010b78180800020032802102100200328020c21060c000b0b9b0201027f23808080800041206b22002480808080002000410c6a4100108b818080004102210102400240200028020c200028021010c5818080000d00410221010240024002402000410c6a41bc8d888000410110c38180800041ff01710e020201000b41bc8d888000410141b380888000410d10ad81808000000b41002101024002402000410c6a41bc8d888000410110c38180800041ff01710e020201000b41bc8d888000410141b380888000410d10ad81808000000b410121010b200028020c200028021010c581808000450d010b02402000411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b200041206a24808080800020010f0b41bc8d888000410141a580888000410e10ad81808000000b100041bc8d888000410110c1818080000b1601017f200010f0808080002201109c8080800020010b0a004100108c818080000b1601017f200010f0808080002201109d8080800020010bd70101037f23808080800041206b22012480808080002001410c6a2000108b818080002001410c6a41ab8f888000410a10c38180800021002001410c6a41ab8f888000410a10c38180800021022001410c6a41ab8f888000410a10c38180800021030240200128020c200128021010c581808000450d0002402001410c6a41106a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b200141206a2480808080002003411074200241ff017141087472200041ff0171720f0b41ab8f888000410a41a580888000410e10ad81808000000b4e01017f024002404103109a808080000d00410021000c010b410341fc8b888000410910e181808000220041ff01714105490d0041fc8b888000410941b380888000410d10ad81808000000b20000b2e01017e02402000109e80808000220342ff01560d002003a70f0b2001200241a580888000410e10ad81808000000bcc0101057f23808080800041206b2200248080808000410021014100108c8180800021021088818080002103200210928080800021042000411c6a41003a0000200041186a200436020020002002360214200020043602102000410036020c037f02402001200410cd818080000d00024020002d001c450d00410041003602c0e6888000410041003a00c4e68880000b200041206a24808080800020030f0b20032000410c6a412041b38b888000410210e38180800010b78180800020002802102104200028020c21010c000b0b870101027f23808080800041106b2204248080808000200441086a200028020820002802002205200110a4828080000240024020042802084101470d00200520016a220120054f0d0141c094888000411c108282808000000b2002200341d185888000410f10ad81808000000b200428020c210520002001360200200441106a24808080800020050bab0203027f017e017f23808080800041206b2202248080808000200241046a2001108b81808000200241046a41ab8f888000410a10ca81808000210320024200370318200241046a200241186a410841ab8f888000410a10cf81808000200241186a4108410010d0818080002104200241046a41ab8f888000410a10c78180800021011088818080002105024003402001450d012005200241046a41ab8f888000410a10c78180800010b7818080002001417f6a21010c000b0b02402002280204200228020810c581808000450d000240200241146a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200536020c2000200336020820002004370300200241206a2480808080000f0b41ab8f888000410a41a580888000410e10ad81808000000b0e0020002001200210d5818080000bf80101057f23808080800041206b2200248080808000410021014100108c818080002102108881808000210320021092808080002104200041186a41003a0000200041146a2004360200200020023602102000200436020c20004100360208037f02402001200410cd818080000d00024020002d0018450d00410041003602c0e6888000410041003a00c4e68880000b200041206a24808080800020030f0b2000200041086a41b38b888000410210cb81808000220441187420044180fe03714108747220044108764180fe03712004411876727236021c20032000411c6a4104108e808080001a200028020c2104200028020821010c000b0baf0101037f23808080800041206b22012480808080002001410c6a4100108b818080002001410c6a10e88180800021022001410c6a41ab8b888000410110cb8180800021030240200128020c200128021010c581808000450d0002402001411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200336020420002002360200200141206a2480808080000f0b41ab8b888000410141a580888000410e10ad81808000000b1800200041ab8b888000410110cb8180800010a1828080000bf00101057f23808080800041206b2200248080808000410021014100108c818080002102108881808000210320021092808080002104200041186a41003a0000200041146a2004360200200020023602102000200436020c20004100360208037f02402001200410cd818080000d00024020002d0018450d00410041003602c0e6888000410041003a00c4e68880000b200041206a24808080800020030f0b2000200041086a10e881808000220441187420044180fe03714108747220044108764180fe03712004411876727236021c20032000411c6a4104108e808080001a200028020c2104200028020821010c000b0bdf0201057f23808080800041206b2200248080808000410021014100108c818080002102108881808000210320021092808080002104200041186a41003a0000200041146a2004360200200020023602102000200436020c20004100360208037f02402001200410cd818080000d00024020002d0018450d00410041003602c0e6888000410041003a00c4e68880000b200041206a24808080800020030f0b200041086a41b38b888000410210c78180800021011088818080002102024003402001450d012000200041086a41b38b888000410210c781808000220441187420044180fe03714108747220044108764180fe03712004411876727236021c20022000411c6a4104108e808080001a2001417f6a21010c000b0b2000200241187420024180fe03714108747220024108764180fe03712002411876727236021c20032000411c6a4104108e808080001a200028020c2104200028020821010c000b0b4101017e0240024002402000109e8080800022024201560d00410021002002a70e020201020b20014101418990888000411210ad81808000000b410121000b20000b4a01017f4100210002404100109a80808000450d00410041bc8f888000410210e181808000220041ff01714103490d0041bc8f888000410241b380888000410d10ad81808000000b20000bf50101037f23808080800041206b2201248080808000410021022001410c6a4100108b8180800002400240200128020c200128021010c5818080000d000240024002402001410c6a41ab8b888000410110c38180800041ff017122020e020201000b41ab8b888000410141b380888000410d10ad81808000000b2001410c6a10e8818080002103410121020b200128020c200128021010c581808000450d010b02402001411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200336020420002002360200200141206a2480808080000f0b41ab8b888000410141a580888000410e10ad81808000000b0a002000109e808080000b3b01017e02404100109b8080800022004280808080787c42ffffffff6f560d0041bc8d8880004101418990888000411210ad81808000000b2000a70b1200410041bc8d888000410110e1818080000b2300024041002802c8e688800020004a0d000f0b4183838880004112108380808000000b1c00024020012000490d000f0b4183838880004112108380808000000b20000240109f808080002000470d000f0b4195838880004119108380808000000b2300024041002802c8e68880002000480d000f0b41f2828880004111108380808000000b11004100109f808080003602c8e68880000b2301017f200110f78180800021022000410036020820002002360204200020013602000b0d0020001080828080004102760b7c01017f23808080800041106b22012480808080002001108581808000200120012d00043a000c200120012802003602082000280208200141086a1090818080002000290300200141086a10f981808000200028020c200141086a109181808000200128020820012d000c108981808000200141106a2480808080000b870101017f23808080800041106b22022480808080002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108109782808000200241106a2480808080000b1200024020000d002001ad10a0808080000b0bac0101017f23808080800041106b22012480808080002001108581808000200120012d00043a000c200120012802003602082000280200200141086a1091818080002000280204200141086a1091818080002000280208200141086a109181808000200028020c200141086a1091818080002000280210200141086a1091818080002000280214200141086a10fc81808000200128020820012d000c108981808000200141106a2480808080000b5501017f23808080800041106b22022480808080002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104109782808000200241106a2480808080000bba0201017f23808080800041206b22012480808080000240024002400240024020002802000e0400010203000b420010a0808080000c030b2001108581808000200120012d00043a001c20012001280200360218200141186a410110fe818080002000280204200141186a10fc81808000200128021820012d001c1089818080000c020b200141086a108581808000200120012d000c3a001c20012001280208360218200141186a410210fe818080002000280204200141186a10fc818080002000280208200141186a10fc81808000200128021820012d001c1089818080000c010b200141106a108581808000200120012d00143a001c20012001280210360218200141186a410310fe818080002000280204200141186a10fc81808000200128021820012d001c1089818080000b200141206a2480808080000b3601017f23808080800041106b2202248080808000200220013a000f20002002410f6a4101109782808000200241106a2480808080000bd90101047f23808080800041206b2201248080808000200141086a108581808000200120012d000c3a001820012001280208360214200010808280800021024100210302400340200341046a22042003490d010240200420024b0d002001410036021c200020032001411c6a41041081828080001a200128021c220341187420034180fe03714108747220034108764180fe037120034118767272200141146a109181808000200421030c010b0b200128021420012d0018108981808000200141206a2480808080000f0b41c094888000411c108282808000000b0a0020001092808080000b1000200020012002200310aa818080000b090010fc83808000000b1200200010a180808000200110a1808080000b800101017f23808080800041106b22022480808080000240024020000d0041e097888000410010a2808080000c010b2002108581808000200220022d00043a000c20022002280200360208200241086a410110fe81808000200241086a2001108582808000200228020820022d000c1089818080000b200241106a2480808080000bc20101027f23808080800041106b220224808080800002400240024020002d0004450d002001108082808000210310cf838080002003490d01024041002802c0e6888000220020036a22032000490d00200241086a2000200310d083808000200141002002280208200228020c1081828080001a410020033602c0e68880000c030b41c094888000411c108282808000000b2000280200200110ae828080000c010b200010c3828080002000280200200110ae828080000b200241106a2480808080000b6a01017f23808080800041206b22012480808080002001200028020010808280800036021c200141003602182001200036021402400340200141086a200141146a1087828080002001280208450d01200128020c1088808080001a0c000b0b200141206a2480808080000bbf0101047f23808080800041106b22022480808080000240024002402001280204220341046a22042003490d00200420012802084d0d01410021010c020b41c094888000411c108282808000000b200128020021052002410036020c200528020020032002410c6a41041081828080001a200228020c210320012004360204200341187420034180fe03714108747220034108764180fe0371200341187672722103410121010b2000200336020420002001360200200241106a2480808080000b190041ae83888000411e41db80888000411b10ff80808000000b340002402000280200450d002000280204200041086a28020010f980808000000b2000280204200041086a280200108a828080000b800101017f23808080800041106b22022480808080000240024020000d0041e097888000410010a2808080000c010b2002108581808000200220022d00043a000c20022002280200360208200241086a410110fe818080002001200241086a10fc81808000200228020820022d000c1089818080000b200241106a2480808080000b300020002001200210a38080800002402000108c8280800041ff0171450d000f0b41cc838880004130108380808000000b1900410041024101200010e98080800022001b20004100481b0b2c00200020012002108e82808000200041818488800041fc8388800020031b4104410520031b108e828080000b140020002001200210ee8080800010b7818080000b8803010b7f23808080800041206b220624808080800020052d000b210720052d000a210820052d0009210920052d0008210a20052d0007210b20052d0006210c20052d0005210d20052d0004210e2005280200210f200641e38488800010908280800041a6858880004105109182808000200641186a22102001360200200628020422052002109b8180800020052003109b818080001088818080001a2005200410848180800010b7818080002005200f10928280800020054185848880004109200e108d828080002005418e848880004107200d108d8280800020054195848880004108200c108d828080002005419d848880004107200b108d82808000200541a4848880004107200a108d82808000200541ab84888000410e2009108d82808000200541b984888000410a2008108d82808000200541c38488800041122007108d82808000200041186a2010290300370300200041106a200641106a290300370300200041086a200641086a29030037030020002006290300370300200641206a2480808080000b0c002000412010ee808080000b32002002200310ee80808000210310888180800021022000427f3703082000200236020420002003360200200020013602100b1f01017f10888180800022022001ad109d828080002000200210b7818080000be90101027f23808080800041206b2205248080808000200541e3848880001090828080004190858880004116109182808000200541186a22062001360200200528020422012002109b8180800020002005290308370308200041106a200541106a290300370300200041186a20062903003703002005280200210220012003109b81808000200441ff0171410274220341d0938880006a2802002104200341e4938880006a280200210310888180800022062003200410a4808080001a2001200610b781808000200141001092828080002000200136020420002002360200200541206a2480808080000bf00101047f23808080800041306b2201248080808000024020002802102202450d001095828080002103200141106a108581808000200120012d00143a00202001200128021036021c200041146a28020022042001411c6a1096828080002001411c6a20022004109782808000200041186a2202280200220410f7818080002001411c6a1096828080002001200410808280800036022c200141003602282001200236022402400340200141086a200141246a1087828080002001280208450d01200128020c2001411c6a1090818080000c000b0b2003200128021c20012d00201098828080000b2000109982808000000b2701027f10a381808000210041c785888000410a10ee80808000220120001085808080001a20010b0c002000200110fc818080000bbd0101027f23808080800041106b220324808080800002400240024020002d0004450d0010cf838080002002490d01024041002802c0e6888000220020026a22042000490d00200341086a2000200410d0838080002003280208200328020c20012002108781808000410020043602c0e68880000c030b41c094888000411c108282808000000b200028020020012002108e808080001a0c010b200010c382808000200028020020012002108e808080001a0b200341106a2480808080000b1500200020012002108a818080001087808080001a0b1d002000280208200028020c2000280200200028020410a081808000000b5c01027f23808080800041106b220324808080800041002104024020002802202002470d00200341086a410020022000412010f4808080002003280208200328020c2001200210d88180800021040b200341106a24808080800020040bbd0101057f23808080800041306b2202248080808000200241106a41186a22034200370300200241106a41106a22044200370300200241106a41086a2205420037030020024200370310200241086a200241106a412020011080828080002206109c82808000200141002002280208200228020c1081828080001a20002006360220200041186a2003290300370000200041106a2004290300370000200041086a200529030037000020002002290310370000200241306a2480808080000b4b01017f23808080800041106b2204248080808000200441086a410020032001200210f680808000200428020c21022000200428020836020020002002360204200441106a2480808080000b4b01017f23808080800041106b220224808080800020024200370308200220014100200241086a10d88380800020002002280200200228020410a4808080001a200241106a2480808080000b800101027f23808080800041106b220324808080800002402001109280808000220441084b0d00200341086a20022004109f828080002001410020032802082202200328020c220410aa818080001a2000200436020420002002360200200341106a2480808080000f0b41de8f888000410841a580888000410e10ad81808000000b4901017f23808080800041106b2203248080808000200341086a200141082002109c82808000200328020c21022000200328020836020020002002360204200341106a2480808080000b2801017f41958b888000411610ee80808000220220002001108e808080001a2002108080808000000b1701017f200010f080808000220110ac808080001a20010b1701017f200010f080808000220110af808080001a20010b830101027f23808080800041106b2202248080808000200241086a200028020820002802002203200110a4828080000240024020022802084101470d00200320016a220120034f0d0141c094888000411c108282808000000b41d185888000410f10a082808000000b200228020c210320002001360200200241106a24808080800020030b2901017f200120022003108480808000220410a88080800021032000200436020420002003453602000b0f00200020012002108e808080001a0b0c002001200010a7828080000b1f01017f10888180800022022000ad109d828080002001200210b7818080000b2c00024020014200520d002000108c82808000417f6a0f0b417220011081808080002000417210a9828080000b1900417f2000200110b580808000220141004720014100481b0b1d0002402000427f550d0041e0858880004111108380808000000b20000b11002000200110a98280800041ff0171450b6f01057f20014200108b8080800022024200108b8080800022034200108b8080800022044200108b8080800022054200108b80808000220610a5808080001a2000200110a680808000360214200020063602102000200536020c2000200436020820002003360204200020023602000b800101017f024002400240200141e001470d0041f18588800021020c010b02402001418904460d0002402001418003460d0002402001418002460d00410021010c040b41f58588800021020c020b41f98588800021020c010b41fd8588800021020b410121012002410410a78080800021020b20002002360204200020013602000b0d00200020011085808080001a0b0b002000108082808000450b100020002000200110828080800020000b1801017f10f08080800022022000200110828080800020020b0e002000200020011082808080000b0e0020002000200110a3808080000b0e0020002000200110a9808080000b0e0020002000200110aa808080000b1e01017f10f08080800022022000200110b78280800010ad8080800020020b0f0041722000ad10818080800041720b1601017f10f0808080002201200010b08080800020010b1601017f10f0808080002200420010818080800020000b12002000200110aa828080001081808080000b0a00200010ef808080000be10101077f23808080800041106b2203248080808000200110808280800021044100210541002106034002400240024002402006220741ffffffff03460d00200541046a220820044d0d01410021050c020b41c094888000411c108282808000000b2003410036020c200120052003410c6a41041081828080001a200328020c220541187420054180fe03714108747220054108764180fe037120054118767272200210ab82808000450d0141012105200721090b2000200936020420002005360200200341106a2480808080000f0b200741016a210620082105200721090c000b0b7001017f23808080800041106b220424808080800002402003410274220320024102742202490d00200441086a20012002200320026b10a482808000200428020c21022000200428020836020020002002360204200441106a2480808080000f0b41e0978880004121108282808000000b920101017f23808080800041106b22032480808080000240200241ffffffff034b0d002003410036020c200120024102742003410c6a41041081828080002101200328020c2102200020014101733602002000200241187420024180fe03714108747220024108764180fe037120024118767272360204200341106a2480808080000f0b41a0868880004121108282808000000b0e0041f1818880001090828080000b0d00200010b1808080004100470b840201037f23808080800041106b2204248080808000024002400240024020002d00080d002000280200220510808280800022064190ce004b0d0141002d00c4e688800041ff01710d01410020063602c0e6888000410041013a00c4e6888000200441086a2006108681808000200541002004280208200428020c1081828080001a200041013a00080b200120036a22052001490d0241012100200541002802c0e68880004b0d0120042001200510c2828080002002200320042802002004280204108781808000410021000c010b200041003a0008200520012002200310818280800021000b200441106a24808080800020000f0b41c094888000411c108282808000000b48000240024020022001490d0020024190ce004d0d0120024190ce0010f580808000000b2001200210f580808000000b2000200220016b3602042000200141b0988880006a3602000b7801027f23808080800041106b220124808080800020002d00042102200041003a000402402002450d00200141086a410041002802c0e688800010c28280800020002802002001280208200128020c108e808080001a410041003602c0e6888000410041003a00c4e68880000b200141106a2480808080000b2901017e0240200010c5828080002201428002540d0041a580888000410e10a082808000000b2001a70b4e02017f017e23808080800041106b22012480808080002001420037030820012000200141086a10948180800020012802002001280204410010d0818080002102200141106a24808080800020020b2c01017e0240200010c5828080002201428080808010540d0041a580888000410e10a082808000000b2001a70b1000200010938180800010a1828080000b1000200010938180800010a2828080000b2b000240200010ca8280800022001092808080004120460d0041ce8f888000411010a082808000000b20000b0a0020001093818080000b3d01017e024002400240200010c58280800022014201560d00410021002001a70e020201020b418990888000411210a082808000000b410121000b20000b0a00200010cd828080000b15002000416710b2808080001a41671092808080000b130020002001108f818080001087808080001a0b0c002000200110d0828080000b0d00200020011087808080001a0b3f0002400240024020010e03000102000b41e0978880004100200010d2828080000f0b41c78f8880004107200010d2828080000f0b2000200210d0828080000b0e0020022000200110d4828080000b1200200041e097888000410010d4828080000b150020002001200210ee808080001087808080001a0b1e00416c41e097888000410010a4808080001a2000416c1087808080001a0b2e01017e02402000200110d7828080002202428080808010540d0041a580888000410e10a082808000000b2002a70b5602017f017e23808080800041106b22022480808080002002420037030820022000200110da82808000200241086a10958180800020022802002002280204410010d0818080002103200241106a24808080800020030b0c002000200110d9828080000b160020002001416710b38080800041671092808080000b1801017f2000200110f080808000220210b38080800020020b2700200010f78080800022004195878880004107108e808080001a2001200010dc8280800020000b5501017f23808080800041106b22022480808080002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410a582808000200241106a2480808080000b12002000200110db8280800010c6828080000b12002000200110db8280800010d5828080000b3800024002402001200310e0828080000d00410021010c010b410121012002200310dd8280800021030b20002003360204200020013602000b0f002000200110ea828080004100470b2b01017f2001280200200210e0828080002103200041086a200236020020002001360204200020033602000b6e02037f017e23808080800041106b2204248080808000200441086a2001280200220520012802082206200210df82808000200429030821072006200210db828080002003ad10e38280800020052001280204200210e4828080001a20002007370300200441106a2480808080000b4a01017f23808080800041106b220224808080800020024200370308200220014100200241086a10d88380800020002002280200200228020410d482808000200241106a2480808080000b3901017f02402000200210e08280800022030d002001200210ed8280800021012000200210eb828080002001ad10e3828080000b20034101730b6801037f23808080800041106b2202248080808000200141086a280200210320012802042104024020012802000d00200241086a20042003410010e682808000200228020c2103200228020821040b2000200336020420002004360200200241106a2480808080000b3f01017f23808080800041106b2204248080808000200441086a20012002200310e2828080002000200136020020002002360204200441106a2480808080000b4e01017f23808080800041106b2202248080808000200241086a2000280200200041086a280200200110df82808000200228020c2100200228020810e882808000200241106a24808080800020000b1800024020000d0041a990888000412b108282808000000b0b3e01027f200110f7808080002103200210f7808080002104200210f78080800021022000200436020c2000200336020820002002360204200020013602000b12002000200110eb8280800010c6828080000b2700200010f7808080002200419c878880004108108e808080001a2001200010dc8280800020000b12002000200110eb8280800010d3828080000bf50101047f23808080800041206b2202248080808000200241106a200010fe8280800002400240200228021c41016a2203450d002002200336021c02400240200228021022040d0020022003360214410021050c010b200241086a20002002280218220510fb80808000200020052002280208200310ff828080000b200020032005410010ff8280800020022003360218200041b9878880004106200310fb828080002001ad10e382808000200441016a22050d0141c094888000411c108282808000000b41c094888000411c108282808000000b200220053602102000200241106a108083808000200241206a24808080800020030b5001027f23808080800041106b220324808080800002402000200210ea828080002204450d00200341086a2001200410ef828080002000200210ec828080000b200341106a24808080800020044100470ba80201037f23808080800041306b220324808080800002400240024020020d00410021010c010b200341186a2001200210fb80808000200328021c210420032802182105200341206a200110fe82808000024002402005450d00200341106a2001200510fb80808000200120052003280210200410ff828080000c010b200320043602240b024002402004450d00200341086a2001200410fb80808000200120042005200328020c10ff828080000c010b200320053602280b2001200210fa828080002001200210fc8080800021042001200210fc8280800020032802202202450d0120032002417f6a3602202001200341206a108083808000410121010b2000200436020420002001360200200341306a2480808080000f0b41e0978880004121108282808000000b12002000200110f18280800010c6828080000b2700200010f780808000220041a4878880004105108e808080001a2001200010f58280800020000b2e01017e02402001200010d7828080002202428080808010540d0041a580888000410e10a082808000000b2002a70b0a00200010c6828080000b3a0002402002450d00200110f3828080002002490d002000200210f1828080002003ad10e3828080000f0b41cb958880004112108380808000000b0c002000200110dc828080000b830201037f23808080800041206b2203248080808000200210f780808000220241a9878880004105108e808080001a0240024002402001200210d9828080000d00410021014100210241002104410021050c010b2003410c6a2001200210f7828080002003410c6a10f88280800021012003410c6a10f88280800021022003410c6a10f88280800021042003410c6a10f8828080002105200328020c200328021010c581808000450d012003411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200536020c200020043602082000200236020420002001360200200341206a2480808080000f0b41a580888000410e10a082808000000b140020002001200210da82808000108d818080000b4c02017f017e23808080800041106b22012480808080002001410036020c20002001410c6a410410ba838080002001410c6a4104410010d0818080002102200141106a2480808080002002a70bc40101017f23808080800041206b2204248080808000200210f780808000220241ae87888000410b108e808080001a2003200210dc828080002004410c6a2001200210f7828080002004410c6a10f88280800021022004410c6a10f88280800021030240200428020c200428021010c581808000450d0002402004411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200336020420002002360200200441206a2480808080000f0b41a580888000410e10a082808000000b1a00200041ae87888000410b200110fb8280800010d3828080000b2300200010f780808000220020012002108e808080001a2003200010dc8280800020000b1a00200041b9878880004106200110fb8280800010d3828080000b1d00200010f780808000220041a9878880004105108e808080001a20000bee0101047f23808080800041206b2202248080808000024002400240200110fd82808000220110cd828080000d00410021014100210341002104410021050c010b2002410c6a20011092818080002002410c6a10f88280800021012002410c6a10f88280800021032002410c6a10f88280800021042002410c6a10f8828080002105200228020c200228021010c581808000450d012002411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200536020c200020043602082000200336020420002001360200200241206a2480808080000f0b41a580888000410e10a082808000000b7c01017f23808080800041106b2204248080808000200041ae87888000410b200110fb8280800021012004108581808000200420042d00043a000c200420042802003602082002200441086a10fc818080002003200441086a10fc818080002001200428020820042d000c109882808000200441106a2480808080000bb70101027f23808080800041106b2202248080808000200010fd8280800021000240024020012802002203450d002002108581808000200220022d00043a000c200220022802003602082003200241086a10fc818080002001280204200241086a10fc818080002001280208200241086a10fc81808000200128020c200241086a10fc818080002000200228020820022d000c1098828080000c010b200041e097888000410010d4828080000b200241106a2480808080000b3e01017f23808080800041106b22022480808080002002200128020010fe828080002000200228020436020420002001360200200241106a2480808080000b2600200010f780808000220041ce878880004104108e808080001a20002001ad10e3828080000b3e0002402002450d00200110f3828080002002490d002000200210f18280800010c6828080002201200220011b0f0b41cb958880004112108380808000000b18002000200120024100200320022003461b10f4828080000b170020012000200210868380800010d8828080004100470b16002001200010f780808000220010878380800020000b6701027f23808080800041106b220224808080800020022000108082808000220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410a5828080002001200010ae82808000200241106a2480808080000b15002000200110868380800010cc828080004100470b840201037f23808080800041206b220224808080800002400240200020012802042203108a838080000d0020022000108b8380800002400240200128020c2204450d00200241106a20002004108c8380800020022001280208220136021820002004200241106a108d838080000c010b2002200128020822013602040b024002402001450d00200241106a20002001108c838080002002200436021c20002001200241106a108d838080000c010b200220043602080b20002003108e838080004101410010d48280800020022802002201450d0120022001417f6a360200200020021080838080000b200241206a2480808080000f0b41e0978880004121108282808000000b130020002001108e8380800010cc82808000450bee0101047f23808080800041206b2202248080808000024002400240200110fd82808000220110cd828080000d00410021014100210341002104410021050c010b2002410c6a20011092818080002002410c6a10f88280800021012002410c6a10f88280800021032002410c6a10f88280800021042002410c6a10f8828080002105200228020c200228021010c581808000450d012002411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200536020c200020043602082000200336020420002001360200200241206a2480808080000f0b41a580888000410e10a082808000000bcf0101037f23808080800041206b22032480808080002003410c6a20012002108e838080001092818080002003410c6a10f88280800021022003410c6a10f88280800021012003410c6a10f88280800021042003410c6a10f88280800021050240200328020c200328021010c581808000450d0002402003411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200536020c200020043602082000200136020420002002360200200341206a2480808080000f0b41a580888000410e10a082808000000b9a0101017f23808080800041106b220324808080800020002001108e8380800021012003108581808000200320032d00043a000c200320032802003602082002280200200341086a10fc818080002002280204200341086a10fc818080002002280208200341086a10fc81808000200228020c200341086a10fc818080002001200328020820032d000c109882808000200341106a2480808080000b2700200010f780808000220041d2878880004105108e808080001a2001200010dc8280800020000b2b01017f0240200020012802042203108a838080000d0020012002360200200020032001108d838080000b0b840101027f23808080800041306b220324808080800041002104024020012002108a838080000d002003411c6a200120021082818080002003410c6a2003411c6a10818180800020012003410c6a1089838080002000410c6a200341146a2902003702002000200329020c370204410121040b20002004360200200341306a2480808080000b3901017f23808080800041106b220224808080800020022001108b83808000200020012002280204108281808000200241106a2480808080000b2f00200110f780808000220141d7878880004108108e808080001a2002200110dc82808000200020011093838080000b4801027f23808080800041106b2202248080808000200110f7808080002103200241086a200110cc838080002000200229030837020020002003360208200241106a2480808080000b3201017f4100210402402001200310e082808000450d00200041046a20022003109283808000410121040b200020043602000b4301027f200141086a280200210220012802042103024020012802000d002003280200200341046a280200200210e4828080001a0b20002002360204200020033602000b4101017f23808080800041106b220324808080800020032001280200200141086a280200200210948380800020002003109783808000200341106a2480808080000b3500024020012802000d0041a990888000412b108282808000000b20002001290204370200200041086a2001410c6a2802003602000b0a00200010cc828080000b0c0020004201109a838080000b4a01017f23808080800041106b220224808080800020024200370308200220014101200241086a10d88380800020002002280200200228020410d482808000200241106a2480808080000b0c002000200110ce828080000b0b002000109883808000450b4001017f0240024020012002109e83808000220310cc828080000d00410021010c010b41012101200310c98280800021030b20002003360204200020013602000b2700200010f780808000220041ac958880004106108e808080001a2001200010a38380800020000b1d00200010f780808000220041b6958880004106108e808080001a20000b22002000200210a18380800010d58280800020002001109e8380800010d5828080000b2700200010f780808000220041b2958880004104108e808080001a2000200110ae8280800020000b6301017e02402000109f8380800010c58280800042017c2202500d002000200110a183808000200210e38280800020002002109e83808000200110cf828080002000109f83808000200210e38280800020020f0b41c094888000411c108282808000000b870101017f23808080800041106b22022480808080002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810a582808000200241106a2480808080000b12002000200110a18380800010c5828080000b6001017f23808080800041106b2201248080808000200141086a200010f28080800002400240024020012802080e03000102000b200141106a2480808080000f0b41f9878880004118108380808000000b4191888880004114108380808000000b1401017f10f0808080002200108a8080800020000b1500200010a6838080002001200210a883808000000bca0201047f23808080800041206b22042480808080000240200028020810a9838080000d00200010aa838080002100200441e38488800010908280800041d584888000410e1091828080001088818080001a200028020010f780808000210020042802042205200010b78180800020042802102106200428020021072001200510ab83808000410021000240034020004102460d010240200220006a2d00002201450d002005200141027422014194948880006a280200280200200141f4938880006a28020028020010ee8080800010b7818080000b200041016a21000c000b0b200410b98280800036020c2004200636020820044100360210200420053602042004200736020002402003280200450d00200441106a22002003290200370200200041086a200341086a2802003602000b2004109482808000000b41ca888880004120108380808000000b0b00200010cc82808000450b2400024020002802004102470d00200041046a0f0b41a5888880004110108380808000000b19001088818080001a2001200010f78080800010b7818080000bc00101017f23808080800041d0006b2205248080808000200010a5838080000240024020042802000d00200541086a200010b98280800010ad838080000c010b200541086a41086a200441086a280200360200200520042902003703080b20004101200510d182808000200541306a20012002200341001093828080002005412c6a200541106a28020036020020052005290308370224200520052802483602202005200528024036021c20052005290330370214200541146a109482808000000b5701027f10a2818080002103200210ae8380800021022003108881808000220410ab8380800020042001109b81808000200020043602082000411c411020021b360204200041fa8888800041ea8888800020021b3602000b13002000420010a88280800041ff01714101460b2d002001200210b083808000220242002003109f818080002000200336020c20004200370300200020023602080b2400024020004102470d00200110f7808080000f0b41a5888880004110108380808000000b4201017f23808080800041106b2201248080808000200141086a200010f280808000024020012802084101470d00200010d5828080000b200141106a2480808080000bd80101017f23808080800041e0006b2206248080808000200010a5838080000240024020052802000d00200641086a2000200410ad838080000c010b200641086a41086a200541086a280200360200200620052902003703080b2006428182848080a0c0800137021c2006410036021820004101200610d182808000200641c0006a2001200220032004200641186a108f828080002006413c6a200641106a28020036020020062006290308370234200620062802583602302006200628025036022c20062006290340370224200641246a109482808000000b12002000200110b48380800010c4828080000b2700200010f780808000220041d1898880004108108e808080001a2001200010878380800020000b15002000200110b48380800010cc828080004100470b3100200010f780808000220041c4898880004105108e808080001a2001200010b7838080002002200010a38380800020000b3601017f23808080800041106b2202248080808000200220003a000f20012002410f6a410110a582808000200241106a2480808080000b1d00200010f780808000220041c9898880004108108e808080001a20000b9a0201027f23808080800041206b2204248080808000200441046a20012002200310b683808000109281808000200441046a200441046a10f88280800010a38280800010a282808000210520044200370318200441046a200441186a410810ba83808000200441186a4108410010d0818080002103200441046a10f88280800021021088818080002101024003402002450d012001200441046a10f88280800010b7818080002002417f6a21020c000b0b02402004280204200428020810c581808000450d000240200441146a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b2000200136020c2000200536020820002003370300200441206a2480808080000f0b41a580888000410e10a082808000000b4c0002400240200041086a20002802002001200210c1828080000d002000280200220120026a220220014f0d0141c094888000411c108282808000000b10d283808000000b200020023602000b110020002001200210bc838080004101730b150020002001200210b68380800010cc82808000450b8c0101017f23808080800041106b220424808080800020002001200210b68380800021012004108581808000200420042d00043a000c200420042802003602082003280208200441086a1091818080002003290300200441086a10f9818080002003410c6a200441086a10be838080002001200428020820042d000c109882808000200441106a2480808080000b7d01027f23808080800041206b22022480808080002000280200220310f78180800020011096828080002002200310808280800036021c20024100360218200220003602140340200241086a200241146a10c083808000024020022802080d00200241206a2480808080000f0b200228020c200110fc818080000c000b0bc50101017f23808080800041206b2203248080808000200010f780808000220041d9898880004106108e808080001a2001200010b783808000200228020810848180800020001087838080002002290300200010a383808000200228020c220110f781808000200010f5828080002003200110808280800036021c2003410036021820032002410c6a36021402400340200341086a200341146a10c0838080002003280208450d01200328020c200010dc828080000c000b0b200341206a24808080800020000bbf0101047f23808080800041106b22022480808080000240024002402001280204220341046a22042003490d00200420012802084d0d01410021010c020b41c094888000411c108282808000000b200128020021052002410036020c200528020020032002410c6a41041081828080001a200228020c210320012004360204200341187420034180fe03714108747220034108764180fe0371200341187672722103410121010b2000200336020420002001360200200241106a2480808080000b160020002001200210bf83808000200310e3828080000b140020002001200210bf8380800010d5828080000bae0402047f017e23808080800041306b22052480808080002001200210b0838080002106108881808000210210b98280800021072005108881808000220836021c10888180800022012006109b8180800020012003109d8180800020012002109b8180800020012007109d8180800020012008109b8180800010888180800010f780808000210220042d0000200210b78380800020042d0001200210b78380800020042d0002200210b7838080002001200210b781808000024002402008109280808000450d00200520081092808080003602282005410036022420052005411c6a3602200340200541106a200541206a1087828080002005280210450d02200528021421021088818080001a2001200210f78080800010b7818080000c000b0b108881808000220241e097888000410010a4808080001a2001200210b7818080000b200541086a10898080800041e481888000410d10ee808080002001109e81808000410010be8280800042002109024020052802084101470d00200528020c2201109280808000220241084b0d00420021092005420037032020014100200541206a20026b41086a200210aa818080000d002005290320220942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe0383200942388884848421090b2000200336020c2000200937030020002006360208200541306a2480808080000b1900200020012802082001290300200128020c1098818080000b2d002001200210b083808000220220032004109f818080002000200436020c20002003370300200020023602080b820201037f23808080800041d0006b2205248080808000200541086a200010f28080800002400240024020052802080e03020001020b41f9878880004118108380808000000b4191888880004114108380808000000b02400240200428020022060d0010a281808000108881808000220710ab8380800020072000109b818080004110210441ea8888800021060c010b20042802082107200428020421040b20004101200510d182808000200541306a20012002200341031093828080002005412c6a2007360200200541286a200436020020052006360224200520052802483602202005200528024036021c20052005290330370214200541146a109482808000000b1e01017f10888180800022022000200110ee8080800010b78180800020020bea0101037f23808080800041c0006b2201248080808000200141186a200041046a2202108183808000200120012903183702300340200141106a200141306a10fa80808000024020012802100d00200141206a200228020010fe8280800020012802242100024003402000450d01200141086a2002280200200010fb80808000200128020c21032002280200200010fa828080002002280200200010fc82808000200321000c000b0b200141386a4200370300200142003703302002280200200141306a108083808000200141c0006a2480808080000f0b2000280200200128021410ec828080000c000b0b960101037f23808080800041106b2201248080808000200010ca838080002102200141086a200028020820002802002203200210a4828080000240024020012802084101470d00200320026a22022003490d01200128020c210320002002360200200141106a24808080800020030f0b419481888000411941d185888000410f10ff80808000000b41c094888000411c108282808000000b5402017f017e23808080800041106b22012480808080002001410036020c20002001410c6a4104419481888000411910d5838080002001410c6a4104410010d0818080002102200141106a2480808080002002a70b7201017f23808080800041206b2201248080808000200141106a200041046a108183808000200120012903103702180340200141086a200141186a10fa80808000024020012802080d00200010c883808000200141206a2480808080000f0b2000280208200128020c10de828080000c000b0b1c01017f200110f780808000210220002001360204200020023602000b6a01017f23808080800041206b22012480808080002001200028020010808280800036021c200141003602182001200036021402400340200141086a200141146a10c0838080002001280208450d01200128020cad10a0808080000c000b0b200141206a2480808080000b8d0101027f23808080800041106b2202248080808000200241086a200110fa8080800041002103024020022802084101470d00200220012802082201280200200141086a280200200228020c220110df8280800020022802042103200228020010e882808000200041086a200336020020002001360204410121030b20002003360200200241106a2480808080000b3001017f024041002802c0e688800022004190ce004b0d004190ce0020006b0f0b41e0978880004121108282808000000b5101017f23808080800041106b2203248080808000200341086a2001200241b0988880004190ce0010f680808000200328020c21022000200328020836020020002002360204200341106a2480808080000b6a00024002402000280200200028020410fd808080004102460d00200110c082808000450d0120002802084102200110f78080800010d18280800020002001360204200041023602000f0b4191888880004114108380808000000b41a5888880004110108380808000000b110041d185888000410f10a082808000000b15002000200141d185888000410f10ad81808000000b15002000200141d185888000410f10ff80808000000b500002400240200041086a20002802002001200210c1828080000d002000280200220120026a220220014f0d0141c094888000411c108282808000000b2003200410d483808000000b200020023602000b4701017f23808080800041106b2201248080808000200141003a000f20002001410f6a410141c186888000412010d58380800020012d000f2100200141106a24808080800020000b5701017f23808080800041106b22022480808080002002200136020c2002200036020803402002200241086a10fa80808000024020022802000d00200241106a2480808080000f0b2002280204ad10a0808080000c000b0bc00202017e047f2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe03832001423888220484848437000002400240200150450d0041e0978880002103410021050c010b41002105410021064100210702402002450d0002402001427f520d00200341076a2103410121050c020b2004a7c022084107752107200841004821060b200741ff0171210702400240034020054108460d010240200320056a2d000022082007460d002002450d0320084107762006460d0302402005450d002005417f6a21050c040b41e0978880004121108282808000000b200541016a21050c000b0b4108410810f580808000000b200320056a2103410820056b21050b20002005360204200020033602000b3f01017f23808080800041106b2201248080808000200141003a000f20002001410f6a410110ba8380800020012d000f2100200141106a24808080800020000b9a0401047f23808080800041c0006b220324808080800020032001109b82808000024002402003280220450d00024002400240200341ea888880004110109a828080000d00200341fa88888000411c109a828080000d012000200136020420004101360200200041086a20023602000c040b10f581808000410010f48180800020034100360224200341306a200341246a10af81808000200328022410f1818080002003280230210120032802342104200341246a200210f68180800010f581808000200341246a10bc818080002105200341306a41086a2202200341246a41086a28020036020020032003290224370330200341306a10be8180800021062003280234200228020010f28180800020010d0120064102200410d1828080000c020b10f581808000410010f48180800020034100360224200341306a200341246a41998f888000410610b981808000200328022410f18180800020032802302101200341246a200210f68180800010f581808000200341246a10bc818080002105200341306a41086a2202200341246a41086a28020036020020032003290224370330200341306a10be8180800021062003280234200228020010f281808000024020010d00200341306a10a88180800020064102200328023810d1828080000c020b200510db83808000200610d5828080000c010b200510db83808000200610d5828080000b200041003602000b200341c0006a2480808080000b4401017f024010a7818080002201108c8280800041ff01714102470d00416741e097888000410010a4808080001a200020014200108881808000416710b4808080001a0b0b14001088818080001a2000200110fe80808000000b1900200010a58180800041d1e688800010b68080800041004a0b0e0020002001200210cd868080000b15002000280200200128020010f8808080004101730b150002402000450d00200041027410e1838080000b0b110002402000450d0010e883808000000b0b090010fc83808000000b4101017f0240200028020822022000280204470d002000200210e483808000200028020821020b2000200241016a360208200028020020024102746a20013602000bbe0101037f23808080800041106b220224808080800002400240200141016a2201450d00200241046a2000280204220341017422042001200420014b1b22014104200141044b1b22014180808080024941027420014102742003410047410274200341027410e58380800020022802082103024020022802040d0020002001360204200020033602000c020b2003418180808078460d012003450d002002410c6a28020010e683808000000b10e783808000000b200241106a2480808080000bc20101017f23808080800041106b2205248080808000024002400240024002402001450d002002417f4c0d0102402003450d0020040d030b200541086a2001200210cf86808000024020052802082203450d00200528020c210220002003360204200041086a2002360200410021020c050b20002001360204200041086a20023602000c030b20004100360204200041086a20023602000c020b200041003602040c010b10f783808000000b410121020b20002002360200200541106a2480808080000b0b00200010cc86808000000b090010fc83808000000b090010f783808000000b2f01027f41d490888000410710c783808000210110888180800022022000ad109d828080002001200210b7808080000b1800200041b791888000410a10ee808080001093838080000b5101027f23808080800041106b2201248080808000200141086a41a18f888000410a10ee8080800010cc83808000200128020c21022000200128020836020020002002360204200141106a2480808080000b3901027f41c191888000410a10ee80808000220110f780808000220241ce878880004104108e808080001a20002002360204200020013602000b840102017f017e23808080800041106b2201248080808000200041de8f888000410810bd8180800021002001420037030820012000200141086a109e82808000024020012802002001280204410010d0818080002202428080808010540d0041de8f888000410841a580888000410e10ad81808000000b200141106a2480808080002002a70b1000419292888000410c10ee808080000b100041c592888000411610ee808080000b100041db92888000410b10ee808080000b5601037f23808080800041106b220124808080800041e692888000411210ee80808000220210f7808080002103200141086a200210cc838080002000200129030837020020002003360208200141106a2480808080000b100041f892888000410b10ee808080000b4a01037f418393888000411010ee80808000220110f7808080002102200110f780808000220341ce878880004104108e808080001a2000200336020420002001360200200020023602080b1000419393888000411010ee808080000b100041a393888000410f10ee808080000b4c01027f23808080800041106b2201248080808000200141086a41b293888000411310ee80808000220210f2808080002000200129030837020020002002360208200141106a2480808080000b090010d086808000000b090010f983808000000b1100418198888000410e108380808000000b100010b880808000410010f3818080000b170010b880808000410010f38180800010fc83808000000b090010f883808000000b1f0010b880808000410110f381808000410010ee818080007b10a0808080000b6c03017f017e017f10b880808000410310f381808000410010de818080002100410110ee818080002101410241888c888000410410e58180800021024172200110ba8280800020002000417210828080800020002000200210b782808000108280808000200010a1808080000b240010b880808000410110f381808000410010de8180800010b88280800010a1808080000b250010b880808000410110f381808000410010de8180800010b980808000ad10a0808080000b340010b880808000410210f381808000410010dc81808000410141d88b888000410110e58180800010b68280800010ba808080000b340010b880808000410210f381808000410010de81808000410141d88b888000410110e58180800010b68280800010a1808080000b5501017f23808080800041106b220024808080800010b880808000410110f3818080002000410010de8180800010848480800002402000290300a7450d00200029030810a0808080000b200041106a2480808080000b3901027e02400240200110e78080800041014e0d00420021020c010b42012102200110e88080800021030b20002003370308200020023703000b3201017f10b880808000410210f381808000410010de818080002200410110ee8180800010ba82808000200010a1808080000b1c0010b880808000410010f38180800010b98280800010a1808080000b3602017e017f10b880808000410110f381808000410010ee81808000210010f0808080002201200010ba82808000200110a1808080000b6201027f23808080800041106b220024808080800010b880808000410010f3818080002000427f3703082000427f37030041672000411010a4808080001a416710f080808000220110af808080001a200110a180808000200041106a2480808080000b240010b880808000410110f381808000410010d18180800010a28280800010a1808080000b2a01017f10b880808000410010f38180800010f08080800022004200108180808000200010ba808080000b3602017e017f10b880808000410110f381808000410010c881808000210010f08080800022012000108180808000200110ba808080000b380010b880808000410210f381808000410010de81808000410110ee8180800010aa8280800010a88280800041ff017145ad10bb808080000b5501017f23808080800041106b220024808080800010b880808000410110f3818080002000410010dc8180800010848480800002402000290300a7450d00200029030810bb808080000b200041106a2480808080000b3201017f10b880808000410210f381808000410010dc818080002200410110c881808000108180808000200010ba808080000b4c01037f10b880808000410110f381808000410010dc818080002200108c82808000210110f0808080002202200010bc808080002001ad42ff0183427f7c10bb80808000200210a1808080000b4101027f10b880808000410210f38180800010c0818080002100410110de8180800021010240200041ff01710d002001200110bd808080000b200110ba808080000b2c0010b880808000410210f381808000410010dc81808000410110dc8180800010b08280800010ba808080000b2c0010b880808000410210f381808000410010dc81808000410110de8180800010b08280800010ba808080000b2c0010b880808000410210f381808000410010de81808000410110dc8180800010b08280800010ba808080000b2c0010b880808000410210f381808000410010dc81808000410110de8180800010b18280800010ba808080000b2c0010b880808000410210f381808000410010de81808000410110dc8180800010b18280800010ba808080000b2c0010b880808000410210f381808000410010dc81808000410110dc8180800010b18280800010ba808080000b3401017f10b880808000410210f381808000410010de8180800022002000410110de81808000108280808000200010a1808080000b4001037f10b880808000410210f381808000410010de818080002100410110de81808000210110f080808000220220002001108280808000200210a1808080000b3401017f10b880808000410210f381808000410010dc8180800022002000410110dc8180800010a380808000200010ba808080000b4001037f10b880808000410210f381808000410010dc818080002100410110dc81808000210110f08080800022022000200110a380808000200210ba808080000b3401017f10b880808000410210f381808000410010de8180800022002000410110de81808000108b82808000200010a1808080000b4001037f10b880808000410210f381808000410010de818080002100410110de81808000210110f080808000220220002001108b82808000200210a1808080000b3401017f10b880808000410210f381808000410010dc8180800022002000410110dc8180800010be80808000200010ba808080000b4001037f10b880808000410210f381808000410010dc818080002100410110dc81808000210110f08080800022022000200110be80808000200210ba808080000b3401017f10b880808000410210f381808000410010de8180800022002000410110de8180800010be80808000200010a1808080000b4001037f10b880808000410210f381808000410010de818080002100410110de81808000210110f08080800022022000200110be80808000200210a1808080000b3401017f10b880808000410210f381808000410010dc8180800022002000410110dc8180800010bf80808000200010ba808080000b4001037f10b880808000410210f381808000410010dc818080002100410110dc81808000210110f08080800022022000200110bf80808000200210ba808080000b3401017f10b880808000410210f381808000410010de8180800022002000410110de8180800010bf80808000200010a1808080000b4001037f10b880808000410210f381808000410010de818080002100410110de81808000210110f08080800022022000200110bf80808000200210a1808080000b3401017f10b880808000410210f381808000410010dc8180800022002000410110dc8180800010c080808000200010ba808080000b4001037f10b880808000410210f381808000410010dc818080002100410110dc81808000210110f08080800022022000200110c080808000200210ba808080000b3401017f10b880808000410210f381808000410010de8180800022002000410110de8180800010c080808000200010a1808080000b4001037f10b880808000410210f381808000410010de818080002100410110de81808000210110f08080800022022000200110c080808000200210a1808080000b4201027f10b880808000410210f381808000410010dc818080002100410110dc818080002101200010ef80808000220020002001108280808000200010ba808080000b4001027f10b880808000410210f381808000410010dc818080002100410110dc818080002101200010ef808080002200200110b282808000200010ba808080000b4201027f10b880808000410210f381808000410010de818080002100410110de818080002101200010ef80808000220020002001108280808000200010a1808080000b4201027f10b880808000410210f381808000410010dc818080002100410110dc818080002101200010ef8080800022002000200110a380808000200010ba808080000b4001027f10b880808000410210f381808000410010dc818080002100410110dc818080002101200010ef808080002200200110b382808000200010ba808080000b4201027f10b880808000410210f381808000410010de818080002100410110de818080002101200010ef80808000220020002001108b82808000200010a1808080000b4201027f10b880808000410210f381808000410010dc818080002100410110dc818080002101200010ef8080800022002000200110be80808000200010ba808080000b4201027f10b880808000410210f381808000410010de818080002100410110de818080002101200010ef8080800022002000200110be80808000200010a1808080000b4201027f10b880808000410210f381808000410010dc818080002100410110dc818080002101200010ef8080800022002000200110bf80808000200010ba808080000b4201027f10b880808000410210f381808000410010de818080002100410110de818080002101200010ef8080800022002000200110bf80808000200010a1808080000b4201027f10b880808000410210f381808000410010dc818080002100410110dc818080002101200010ef8080800022002000200110c080808000200010ba808080000b4201027f10b880808000410210f381808000410010de818080002100410110de818080002101200010ef8080800022002000200110c080808000200010a1808080000b3401017f10b880808000410210f381808000410010de8180800022002000410110de8180800010c180808000200010a1808080000b4001037f10b880808000410210f381808000410010de818080002100410110de81808000210110f08080800022022000200110c180808000200210a1808080000b3401017f10b880808000410210f381808000410010de8180800022002000410110de8180800010c280808000200010a1808080000b4001037f10b880808000410210f381808000410010de818080002100410110de81808000210110f08080800022022000200110c280808000200210a1808080000b3401017f10b880808000410210f381808000410010de8180800022002000410110de8180800010c380808000200010a1808080000b4001037f10b880808000410210f381808000410010de818080002100410110de81808000210110f08080800022022000200110c380808000200210a1808080000b4201027f10b880808000410210f381808000410010de818080002100410110de818080002101200010ef8080800022002000200110c180808000200010a1808080000b4201027f10b880808000410210f381808000410010de818080002100410110de818080002101200010ef8080800022002000200110c280808000200010a1808080000b4201027f10b880808000410210f381808000410010de818080002100410110de818080002101200010ef8080800022002000200110c380808000200010a1808080000b3c01017f10b880808000410210f381808000410010de8180800022002000410141d88b888000410110e58180800010aa80808000200010a1808080000b4801037f10b880808000410210f381808000410010de818080002100410141d88b888000410110e581808000210110f08080800022022000200110aa80808000200210a1808080000b3c01017f10b880808000410210f381808000410010de8180800022002000410141d88b888000410110e58180800010a980808000200010a1808080000b4801037f10b880808000410210f381808000410010de818080002100410141d88b888000410110e581808000210110f08080800022022000200110a980808000200210a1808080000b4801027f10b880808000410210f381808000410010de818080002100410141d88b888000410110e5818080002101200010ef808080002200200110b582808000200010a1808080000b4801027f10b880808000410210f381808000410010de818080002100410141d88b888000410110e5818080002101200010ef808080002200200110b482808000200010a1808080000b1c0010b880808000410010f38180800010c48080800010a0808080000b1c0010b880808000410010f38180800010c58080800010a0808080000b1c0010b880808000410010f38180800010c68080800010a0808080000b1c0010b880808000410010f38180800010c78080800010a0808080000b2901017f10b880808000410010f38180800010f080808000220010c88080800020001088808080001a0b1c0010b880808000410010f38180800010c98080800010a0808080000b1c0010b880808000410010f38180800010ca8080800010a0808080000b1c0010b880808000410010f38180800010cb8080800010a0808080000b1c0010b880808000410010f38180800010cc8080800010a0808080000b2901017f10b880808000410010f38180800010f080808000220010cd8080800020001088808080001a0b1d0010b880808000410010f38180800010a2818080001088808080001a0b1d0010b880808000410010f38180800010a6818080001088808080001a0b390010b880808000410110f381808000410041928d888000410710d68180800010a58180800041d1e688800010ce80808000ad10a0808080000b2d0010b880808000410110f381808000410041928d888000410710d68180800010dd83808000ad10bb808080000b2901017f10b880808000410010f38180800010f080808000220010cf8080800020001088808080001a0b1d0010b880808000410010f38180800010a3818080001088808080001a0b1c0010b880808000410010f38180800010898080800010a0808080000b4701017f10b880808000410010f381808000416741f195888000410c10a4808080001a4167416610b2808080001a416610f080808000220010af808080001a200010a1808080000b170010b880808000410010f381808000108882808000000b360010b880808000410010f38180800041ff90888000411110ee808080001a41e586888000411a41f680888000411e10ff80808000000b2e0010b880808000410010f381808000419091888000411310ee808080001a41c080888000411b10a082808000000b360010b880808000410010f38180800041a391888000411410ee808080001a41ff86888000411641db80888000411b10ff80808000000b2e0010b880808000410010f38180800041f090888000410f10c7838080001a41e48a888000411810dc83808000000b350010b880808000410010f38180800041e290888000410e10c7838080001a1088818080001a41cd8a888000411710fe80808000000b2d0010b880808000410010f38180800010b9828080001a1088818080001a41ab85888000411c10dc83808000000b6a01027f23808080800041206b220024808080800010b880808000410010f381808000024010bf82808000220141feffffff07470d0041fc8a8880004119108380808000000b200041086a200141b58b888000411310918280800041ab85888000411c10dc83808000000b3201017f10b880808000410110f381808000410010d18180800010f080808000220010d0808080001a20001088808080001a0b3201017f10b880808000410110f381808000410010d18180800010f080808000220010d1808080001a20001088808080001a0b3201017f10b880808000410110f381808000410010d18180800010f080808000220010d2808080001a20001088808080001a0b360010b880808000410310f381808000410010d181808000410110d181808000410210d18180800010d38080800045ad10bb808080000b2f0010b880808000410310f381808000410010d181808000410110d181808000410210d18180800010d4808080001a0b360010b880808000410310f381808000410010d181808000410110d181808000410210d18180800010d58080800045ad10bb808080000b400010b880808000410410f381808000410010d181808000410110d181808000410210d18180800010e08180800041ff017110d68080800045ad10bb808080000b3a01017f10b880808000410210f381808000410010d181808000410110d18180800010f080808000220010d7808080001a20001088808080001a0b1e0010b880808000410110f381808000410010ee8180800010a0808080000b1e0010b880808000410110f381808000410010c88180800010bb808080000b1d0010b880808000410110f38180800010d381808000ac10bb808080000b270010b880808000410110f381808000410041bc8d888000410110e581808000ad10a0808080000b1d0010b880808000410110f38180800010ef81808000ac10bb808080000b1e0010b880808000410110f38180800010db81808000adc210bb808080000b210010b880808000410110f38180800010f081808000ad42ff018310a0808080000b250010b880808000410110f381808000410041bc8d88800010eb81808000ad10bb808080000b9b0101027f23808080800041106b220024808080800010b880808000410110f3818080000240024010da81808000220141ff01714102470d0041e097888000410010a2808080000c010b2000108581808000200020002d00043a000c20002000280200360208200041086a410110fe81808000200041086a200110fe81808000200028020820002d000c1089818080000b200041106a2480808080000b1e0010b88080800010f581808000410010f481808000410010f1818080000b5001017f23808080800041106b220024808080800010b880808000410110f3818080002000410b6a410041fb8b888000410110c2818080002000410b6a410510a280808000200041106a2480808080000b7f01037f23808080800041106b220024808080800010b88080800010f581808000410010f4818080002000410036020c2000410c6a10b8818080002101200028020c10f181808000200110f781808000210220002001360208200020023602042002ad10a080808000200041086a10cd83808000200041106a2480808080000ba30303037f017e017f23808080800041306b220024808080800010b88080800010f581808000410010f48180800020004100360220200041206a41ae8b888000410110b6818080002101200028022010f1818080001088818080002102200041206a200110f681808000024002400340200028022820002802244f0d01200041206a41de8f888000410810bd81808000210120004200370318200041086a2001200041186a109e828080002000280208200028020c410110d08180800022034280808080787c42ffffffff6f580d02200041206a41de8f888000410810bf818080002104108881808000210120004200370318200020034101200041186a10d88380800020012000280200200028020410a4808080001a2002200110b78180800020022004109b818080000c000b0b2000200236021820002002109280808000360228200041003602242000200041186a36022002400340200041106a200041206a1087828080002000280210450d0120002802141088808080001a0c000b0b200041306a2480808080000f0b41de8f8880004108418990888000411210ad81808000000b4c01017f23808080800041106b220024808080800010b880808000410110f381808000200041046a41bc8f888000410210c681808000200041046a10fd81808000200041106a2480808080000b210010b880808000410110f38180800010ec81808000ad42ff018310a0808080000b180010b880808000410010f381808000420110a0808080000b1d0010b880808000410110f38180800010d481808000ad10a0808080000b970101047f23808080800041106b220024808080800010b88080800010f581808000410110f48180800010d3818080002101200041013602082000200041086a10b38180800020002802042102200028020021032000200028020836020c2000410c6a10b581808000200028020c10f1818080002001ac10bb80808000024020030d002002ac10bb808080000b200041106a2480808080000ba30101037f23808080800041206b220024808080800010b880808000410110f381808000200041086a10ce81808000200028021421012000108581808000200020002d00043a001c2000200028020036021820014102742102410021010240034020022001460d01200041086a20016a280200200041186a10fc81808000200141046a21010c000b0b200028021820002d001c108981808000200041206a2480808080000b1e0010b880808000410110f381808000410010de8180800010a1808080000b1e0010b880808000410110f381808000410010dc8180800010ba808080000b1f0010b880808000410110f381808000410010d1818080001088808080001a0b270010b880808000410110f381808000410041ac8b888000410210d6818080001088808080001a0bef0101057f23808080800041206b220024808080800010b880808000410110f38180800010e9818080002101200041086a108581808000200020002d000c3a001820002000280208360214200110928080800021024100210302400340200341046a22042003490d010240200420024b0d002000410036021c200120032000411c6a410410aa818080001a200028021c220341187420034180fe03714108747220034108764180fe037120034118767272200041146a108e81808000200421030c010b0b200028021420002d0018108981808000200041206a2480808080000f0b41c094888000411c108282808000000b900101037f23808080800041206b220024808080800010b880808000410110f381808000200041106a10e7818080002000280214210120002802102102200041086a108581808000200020002d000c3a001c200020002802083602182002200041186a108e818080002001200041186a109081808000200028021820002d001c108981808000200041206a2480808080000ba60101027f23808080800041206b220024808080800010b880808000410110f381808000200041106a10ed818080000240024020002802100d0041e097888000410010a2808080000c010b20002802142101200041086a108581808000200020002d000c3a001c20002000280208360218200041186a410110fe818080002001200041186a108e81808000200028021820002d001c1089818080000b200041206a2480808080000bda0101037f23808080800041306b220024808080800010b880808000410210f381808000410041b295888000410410d6818080002101200010cc8180800022023602182000200136021420011088808080001a200041086a108581808000200020002d000c3a00202000200028020836021c2000200210928080800036022c200041003602282000200041146a41046a360224024003402000200041246a1087828080002000280200450d0120002802042000411c6a1090818080000c000b0b200028021c20002d0020108981808000200041306a2480808080000b830301087f23808080800041206b220024808080800010b880808000410110f38180800010ea818080002101200041086a108581808000200020002d000c3a001820002000280208360214200110928080800021024100210302400340200341046a22042003490d010240200420024b0d00410021052000410036021c200120032000411c6a410410aa818080001a200028021c220341187420034180fe03714108747220034108764180fe0371200341187672722206109280808000410276200041146a10968280800020061092808080002107034002400240200541046a22032005490d00200320074d0d01200421030c040b41c094888000411c108282808000000b2000410036021c200620052000411c6a410410aa818080001a200028021c220541187420054180fe03714108747220054108764180fe037120054118767272200041146a109682808000200321050c000b0b0b200028021420002d0018108981808000200041206a2480808080000f0b41c094888000411c108282808000000bef0101057f23808080800041206b220024808080800010b880808000410110f38180800010e6818080002101200041086a108581808000200020002d000c3a001820002000280208360214200110928080800021024100210302400340200341046a22042003490d010240200420024b0d002000410036021c200120032000411c6a410410aa818080001a200028021c220341187420034180fe03714108747220034108764180fe037120034118767272200041146a109081808000200421030c010b0b200028021420002d0018108981808000200041206a2480808080000f0b41c094888000411c108282808000000b7201017f23808080800041106b220024808080800010b88080800010f581808000410010f4818080002000410036020c20002000410c6a41b28b888000410110b981808000200028020c10f18180800002402000280200450d002000280208109781808000000b200041106a2480808080000ba50201057f23808080800041206b220024808080800010b88080800010f581808000410010f48180800020004100360210200041106a41ae8b888000410110b6818080002101200028021010f1818080001088818080002102200041106a200110f68180800002400340200028021820002802144f0d010240200041106a10ed838080002201200041106a10ed8380800022036a22042001490d002001200210a7828080002003200210a7828080002004200210a7828080000c010b0b41c094888000411c108282808000000b2000200236020c200020021092808080003602182000410036021420002000410c6a360210024003402000200041106a1087828080002000280200450d0120002802041088808080001a0c000b0b200041206a2480808080000bc20101067f23808080800041206b220024808080800010b880808000410110f3818080002000410041e18d888000410d10e58180800010ad828080000240024020002802000d0010b982808000210110b982808000210210b982808000210310b982808000210410b98280800021052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080c010b200041086a200028020410ac828080000b200041086a10fb81808000200041206a2480808080000b5201017f23808080800041206b220024808080800010b880808000410110f381808000200041086a410010d18180800010d88080800010ac82808000200041086a10fb81808000200041206a2480808080000b6c01027f23808080800041106b220024808080800010b880808000410110f381808000200041086a410041e18d888000410d10e581808000220110ad8280800002402000280208450d00200028020c10a68080800021010b2001ad10a080808000200041106a2480808080000b7402017f017e23808080800041106b220024808080800010b880808000410110f381808000200041086a410041e18d888000410d10e58180800010ad828080000240024020002802080d00420021010c010b200028020c10d980808000ad21010b200110a080808000200041106a2480808080000bc90101087f23808080800041106b220024808080800010b880808000410510f381808000410041e18d888000410d10e5818080002101410110de818080002102410210de818080002103410310de818080002104410410de818080002105200041086a200110ad828080000240024020002802080d0010b982808000210110b98280800021060c010b200028020c21074200108b8080800022014200108b8080800022062007200220032004200510da808080000b20012006108382808000200041106a2480808080000bb10101067f23808080800041106b220024808080800010b880808000410310f381808000410041e18d888000410d10e5818080002101410110de818080002102410210de818080002103200041086a200110ad828080000240024020002802080d0010b982808000210110b98280800021040c010b200028020c21054200108b8080800022014200108b80808000220420052002200310db808080000b20012004108382808000200041106a2480808080000b930102047f017e23808080800041106b220024808080800010b880808000410310f381808000410041e18d888000410d10e5818080002101410110de818080002102410210de818080002103200041086a200110ad828080000240024020002802080d00420021040c010b200028020c2002200310dc8080800041004aad21040b200410bb80808000200041106a2480808080000bbe0101077f23808080800041106b220024808080800010b880808000410410f381808000410041e18d888000410d10e5818080002101410110de818080002102410210de818080002103410310d1818080002104200041086a200110ad828080000240024020002802080d0010b982808000210110b98280800021050c010b200028020c21064200108b8080800022014200108b808080002205200620022003200410dd808080001a0b20012005108382808000200041106a2480808080000ba60101057f23808080800041106b220024808080800010b880808000410210f381808000410041e18d888000410d10e5818080002101410110d1818080002102200041086a200110ad828080000240024020002802080d0010b982808000210110b98280800021030c010b200028020c21044200108b8080800022014200108b8080800022032004200210de808080001a0b20012003108382808000200041106a2480808080000b990101047f23808080800041106b220024808080800010b880808000410310f381808000410041e18d888000410d10e5818080002101410110de818080002102410210de818080002103200041086a200110ad828080000240024020002802080d0010888180800021010c010b20022003200028020c10f080808000220110df808080001a0b20011088808080001a200041106a2480808080000b990101047f23808080800041106b220024808080800010b880808000410310f381808000410041e18d888000410d10e5818080002101410110de818080002102410210de818080002103200041086a200110ad828080000240024020002802080d0010888180800021010c010b20022003200028020c10f080808000220110e0808080001a0b20011088808080001a200041106a2480808080000ba60101057f23808080800041106b220024808080800010b880808000410210f381808000410041e18d888000410d10e5818080002101410110d1818080002102200041086a200110ad828080000240024020002802080d0010b982808000210110b98280800021030c010b200028020c21044200108b8080800022014200108b8080800022032004200210e1808080001a0b20012003108382808000200041106a2480808080000ba60101057f23808080800041106b220024808080800010b880808000410210f381808000410041e18d888000410d10e5818080002101410110d1818080002102200041086a200110ad828080000240024020002802080d0010b982808000210110b98280800021030c010b200028020c21044200108b8080800022014200108b8080800022032004200210e2808080001a0b20012003108382808000200041106a2480808080000bb50101057f23808080800041106b220024808080800010b880808000410110f381808000200041086a410041e18d888000410d10e58180800010ad828080000240024020002802080d0010b982808000210110b982808000210210888180800021030c010b200028020c21044200108b8080800022014200108b808080002202200410f080808000220310e3808080001a0b200110a180808000200210a18080800020031088808080001a200041106a2480808080000b260010b880808000410110f381808000410041c88b888000410410e58180800010e9838080000b4601027f10b880808000410110f38180800041002100410041d08b888000410810e58180800021010240034020012000460d01200010e983808000200041016a21000c000b0b0b9f0201057f23808080800041206b220024808080800010b88080800010f581808000410210f481808000410010de818080002101410141cc8b888000410410d681808000210220004102360214200041146a41c88b888000410410b6818080002103200028021410f18180800041db90888000410710c78380800021041088818080001a2004200110848180800010b7818080001088818080001a2004200210f78080800010b7818080002000200336021010888180800010f78080800021012000200310928080800036021c200041003602182000200041106a36021402400340200041086a200041146a1087828080002000280208450d01200028020c20011087838080000c000b0b2004200110b780808000200041206a2480808080000b360010b880808000024010a68180800010a28180800010f8808080000d0041dc948880004124108380808000000b410010f3818080000b350010b88080800041671090808080000240416710dd83808000450d00418095888000412c108380808000000b410010f3818080000b450010b880808000410210f3818080000240410041b28b888000410110e581808000410141d88b888000410110e581808000460d0041d98b888000410e109681808000000b0b1f0010b880808000410010f38180800041e78b888000410d109681808000000b4501017f23808080800041206b220024808080800010b880808000410110f381808000200010d28180800020001090828080001088808080001a200041206a2480808080000b4201017f10b880808000410110f3818080000240410010d18180800022001092808080004120460d0041ce8f8880004110109681808000000b20001088808080001a0b1d0010b880808000410010f3818080001088818080001088808080001a0b3401017f10b880808000410210f381808000410010d1818080002200410110d1818080001085808080001a20001088808080001a0b7801017f23808080800041106b220024808080800010b880808000410310f381808000200041086a410010d181808000410141fd8d888000411110e581808000410241f48d888000410910e58180800010a48280800002402000280208450d00200028020c1088808080001a0b200041106a2480808080000b3e01027f10b880808000410110f3818080004100418e8e888000410810e581808000210010f0808080002201200010e4808080001a20011088808080001a0b2d0010b880808000410210f381808000410010d181808000410110d18180800010f880808000ad10bb808080000b1d0010b880808000410010f38180800010bf828080001088808080001a0b3d0010b880808000410210f381808000410041f18d888000410310d681808000410141ee8d888000410310d68180800010f880808000ad10bb808080000b1c0010b880808000410010f38180800010888180800010ff818080000b3a01017f10b880808000410210f381808000410041b38b888000410210d9818080002200410110de8180800010b781808000200010ff818080000bc40203017f017e057f23808080800041106b220024808080800010b880808000410210f381808000420121010240410041a68d888000410310d9818080002202410141a38d888000410310d981808000220310f8808080000d000240200210928080800022042003109280808000470d00410021050340200520044f0d022000410036020820022005200041086a410410aa818080001a200028020821062000410036020c200320052000410c6a410410aa818080001a200641187420064180fe03714108747220064108764180fe037120064118767272200028020c220641187420064180fe03714108747220064108764180fe03712006411876727210ab82808000450d010240200541046a22062005490d00200621050c010b0b41c094888000411c108282808000000b420021010b200110bb80808000200041106a2480808080000b850201057f23808080800041206b220024808080800010b880808000410210f38180800010e2818080002201410141de8c888000410410d68180800010b781808000200041086a108581808000200020002d000c3a001820002000280208360214200110928080800021024100210302400340200341046a22042003490d010240200420024b0d002000410036021c200120032000411c6a410410aa818080001a200041146a200028021c220341187420034180fe03714108747220034108764180fe037120034118767272108582808000200421030c010b0b200028021420002d0018108981808000200041206a2480808080000f0b41c094888000411c108282808000000bd00101047f23808080800041106b220024808080800010b880808000410310f381808000410041b38b888000410210d98180800021014101418d8d888000410510e5818080002102410210de8180800021030240024020024180808080044f0d002000200341187420034180fe03714108747220034108764180fe03712003411876727236020c2001200241027441042000410c6a10e5808080000d01200110ff81808000200041106a2480808080000f0b41a0868880004121108282808000000b41a98d8880004113109681808000000bfe0101057f23808080800041106b220024808080800010b880808000410210f381808000410041b38b888000410210d98180800021014101418d8d888000410510e58180800021020240024002402001109280808000410276220320024d0d000240024020020d0010888180800021040c010b200041086a20014100200210bd828080002000280208450d02200028020c21040b20002001200241016a200310bd828080002000280200450d02200420002802041085808080001a200410ff81808000200041106a2480808080000f0b418186888000411d108380808000000b418186888000411d108380808000000b418186888000411d108380808000000bbe0101027f23808080800041206b220024808080800010b880808000410210f381808000200041106a410041b38b888000410210d981808000410110de8180800010bc828080000240024020002802100d0041e097888000410010a2808080000c010b20002802142101200041086a108581808000200020002d000c3a001c20002000280208360218200041186a410110fe818080002001200041186a109682808000200028021820002d001c1089818080000b200041206a2480808080000b6001017f23808080800041106b220024808080800010b880808000410210f381808000200041086a410041b38b888000410210d981808000410110de8180800010bc828080002000280208410047ad10bb80808000200041106a2480808080000bea0101047f23808080800041206b220024808080800010b880808000410210f38180800010dd818080002101200041106a41046a2202410141de8c888000410410c281808000200041086a41046a200041186a2d00003a00002000200028021436020841002103200241003a0000200041003602100240034020034105460d012000200041086a20036a2d00003a001f20002003200341016a2202200041106a410510f680808000200028020020002802042000411f6a4101108781808000200221030c000b0b2001200041106a4105108e808080001a20011088808080001a200041206a2480808080000bcf0101037f23808080800041106b220024808080800010b880808000410210f381808000410041b38b888000410210d9818080002101024002404101418d8d888000410510e58180800022024180808080044f0d002000410036020c200120024102742000410c6a410410aa818080000d01200028020c220141187420014180fe03714108747220014108764180fe03712001411876727210ef8080800010a180808000200041106a2480808080000f0b41a0868880004121108282808000000b418186888000411d108380808000000b250010b880808000410110f381808000410010d18180800010ca828080001088808080001a0b260010b880808000410210f381808000410010d181808000410110d18180800010cf828080000b3f0010b880808000410210f381808000410041928d888000410710d681808000410110d181808000416710b380808000416710f7808080001088808080001a0b2b0010b880808000410010f38180800041cb91888000410d10ee8080800010ca828080001088808080001a0b2a0010b880808000410010f38180800041e991888000410810ee8080800010c88280800010a1808080000b2a0010b880808000410010f38180800041e291888000410710ee8080800010c78280800010ba808080000b2a0010b880808000410010f38180800041ff91888000410310ee8080800010c58280800010a0808080000b2b0010b880808000410010f38180800041dd91888000410510ee8080800010c682808000ad10a0808080000b6c01027f23808080800041106b220024808080800010b880808000410010f38180800041fc91888000410310ee8080800021012000420037030820002001200041086a10948180800020002802002000280204410110d08180800010bb80808000200041106a2480808080000b2b0010b880808000410010f381808000418292888000410410ee8080800010cb82808000ad10bb808080000b2b0010b880808000410010f38180800041b295888000410410ee8080800010c9828080001088808080001a0bfc0101037f23808080800041206b220024808080800010b88080800041002101410010f3818080002000410c6a41bd8d888000410810ee8080800010928180800002400240200028020c200028021010c5818080000d000240024002402000410c6a10d98380800041ff017122010e020201000b41b380888000410d10a082808000000b410121012000410c6a412010a38280800021020b200028020c200028021010c581808000450d010b02402000411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b02402001450d0020021088808080001a0b200041206a2480808080000f0b41a580888000410e10a082808000000b2c0010b880808000410010f38180800041bd8d888000410810ee8080800010cc8280800045ad10bb808080000b2b0010b880808000410010f38180800041f191888000410b10ee8080800010c682808000ad10a0808080000b240010b880808000410010f38180800041f191888000410b10ee8080800010d5828080000bc50202037f017e23808080800041206b220024808080800010b88080800041002101410010f38180800002400240024041d891888000410510ee80808000220210cd828080000d000c010b2000410c6a2002109281808000024002400240024002402000410c6a10d98380800041ff017122010e0404010203000b41b380888000410d10a082808000000b2000410c6a10f882808000ad2103410121010c020b2000410c6a10f88280800021012000410c6a10f882808000ad4220862001ad842103410221010c010b2000410c6a10f882808000ad2103410321010b200028020c200028021010c581808000450d012000411c6a2d0000450d00410041003602c0e6888000410041003a00c4e68880000b200020033702102000200136020c2000410c6a10fd81808000200041206a2480808080000f0b41a580888000410e10a082808000000b4b01027f10b880808000410110f381808000410041b295888000410410d6818080002100418692888000410410ee80808000220120001085808080001a200110c88280800010a1808080000b6801037f10b880808000410210f3818080004100419e8d888000410510d6818080002100410141998d888000410510d6818080002101418a92888000410410ee80808000220220001085808080001a200220011085808080001a200210c88280800010a1808080000b4701017f10b880808000410110f381808000410041ab8b888000410110e581808000418e92888000410410ee80808000220010f582808000200010cb82808000ad10bb808080000b4101017f10b880808000410210f381808000410041928d888000410710d681808000410110d18180800010f080808000220010b38080800020001088808080001a0b3201017f10b880808000410110f381808000410010d181808000210041cb91888000410d10ee80808000200010cf828080000b2c0010b880808000410110f381808000410010de8180800041e991888000410810ee808080001083818080000b3201017f10b880808000410110f381808000410010dc81808000210041e291888000410710ee80808000200010ce828080000b3b01017f10b880808000410110f381808000410041bc8d888000410110e581808000210041dd91888000410510ee808080002000ad10e3828080000b3101017f10b880808000410110f38180800010d381808000210041c292888000410310ee808080002000ac109a838080000b3201017e10b880808000410110f381808000410010ee81808000210041ff91888000410310ee80808000200010e3828080000b3201017e10b880808000410110f381808000410010c881808000210041fc91888000410310ee808080002000109a838080000b3901017f10b880808000410110f381808000410041bc8d88800010eb818080002100418292888000410410ee808080002000ad109a838080000b3a01017f10b880808000410110f381808000410041858c888000410310d681808000210041b295888000410410ee80808000200010cf828080000bdc0101047f23808080800041206b220024808080800010b88080800010f581808000410010f48180800020004100360218200041106a200041186a10ba818080002000280214210120002802102102200028021810f18180800041bd8d888000410810ee808080002103024002402002450d00200341e097888000410010d4828080000c010b200041086a108581808000200020002d000c3a001c20002000280208360218200041186a410110fe81808000200041186a20011085828080002003200028021820002d001c1098828080000b200041206a2480808080000bf30201027f23808080800041306b220024808080800010b880808000410110f3818080002000411c6a41858c888000410310c68180800041d891888000410510ee80808000210102400240024002400240200028021c0e0400010203000b2001420010e3828080000c030b2000108581808000200020002d00043a002c20002000280200360228200041286a410110fe818080002000280220200041286a10fc818080002001200028022820002d002c1098828080000c020b200041086a108581808000200020002d000c3a002c20002000280208360228200041286a410210fe818080002000280220200041286a10fc818080002000280224200041286a10fc818080002001200028022820002d002c1098828080000c010b200041106a108581808000200020002d00143a002c20002000280210360228200041286a410310fe818080002000280220200041286a10fc818080002001200028022820002d002c1098828080000b200041306a2480808080000b5101037f10b880808000410210f381808000410041b295888000410410d6818080002100410110de818080002101418692888000410410ee80808000220220001085808080001a200120021083818080000b6e01047f10b880808000410310f3818080004100419e8d888000410510d6818080002100410141998d888000410510d6818080002101410210de818080002102418a92888000410410ee80808000220320001085808080001a200320011085808080001a200220031083818080000b5701037f10b880808000410210f381808000410041ab8b888000410110e5818080002100410141d88b88800010eb8180800021012000418e92888000410410ee80808000220210f58280800020022001ad109a838080000b3201017e10b880808000410110f381808000410010c8818080002100419e92888000410910ee808080002000109a838080000b2c0010b880808000410110f381808000410010de8180800041b592888000410d10ee808080001083818080000b3201017f10b880808000410110f381808000410010d181808000210041a792888000410e10ee80808000200010cf828080000b3801017f10b880808000410110f381808000410041928d888000410710d681808000210010f283808000200010a48380800010a0808080000b5502017f017e10b880808000410110f381808000410041928d888000410710d6818080002100024010f283808000200010a48380800022014200520d0041bc95888000410f108380808000000b200110a0808080000b5d02017f017e23808080800041106b220024808080800010b880808000410110f381808000410010ee818080002101200041086a10f2838080002001109d838080002000280208200028020c108482808000200041106a2480808080000b3a01017e10b880808000410110f381808000410010ee81808000210010f2838080002000109e8380800010cc82808000410047ad10bb808080000b5901027f10b880808000410110f381808000410041928d888000410710d6818080002100024010f2838080002201200010a483808000500d0041df87888000411a108380808000000b2001200010a28380800010a0808080000b5a02027f017e10b880808000410110f381808000410041928d888000410710d6818080002100024010f2838080002201200010a18380800010c58280800022024200520d002001200010a28380800021020b200210a0808080000b810103027f017e027f23808080800041106b220024808080800010b880808000410110f38180800041002101410010ee818080002102200041086a10f28380800022032002109d83808000200028020c210402402000280208450d0020032002200410a083808000410121010b20012004108482808000200041106a2480808080000b5202027f017e10b880808000410110f381808000410041928d888000410710d6818080002100024010f2838080002201200010a4838080002202500d0020012002200010a0838080000b200210a0808080000bb50101027f23808080800041c0006b220024808080800010b880808000410010f381808000200010f083808000220136020c200041106a200110918380800020002000410c6a360224200041286a41106a200041106a41106a290200370300200041286a41086a200041106a41086a2902003703002000200029021037032802400340200041106a200041286a1080818080002000280210450d01200035021410a0808080000c000b0b200041c0006a2480808080000bfe0101067f23808080800041206b220024808080800010b880808000410110f38180800041002101410041de8c888000410410e5818080002102200010f0838080002203108b83808000200010dc85808000210402400240200028020022050d00200020043602040c010b200041106a200320002802082201108c838080002000200436021820032001200041106a108d838080000b2000200136021c20004100360218200020043602142000200236021020032004200041106a108d83808000200020043602080240200541016a22040d0041c094888000411c108282808000000b2000200436020020032000108083808000200041206a2480808080000b2d01017f0240200028020c41016a2201450d002000200136020c20010f0b41c094888000411c108282808000000bfe0101067f23808080800041206b220024808080800010b880808000410110f38180800041002101410041de8c888000410410e5818080002102200010f0838080002203108b83808000200010dc85808000210402400240200028020022050d00200020043602080c010b200041106a200320002802042201108c838080002000200436021c20032001200041106a108d838080000b2000410036021c20002001360218200020043602142000200236021020032004200041106a108d83808000200020043602040240200541016a22040d0041c094888000411c108282808000000b2000200436020020032000108083808000200041206a2480808080000b6601027f23808080800041306b220024808080800010b880808000410010f381808000200041206a10f0838080002201108b838080002000410c6a20012000280224109083808000200028020c410173200028021010fa81808000200041306a2480808080000b6601027f23808080800041306b220024808080800010b880808000410010f381808000200041206a10f0838080002201108b838080002000410c6a20012000280228109083808000200028020c410173200028021010fa81808000200041306a2480808080000b5201017f23808080800041206b220024808080800010b880808000410010f3818080002000410c6a10f083808000109183808000200028020c410173200028021010fa81808000200041206a2480808080000b6601027f23808080800041306b220024808080800010b880808000410010f381808000200041206a10f0838080002201108b838080002000410c6a20012000280228108281808000200028020c410173200028021010fa81808000200041306a2480808080000ba80302067f017e23808080800041d0006b220024808080800010b880808000410210f38180800041012101410041af8e888000410710e5818080002102410141b68e888000410710e58180800021032000410c6a10f0838080002002108281808000024002400240200028020c450d00200041206a2000410c6a10818180800010f083808000220420002802242205108a838080000d02200041306a2004108b83808000200041306a10dc858080002101200028022821022000200136022820042005200041206a108d83808000024002402002450d00200041c0006a20042002108c838080002000200136024c20042002200041c0006a108d838080000c010b200020013602380b2000200536024c20002002360248200020013602442000200336024020042001200041c0006a108d83808000200028023041016a22010d0141c094888000411c108282808000000b410121010c010b200020013602302004200041306a108083808000200041186a200041c8006a2902003702002000200029024022063702102006a72102410021010b2001200210fa81808000200041d0006a2480808080000ba80302067f017e23808080800041d0006b220024808080800010b880808000410210f38180800041012101410041af8e888000410710e5818080002102410141b68e888000410710e58180800021032000410c6a10f0838080002002108281808000024002400240200028020c450d00200041206a2000410c6a10818180800010f083808000220420002802242205108a838080000d02200041306a2004108b83808000200041306a10dc858080002101200028022c21022000200136022c20042005200041206a108d83808000024002402002450d00200041c0006a20042002108c838080002000200136024820042002200041c0006a108d838080000c010b200020013602340b2000200236024c20002005360248200020013602442000200336024020042001200041c0006a108d83808000200028023041016a22010d0141c094888000411c108282808000000b410121010c010b200020013602302004200041306a108083808000200041186a200041c8006a2902003702002000200029024022063702102006a72102410021010b2001200210fa81808000200041d0006a2480808080000b7f01027f23808080800041306b220024808080800010b880808000410110f381808000410041af8e888000410710e58180800021012000410c6a10f08380800020011082818080000240200028020c450d00200041206a2000410c6a10818180800010f083808000200041206a1089838080000b200041306a2480808080000b6601027f23808080800041206b220024808080800010b880808000410110f381808000410041af8e888000410710e58180800021012000410c6a10f0838080002001109083808000200028020c410173200028021010fa81808000200041206a2480808080000b880101037f23808080800041306b220024808080800010b880808000410210f381808000410041af8e888000410710e5818080002101410141a68e888000410910e58180800021022000411c6a10f08380800020011082818080002000410c6a2000411c6a10818180800010f0838080002000410c6a2002108f83808000200041306a2480808080000b9b0101047f23808080800041306b220024808080800010b880808000410210f381808000410041af8e888000410710e5818080002101410141a68e888000410910e58180800021022000410c6a10f083808000220320011082818080000240200028020c450d00200041286a200041186a290200370300200020002902103703202003200041206a2002108f838080000b200041306a2480808080000bb00101037f23808080800041306b220024808080800010b880808000410110f381808000410041af8e888000410710e581808000210110888180800021022000410c6a10f083808000200110828180800002400340200028020c450d01200041206a2000410c6a1081818080002002200028022010a6828080002000410c6a10f08380800020002802281082818080000c000b0b20002002360220200041206a108682808000200041306a2480808080000be50101047f23808080800041c0006b220024808080800010b880808000410110f381808000410041af8e888000410710e58180800021011088818080002102200010f08380800022033602242000410c6a200320011082818080002000200041246a360220200041286a41106a2000410c6a41106a290200370300200041286a41086a2000410c6a41086a2902003703002000200029020c370328024003402000410c6a200041286a108081808000200028020c450d012002200028021010a6828080000c000b0b20002002360208200041086a108682808000200041c0006a2480808080000b5601017f23808080800041106b220024808080800010b880808000410010f381808000200010ee8380800036020c20002000410c6a1081838080002000280200200028020410d783808000200041106a2480808080000b3301017f10b880808000410110f381808000410041de8c888000410410e581808000210010ee83808000200010ed828080001a0b6301027f23808080800041206b220024808080800010b880808000410010f381808000200041106a10ee83808000220110fe82808000200041086a2001200028021410ef828080002000280208200028020c108a82808000200041206a2480808080000b6a01037f23808080800041106b220024808080800010b880808000410010f381808000200010ee83808000220110fe828080000240200028020422020d0041c58d888000410c109681808000000b2001200210fc80808000ad10a080808000200041106a2480808080000b960102017f017e23808080800041306b220024808080800010b880808000410010f3818080002000410c6a10ea838080002000200041106a1081838080002000200029030037031820002000410c6a36022002400340200041246a200041186a10ce838080002000280224450d01200035022c2101200035022810a080808000200110a0808080000c000b0b200041306a2480808080000b9a0101027f23808080800041306b220024808080800010b880808000410010f38180800010888180800021012000411c6a10ea83808000200041106a200041206a1081838080002000200029031037022802400340200041086a200041286a10fa808080002000280208450d012001200028020c10b7818080000c000b0b20002001360218200041186a10cd83808000200041306a2480808080000bd90101037f23808080800041c0006b220024808080800010b880808000410010f3818080001088818080002101200041286a10ea83808000200041186a2000412c6a108183808000200020002903183702342000200041286a36023c02400340200041106a200041346a10fa8080800020002802104101470d01200041086a200028023c2202280200200241086a280200200028021410df82808000200028020c2102200028020810e8828080002001200210b7818080000c000b0b20002001360224200041246a10cd83808000200041c0006a2480808080000b810101037f23808080800041206b220024808080800010b880808000410210f381808000410041de8c888000410410e5818080002101410141e28c888000410510e5818080002102200041146a10ea83808000200041086a200041146a2001200210e2828080002000280208200028020c108a82808000200041206a2480808080000b5f01027f23808080800041106b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041046a10ea838080002000280204200110e082808000ad10bb80808000200041106a2480808080000b7201027f23808080800041206b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041146a10ea83808000200041086a2000280214200028021c200110df828080002000280208200028020c108a82808000200041206a2480808080000b900101047f23808080800041106b220024808080800010b880808000410110f38180800041002101410041de8c888000410410e5818080002102200041046a10ea83808000024020002802042000280208200210ee82808000450d00200028020c2201200210dd8280800021032001200210de82808000410121010b20012003108a82808000200041106a2480808080000bcb0101067f23808080800041306b220024808080800010b880808000410210f381808000410041de8c888000410410e5818080002101410141f08c888000410910e5818080002102200041246a10ea83808000200041186a200041246a200110e182808000200041106a200041186a10e58280800002402002200028021022032000280214220410e78280800022056a220120054f0d0041c094888000411c108282808000000b200041086a20032004200110e2828080002001ad10a080808000200041306a2480808080000bb70101047f23808080800041206b220024808080800010b880808000410210f381808000410041de8c888000410410e5818080002101410141f98c888000410710e5818080002102200041086a10ea83808000200041146a200041086a200110e1828080002000411c6a280200210120002802182103024020002802140d00200020032001200210e68280800020002802042101200028020021030b2003200110e782808000ad10a080808000200041206a2480808080000b8c0201057f23808080800041306b220024808080800010b880808000410310f381808000410041de8c888000410410e5818080002101410141f08c888000410910e5818080002102410241e78c888000410910e5818080002103200041246a10ea83808000200041186a200041246a200110e182808000200041206a2802002101200028021c21040240024002402000280218450d002004200110e782808000220320026a22022003490d02200041106a20042001200210e2828080000c010b200041086a20042001200310e682808000200028020c2101200028020821040b2004200110e782808000ad10a080808000200041306a2480808080000f0b41c094888000411c108282808000000bd60101047f23808080800041206b220024808080800010b880808000410210f381808000410041de8c888000410410e5818080002101410141808d888000410d10e5818080002102200041146a10ea83808000200041086a200041146a200110e182808000200041106a2802002101200028020c21030240024020002802080d00200120026a22022001490d01200020032001200210e68280800020002802042101200028020021030b2003200110e782808000ad10a080808000200041206a2480808080000f0b41c094888000411c108282808000000bec0201067f23808080800041f0006b220024808080800010b880808000410010f3818080001088818080002101200041206a10f183808000200041186a200041206a41046a1081838080002000200029031837022c2000200041206a360234200041c8006a41046a210202400340200041106a2000412c6a10fa8080800020002802104101470d01200041e0006a20002802342203280200200341086a28020020002802142204109483808000200041386a200041e0006a109783808000200041c8006a41086a200041386a41086a28020036020020002000290338370348200041086a2002108183808000200020002903083702542000200041c8006a36025c0340200041e0006a200041d4006a10ce838080002000280260450d0120002802682103200028026421052001200410a6828080002001200510a6828080002001200310a6828080000c000b0b0b20002001360260200041e0006a108682808000200041f0006a2480808080000b6401027f23808080800041106b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041046a10f18380800020002802042000280208200110e482808000ad10bb80808000200041106a2480808080000b5f01027f23808080800041106b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041046a10f1838080002000280204200110e082808000ad10bb80808000200041106a2480808080000b960201037f23808080800041d0006b220024808080800010b880808000410110f381808000410041de8c888000410410e58180800021012000410c6a10f183808000200041186a200028020c2000280214200110948380800002402000280218450d00200041306a200041246a2802003602002000200029021c37032810888180800021012000200041286a410472108183808000200020002903003702382000200041286a36024002400340200041c4006a200041386a10ce838080002000280244450d01200028024c21022001200028024810a6828080002001200210a6828080000c000b0b20002001360208200041086a108682808000200041d0006a2480808080000f0b41c28e888000410b109681808000000bcf0101047f23808080800041306b220024808080800010b880808000410310f381808000410041de8c888000410410e5818080002101410141f88b888000410310e5818080002102410241e28c888000410510e5818080002103200041146a10f183808000200041206a2000280214200028021c2001109483808000024020002802200d0041c28e888000410b109681808000000b2000200041206a41046a2002200310e282808000200041003602082000200029030037020c200041086a108982808000200041306a2480808080000bc00101037f23808080800041306b220024808080800010b880808000410210f381808000410041de8c888000410410e5818080002101410141f88b888000410310e5818080002102200041146a10f183808000200041206a2000280214200028021c2001109483808000024020002802200d0041c28e888000410b109681808000000b200020002802242000412c6a280200200210df82808000200041003602082000200029030037020c200041086a108982808000200041306a2480808080000b8b0101037f23808080800041206b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041086a10f18380800002402000280208200028020c200110ee828080002202450d00200041146a20002802102001109283808000200041146a10cb838080000b2002ad10bb80808000200041206a2480808080000bf40101037f23808080800041d0006b220024808080800010b880808000410010f381808000200041186a10f183808000200041106a200041186a41046a108183808000200020002903103702242000200041186a36022c200041306a41046a210102400340200041086a200041246a10fa8080800020002802084101470d01200041c0006a200028022c2202280200200241086a280200200028020c1094838080002001200041c0006a109783808000200041c0006a41086a200141086a28020036020020002001290200370340200041c0006a10cb838080000c000b0b200041186a10c883808000200041d0006a2480808080000b910201067f23808080800041306b220024808080800010b880808000410310f381808000410041de8c888000410410e5818080002101410141f88b888000410310e5818080002102410241f08c888000410910e5818080002103200041246a10f183808000200041186a200041246a200110e182808000200041106a200041186a109583808000200041186a20002802102000280214109683808000200041246a200041186a200210e182808000200041086a200041246a10e5828080000240200320002802082204200028020c220510e78280800022026a220120024f0d0041c094888000411c108282808000000b200020042005200110e2828080002001ad10a080808000200041306a2480808080000bc70201077f23808080800041c0006b220024808080800010b880808000410410f38180800041002101410041de8c888000410410e5818080002102410141f88b888000410310e5818080002103410241e28c888000410510e5818080002104410341bd8e888000410510e5818080002105200041286a10f1838080002000411c6a200041286a200210e1828080002000411c6a41086a2802002102200028022021060240200028021c450d00200041346a20062002109683808000200041106a200041346a2003200410e282808000410121010b200041346a41086a20023602002000200636023820002001360234200041086a200041346a109583808000200041346a2000280208200028020c10968380800020002000280234200028023c200310df828080002000280204200520002802001bad10a080808000200041c0006a2480808080000bca0101047f23808080800041306b220024808080800010b880808000410310f381808000410041de8c888000410410e5818080002101410141f88b888000410310e5818080002102410241e28c888000410510e5818080002103200041186a10f183808000200041246a200041186a200110e182808000200041106a200041246a109583808000200041246a20002802102000280214109683808000200041086a200041246a2002200310e2828080002000280208200028020c108a82808000200041306a2480808080000b6301017f23808080800041206b220024808080800010b880808000410010f381808000200041106a10eb8380800020002000290310370218200041086a2000411c6a1081838080002000280208200028020c10d783808000200041206a2480808080000b6401027f23808080800041106b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041086a10eb838080002000280208200028020c200110e482808000ad10bb80808000200041106a2480808080000b5f01027f23808080800041106b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041086a10eb838080002000280208200110e082808000ad10bb80808000200041106a2480808080000b6401027f23808080800041106b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041086a10eb838080002000280208200028020c200110ee82808000ad10bb80808000200041106a2480808080000b220010b880808000410010f38180800010ef8380800010c78280800010ba808080000b3c01027f10b880808000410110f381808000410010dc81808000210010ef8380800021012001200110c782808000200010b082808000109b838080000b3e01037f10b880808000410110f381808000410010dc81808000210010ef83808000220110c7828080002202200010b28280800020012002109b838080000b6301037f10b880808000410110f381808000410010dc818080002100024010ef83808000220110c7828080002202200010a98280800041ff01714102490d0041d18d8880004110109681808000000b2002200010b38280800020012002109b838080000b3a01027f10b880808000410110f381808000410010dc818080002100024010ef838080002201109c83808000450d002001200010ce828080000b0b1c0010b880808000410010f38180800010ef8380800010d5828080000b230010b880808000410010f38180800010ef83808000109c83808000ad10bb808080000b340010b880808000410110f381808000410041928d888000410710d68180800010ef8380800010d88280800045ad10bb808080000b230010b880808000410010f38180800010ef8380800010cc82808000ad10a0808080000b920101047f23808080800041106b220024808080800010b880808000410010f381808000200041086a10ec8380800020002802082101200028020c10c682808000210241012103024002400340200320024b0d012003417f460d022001200310f082808000ad10a080808000200341016a21030c000b0b200041106a2480808080000f0b41c094888000411c108282808000000b960101057f23808080800041106b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200041086a10ec83808000200028020821020240200028020c220310c68280800041016a22040d0041c094888000411c108282808000000b2002200410f1828080002001ad10e38280800020032004ad10e382808000200041106a2480808080000b8b0101037f23808080800041106b220024808080800010b880808000410110f3818080004100418d8d888000410510e5818080002101200041086a10ec8380800002402001450d0020002802082102200028020c10c6828080002001490d002002200110f082808000ad10a080808000200041106a2480808080000f0b41cb958880004112108380808000000ba70101047f23808080800041106b220024808080800010b880808000410210f381808000410041928d888000410710d68180800021014101418d8d888000410510e5818080002102200041086a10ec8380800002402002450d0020002802082103200028020c200110f2828080002002490d0020012003200210f18280800010d682808000ad10a080808000200041106a2480808080000f0b41cb958880004112108380808000000b4b01017f23808080800041106b220024808080800010b880808000410010f381808000200041086a10ec83808000200028020c10c682808000ad10a080808000200041106a2480808080000b5f01027f23808080800041106b220024808080800010b880808000410110f381808000410041928d888000410710d6818080002101200041086a10ec83808000200028020c200110f282808000ad10a080808000200041106a2480808080000bb90204027f017e027f017e23808080800041306b220024808080800010b880808000410310f38180800010dd818080002101410110ee818080002102200041186a41086a410210e481808000200041086a41086a200041286a2903003703002000200029032037030802400240024010ed808080002203200110b5838080000d00200310b88380800010c482808000220441ff017141ff01460d012003200110b483808000200441016a2201ad42ff0183220510e382808000200310b883808000200510e3828080000c020b2003200110b38380800021010c010b41df8988800041d700108380808000000b024020032001200210bb838080000d00200320012002200041086a10bd8380800020032001200041086a200210c183808000200041306a2480808080000f0b41b68a8880004117108380808000000b870203027f017e017f23808080800041306b220024808080800010b880808000410310f38180800010dd818080002101410110ee818080002102200041186a41086a410210e481808000200041086a41086a200041186a41106a290300370300200020002903203703080240024010ed808080002203200110b583808000450d0020032003200110b3838080002201200210bb83808000450d01200041186a20032001200210b98380800020032001200041186a10c283808000200320012002200041086a10bd8380800020032001200041086a200210c183808000200041306a2480808080000f0b4196898880004110108380808000000b41a689888000411e108380808000000b820203027f017e017f23808080800041206b220024808080800010b880808000410210f38180800010dd818080002101410110ee8180800021020240024010ed808080002203200110b583808000450d0020032003200110b3838080002201200210bb83808000450d01200041086a20032001200210b9838080002000108581808000200020002d00043a001c200020002802003602182000280210200041186a1091818080002000290308200041186a10f981808000200041146a200041186a10be83808000200028021820002d001c108981808000200041206a2480808080000f0b4196898880004110108380808000000b41a689888000411e108380808000000bdb0101037f23808080800041306b220024808080800010b880808000410210f38180800010dd818080002101200041186a41086a410110e481808000200041086a41086a200041186a41106a290300370300200020002903203703080240024010ed808080002202200110b583808000450d0020022002200110b3838080002201200041086a10bf8380800010cc82808000450d0120022001200041086a10bf8380800010c58280800010a080808000200041306a2480808080000f0b4196898880004110108380808000000b41a689888000411e108380808000000b9f0103027f017e017f23808080800041106b220024808080800010b880808000410210f38180800010dd818080002101410110ee818080002102024010ed808080002203200110b583808000450d0020032003200110b3838080002201200210bb83808000450d00200020032001200210b98380800020032001200210b68380800010d58280800020032001200010c2838080000b200041106a2480808080000b6304017e017f017e017f10b880808000410210f3818080004201210010dd818080002101410110ee818080002102024010ed808080002203200110b583808000450d0020032003200110b383808000200210bc83808000ad21000b200010bb808080000b3001017f10b880808000410110f381808000410010d181808000210010f58380800020001086838080001099838080000b3001017f10b880808000410110f381808000410010d181808000210010f583808000200010868380800010d5828080000b3101017f10b880808000410110f381808000410010d181808000210010f5838080002000108883808000ad10bb808080000b4501027f10b880808000410210f381808000410041928d888000410710d6818080002100410110d181808000210110f58380800020002001108583808000ad10bb808080000b3e01017f10b880808000410110f381808000410010d1818080002100024010f58380800020001088838080000d0041dd958880004114108380808000000b0b5201027f10b880808000410210f381808000410041928d888000410710d6818080002100410110d1818080002101024010f583808000200020011085838080000d0041dd958880004114108380808000000b0b7c01057f23808080800041206b220024808080800010ae81808000410210f381808000410010d1818080002101410110de81808000210210a7818080002103200041086a10f683808000200310bb82808000210310888180800021042000410036021420002802102003200420012002200041146a10b283808000000bae0101077f23808080800041206b220024808080800010ae81808000410210f381808000410010d1818080002101410110de81808000210210a7818080002103200210ae8380800021041088818080002105200041086a10f683808000200310bb82808000210310888180800021062000200536021c2000411f411b20041b360218200041fa8e88800041df8e88800020041b36021420002802102003200620012002200041146a10b283808000000b7001047f23808080800041206b220024808080800010ae81808000410110f381808000410010d181808000210110a7818080002102200041086a10f683808000200210bb8280800021021088818080002103200041003602142000280210200220032001200041146a10ac83808000000b6d01027f23808080800041206b220024808080800010b880808000410010f38180800020004181043b00061088818080002101200041086a10f6838080002000200136021c20004112360218200041cd8e888000360214200041086a200041066a200041146a10a783808000000b5f01027f23808080800041206b220024808080800010b880808000410110f381808000410010de818080002101200041146a10f683808000200020002802142000280218200110af83808000200010f881808000200041206a2480808080000ba70101037f23808080800041306b220024808080800010b880808000410210f3818080004100419f8f888000410210d6818080002101410110de818080002102200041146a10f683808000200041206a20002802142000280218200210af838080002001200041206a41086a22022802004200200028022c109881808000200041086a200229030037030020002000290320370300200010f881808000200041306a2480808080000b5b01027f23808080800041106b220024808080800010b880808000410110f381808000410010de818080002101200041046a10f683808000200041046a10aa8380800028020042002001109a81808000200041106a2480808080000b5b01017f23808080800041106b220024808080800010b880808000410010f381808000200041046a10f68380800010a683808000200041046a10aa83808000280200420010a48180800010a180808000200041106a2480808080000b7301017f23808080800041206b2200248080808000410010f381808000200041106a10a8818080002000200028021836020c200041106a10f6838080000240200041106a10aa838080002000410c6a10df83808000450d0041b5888880004115108380808000000b200041206a2480808080000b9d0202077f017e23808080800041306b2200248080808000410010f38180800010a98180800021012000410c6a10f683808000200041206a21022000410c6a10aa8380800021032001109280808000210441002105024002400340200541106a22062005490d02200620044b0d01200242003703002000420037031820012005200041186a411010aa818080001a2000410036022c200041186a2000412c6a10ab818080002105200041186a2000412c6a10ac8180800021072000200041186a2000412c6a10ab81808000360224200020053602202000200737031802402003200210df838080000d00200621050c010b0b41b5888880004115108380808000000b200041306a2480808080000f0b41c094888000411c108282808000000b7101027f23808080800041106b220024808080800010b880808000410010f381808000200041046a10f68380800002400240200028020c10a9838080000d002000280204200028020810b08380800021010c010b10888180800021010b20011088808080001a200041106a2480808080000b7001047f23808080800041206b220024808080800010ae81808000410110f381808000410010d181808000210110a7818080002102200041086a10f180808000200210bb8280800021021088818080002103200041003602142000280210200220032001200041146a10c683808000000b9b0101027f23808080800041106b220024808080800010b880808000410110f38180800010dd818080002101200041046a10f180808000024002402000280204200028020810fd808080004102460d00200110c082808000450d01200028020c4102200110f78080800010d182808000200041106a2480808080000f0b4191888880004114108380808000000b41a5888880004110108380808000000b7d01037f23808080800041206b220024808080800010b880808000410210f381808000410010de8180800021012000410110df8180800022024110763a0012200020023b0110200041146a10f1808080002000200028021420002802182001200041106a10c383808000200010f881808000200041206a2480808080000bbc0101047f23808080800041306b220024808080800010b880808000410310f3818080004100419f8f888000410210d6818080002101410110de8180800021022000410210df8180800022034110763a0012200020033b0110200041146a10f180808000200041206a200028021420002802182002200041106a10c3838080002001200041206a10c483808000200041086a200041206a41086a29030037030020002000290320370300200010f881808000200041306a2480808080000b6f03017f017e017f23808080800041206b220024808080800010b880808000410210f381808000410010ee818080002101410110de818080002102200041146a10f1808080002000200028021420002802182001200210c583808000200010f881808000200041206a2480808080000bae0103027f017e017f23808080800041306b220024808080800010b880808000410310f3818080004100419f8f888000410210d6818080002101410110ee818080002102410210de818080002103200041146a10f180808000200041206a200028021420002802182002200310c5838080002001200041206a10c483808000200041086a200041206a41086a29030037030020002000290320370300200010f881808000200041306a2480808080000b6903017f017e017f23808080800041106b220024808080800010b880808000410210f381808000410010ee818080002101410110de818080002102200041046a10f180808000200041046a10aa8380800028020020012002109a81808000200041106a2480808080000b6702017f017e23808080800041106b220024808080800010b880808000410110f381808000410010ee818080002101200041046a10f18080800010a683808000200041046a10aa83808000280200200110a48180800010a180808000200041106a2480808080000bfd0303017f017e0a7f23808080800041306b220024808080800010b880808000410110f381808000410010ee818080002101200041106a10f18080800010a6838080002102200041106a10aa8380800021034200108b808080002104108480808000210510848080800021061084808080002107108480808000210810848080800021094200108b80808000210a108480808000210b200220032802002001200420052006200720082009200a200b10e680808000024020091092808080000d00200941f181888000412010a4808080001a0b200041003b011c200541002000411c6a410210aa818080001a200810f780808000220510928080800021092000412c6a41003a0000200041286a200936020020002005360224200020093602202000410036021c2000411c6a10d68380800021092000411c6a10d68380800021052000411c6a10d68380800021080240200028021c200028022010c581808000450d00024020002d002c450d00410041003602c0e6888000410041003a00c4e68880000b200041086a108581808000200020002d000c3a00202000200028020836021c2000411c6a200910fe818080002000411c6a200510fe818080002000411c6a200810fe81808000200028021c20002d0020108981808000200041306a2480808080000f0b41c186888000412041a580888000410e10ff80808000000b7201027f23808080800041106b220024808080800010b880808000410010f381808000200041046a10f18080800002400240200028020c10cc82808000450d002000280204200028020810b08380800021010c010b10888180800021010b20011088808080001a200041106a2480808080000b7801027f23808080800041106b220024808080800010b880808000410110f381808000410041b78f888000410310e5818080002101200041046a10f3838080000240200028020810c682808000450d0041bf87888000410f108380808000000b200028020c2001108283808000200041106a2480808080000b6401027f23808080800041106b220024808080800010b880808000410110f3818080004100418d8d888000410510e5818080002101200041046a10f383808000200028020420002802082001108383808000ad10a080808000200041106a2480808080000bd90101077f23808080800041106b220024808080800010b880808000410110f3818080004100418d8d888000410510e5818080002101200041046a10f3838080002000280208220210c6828080002103200028020422042002200310838380800021050240024020032001470d00200521060c010b200420022001108383808000210620042002200120051084838080000b200420022003410010f482808000024020030d0041e0978880004121108282808000000b200028020c2003417f6a1082838080002006ad10a080808000200041106a2480808080000b7101037f23808080800041106b220024808080800010b880808000410210f3818080004100418d8d888000410510e5818080002101410141b58f888000410210e5818080002102200041046a10f3838080002000280204200028020820012002108483808000200041106a2480808080000b960101057f23808080800041106b220024808080800010b880808000410010f381808000200041046a10f3838080002000280208220110c68280800021022000280204210341012104024002400340200420024b0d012004417f460d02200320012004108383808000ad10a080808000200441016a21040c000b0b200041106a2480808080000f0b41c094888000411c108282808000000bae0102057f017e23808080800041206b220024808080800010b880808000410210f381808000200041086a410041c58f88800010c981808000200041146a410141c38f88800010c9818080002000411c6a2802002101200041186a280200210220002802102103200028020c21044200210502402000280208200028021410ab82808000450d0020042002470d002003200110f880808000ad21050b200510bb80808000200041206a2480808080000b180010b880808000410010f381808000420010a0808080000b1f0010b880808000410010f38180800041c094888000411c108282808000000b180010b880808000410010f381808000427e10bb808080000b1e0010b880808000410010f38180800041e186888000410410a2808080000b3f02017e017f10b880808000410110f38180800042012100024010d781808000220141feffffff07460d00200110c082808000ad21000b200010bb808080000b250010b880808000410110f381808000410010d18180800010c082808000ad10bb808080000bd00103017f027e027f23808080800041206b220024808080800010b880808000410110f381808000410041d08c888000410810e581808000ad21014200210210888180800021030240034020012002510d011088818080002204200242017c2202109d828080002003200410b7818080000c000b0b200020033602102000200310928080800036021c200041003602182000200041106a36021402400340200041086a200041146a1087828080002000280208450d01200028020c1088808080001a0c000b0b200041206a2480808080000b4101017f10b880808000410110f3818080000240410041d88c888000410610e58180800022000d0041c28c888000410e109681808000000b2000ad10a0808080000b3201017f10b880808000410110f381808000410041928d888000410710d681808000210010f483808000200010cf828080000b7201017f23808080800041206b220024808080800010b880808000410010f381808000200010f48380800010c98280800041a18f888000410a10ee8080800010e982808000200041106a2000280200200028020410f682808000200028021045ad10bb80808000200041206a2480808080000b9f0101037f23808080800041106b220024808080800010b880808000410110f381808000410041de8c888000410410e5818080002101200010f48380800010c98280800041a18f888000410a10ee8080800010e982808000200028020c10f7808080002202419c878880004108108e808080001a2001200210dc828080002000280208200210d682808000410047ad10bb80808000200041106a2480808080000b7001017f23808080800041206b220024808080800010b880808000410010f381808000200010f48380800010c98280800041a18f888000410a10ee8080800010e982808000200041106a2000280200200028020410f682808000200035021010a080808000200041206a2480808080000ba60302067f017e23808080800041e0006b220024808080800010b880808000410010f381808000200041286a10f48380800010c98280800041a18f888000410a10ee8080800010e982808000200041386a20002802282201200028022c220210f68280800020002802402103200028023c2104024002400240200028023822050d0020032004720d01420121060c020b2004450d002003450d00200041206a20012002200410f98280800020002802200d00200041186a20012002200310f982808000200028021c0d00200041003602502000420437024802400340024020040d0020002802502005470d022000410036025c2000420437025402400340024020030d00200028025c2005460d02200028025810e0838080000c050b200041d4006a200310e383808000200041086a20012002200310f982808000200028020821030c000b0b41002d0091e78880001a10e883808000000b200041c8006a200410e383808000200041106a20012002200410f982808000200028021421040c000b0b200028024c10e0838080000b420021060b200610bb80808000200041e0006a2480808080000bcb0701057f23808080800041e0006b220024808080800002400240109582808000220110ca82808000220210af828080000d00200210f78080800022031092808080002102200041cc006a41003a0000200041c8006a200236020020002003360244200020023602402000410036023c2000413c6a10c98380800021042000413c6a10ca8380800021021088818080002103024003402002450d0120032000413c6a10c98380800010b7818080002002417f6a21020c000b0b200028023c200028024010c581808000450d01024020002d004c450d00410041003602c0e6888000410041003a00c4e68880000b200110d58280800020002004109b828080002000280220450d002000413c6a2004109b82808000200028025c450d000240024002402000413c6a41df8e888000411b109a828080000d002000413c6a41fa8e888000411f109a828080000d012000413c6a41cd8e8880004112109a828080000d02200041286a2004200310da838080002000280228450d03200041306a28020021022000413c6a200028022c2203109b82808000200028025c450d03200041286a2003200210da838080002000280228450d032000413c6a200028022c200041306a28020010da83808000200028023c450d03418c8c8880004136108380808000000b10f581808000410010f48180800020004100360224200041286a200041246a10af81808000200028022410f18180800020002802282102200028022c2101200041286a200310f68180800010f581808000200028022c200028023010f281808000024020020d00200041286a10f683808000200041286a200110d1838080000c030b200041286a10f683808000200028023010b1838080000c020b10f581808000410010f48180800020004100360224200041286a200041246a41998f888000410610b981808000200028022410f18180800020002802282102200041286a200310f68180800010f581808000200028022c200028023010f281808000024020020d00200041286a10a88180800020002802302102200041286a10f683808000200041286a200210d1838080000c020b200041286a10f683808000200028023010b1838080000c010b10f581808000410010f48180800020004100360224200041286a200041246a41998f888000410610b981808000200028022410f18180800020002802282102200041286a200310f68180800010f581808000200028022c200028023010f28180800020020d0041c593888000410810ee808080001099838080000b200041e0006a2480808080000f0b419481888000411941a580888000410e10ff80808000000b090010fc83808000000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030bc10201087f02400240200241104f0d00200021030c010b2000410020006b41037122046a210502402004450d0020002103200121060340200320062d00003a0000200641016a2106200341016a22032005490d000b0b2005200220046b2207417c7122086a210302400240200120046a2209410371450d0020084101480d012009410374220641187121022009417c71220a41046a2101410020066b4118712104200a28020021060340200520062002762001280200220620047472360200200141046a2101200541046a22052003490d000c020b0b20084101480d0020092101034020052001280200360200200141046a2101200541046a22052003490d000b0b20074103712102200920086a21010b02402002450d00200320026a21050340200320012d00003a0000200141016a2101200341016a22032005490d000b0b20000b2900024020020d0020004100360204200020013602000f0b41002d0091e78880001a10e883808000000b1100418f98888000411b108380808000000b0bbe180200418080080baa18546f6b656e417474726962757465736e6f6e46756e6769626c65546f6b656e4d6170706572696e70757420746f6f206c6f6e67696e76616c69642076616c756564656c6962657261746520746f70206465636f6465206572726f7264656c6962657261746520746f7020656e636f6465206572726f7264656c69626572617465206e657374656420656e636f6465206572726f7273657269616c697a6572206465636f6465206572726f723a20455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e46544372656174650000000000000000000000000000000000000000000000000000000000000000696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473656e64706f696e7420726573756c7420656e636f6465206572726f723a2063616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e6567617469766566616c73657472756563616e467265657a6563616e5769706563616e506175736563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c65000000000000000000010000000000000000000000000000000000000002ffff464e474e46545346544d4554417265676973746572416e64536574416c6c526f6c65736973737565636f6e74726163742063616c6c20656e636f6465206572726f723a2043425f434c4f53555245696e70757420746f6f2073686f72746361737420746f20693634206572726f72703232347032353670333834703532314d616e6167656456656320696e646578206f7574206f662072616e67650000617474656d707420746f206d756c7469706c792077697468206f766572666c6f776572726f72206465636f64696e67204553445420617474726962757465733a2045474c4473746f72616765206b657920656e636f6465206572726f723a2073746f7261676520656e636f6465206572726f723a202e6d61707065642e6e6f64655f69642e6974656d2e696e666f2e6e6f64655f6c696e6b732e76616c75656c656e20616c7265616479207365742e6c656e2e6e6f64652e73746f726167654164647265737320616c7265616479207265676973746572656449737375652077617320616c72656164792063616c6c6564546f6b656e20494420616c726561647920736574496e76616c696420746f6b656e204944496e76616c6964207061796d656e7420746f6b656e4d757374206973737565206f722073657420746f6b656e20494420666972737464656661756c745f69737375655f636264656661756c745f69737375655f696e69745f737570706c795f6362556e6b6e6f776e20746f6b656e206964412076616c756520776173206e6f742070726576696f75736c79207365742e617474722e636f756e7465722e6d617070696e672e6e6f6e6365436f756e746572206f766572666c6f772e2054686973206d6f64756c652063616e20686f6c642065766964656e636520666f72206d6178696d756d2075383a3a4d415820646966666572656e7420746f6b656e20494473412076616c75652077617320616c7265616479207365746c6f67206461746120656e636f6465206572726f723a206c6f6720746f70696320656e636f6465206572726f723a20726563697069656e742061646472657373206e6f742073657473746f72616765206465636f6465206572726f723a20786d616d766563616d76656e636f64655f6572726f725f6d6574686f6464617461617267326e756d5f6c6f67736261206d75737420657175616c206273635f70616e696320746573747369676e6b657973686173685f74797065617267617267336e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637477616e7473206e6f6e2d7a65726f686f775f6d616e796e756d6265726974656d76616c75656f7468657277697365696e6372656d656e7464656661756c746b65795f696e6372656d656e74696e64657861646472657373616464723261646472316d76326d7631696e646578206f7574206f6620626f756e6473696f70745f61646472517565756520656d707479216e6f7420656e6f7567682066756e647363757276655f62697473697a656d62326d6231736c6963655f6c656e7374617274696e675f706f736974696f6e6e725f6279746573617272617973746f726167655f6b65796e65775f76616c75656e6f64655f6964656c656d656e746f746865724e6f2073746f72616765217365745f726f6c65735f63616c6c6261636b637573746f6d5f69737375655f7a65726f5f737570706c795f6362637573746f6d5f69737375655f6e6f6e5f7a65726f5f737570706c795f6362726573756c74746f7365745f6d61707065726174747269627574657369646c656e617673656e7a6f70747332733170656e64696e67626164206172726179206c656e67746876617220617267736172726179206465636f6465206572726f726361706163697479206578636565646564696e707574206f7574206f662072616e6765696e697469616c5f63616c6c657263616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75656576656e745f616576656e745f626576656e745f6572725f646174616576656e745f6572725f746f7069636c6f61645f776974685f6b65795f6572726c6f61645f776974685f76616c75655f65727273746f72655f776974685f76616c75655f6572726d61705f6d61707065727665635f6d617070657273746f726167655f62797465737365725f327573697a656269675f696e746269675f75696e746e725f746f5f636c656172693634753634626f6f6c6d6170316d6170326d61703371756575655f6d6170706572454c524f4e44693634454c524f4e447265736572766564454c524f4e4442696755696e746933326d795f73696e676c655f76616c75655f6d61707065726c6973745f6d61707065726d61705f73746f726167655f6d6170706572616464726573735f696473756e697175655f69645f6d6170706572636f6e74726163745f6164647265737377686974656c6973744d617070657266756e6769626c65546f6b656e4d6170706572726f6c657353657400000003000000030000000300000004000000000000008302020086020200890202008c020200e00b0200140b0200300b02004c0b02006c0b0200840b0200a00b0200c40b0200dc0b0200100b02002c0b0200480b0200680b0200800b02009c0b0200c00b0200d80b02000000000000000000617474656d707420746f206164642077697468206f766572666c6f77456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e7473616464724964616464726c6173744964556e6b6e6f776e2061646472657373696e646578206f7574206f662072616e67654974656d206e6f742077686974656c6973746564454c524f4e4472657761726445534454526f6c654c6f63616c4d696e740000fd0a02001100000045534454526f6c654c6f63616c4275726e000000180b02001100000045534454526f6c654e4654437265617465000000340b02001100000045534454526f6c654e46544164645175616e746974790000500b02001600000045534454526f6c654e46544275726e00700b02000f00000045534454526f6c654e4654416464555249000000880b02001100000045534454526f6c654e46545570646174654174747269627574657300a40b02001b000000455344545472616e73666572526f6c65c80b020010000000617474656d707420746f2073756274726163742077697468206f766572666c6f7770616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e20666f7262696464656e0041ac98080b049cffffff00d9050d2e64656275675f616262726576011101250e1305030e10171b0eb44219110155170000023901030e0000032e001101120640186e0e030e3a0b3b053f198701190000042e00110112064018030e3a0b3b05360b3f198701190000051101250e1305030e10171b0eb44219110112060000062e006e0e030e3a0b3b05200b0000072e006e0e030e3a0b3b0b200b0000082e011101120640186e0e030e3a0b3b0b360b0000091d01311311011206580b590b570b00000a1d01311311011206580b5905570b00000b1d00311311011206580b590b570b00000c1d0131135517580b5905570b00000d1d0031135517580b5905570b00000e1d00311311011206580b5905570b00000f1d0131135517580b590b570b0000101d0031135517580b590b570b0000111d00311011011206580b5905570b0000121101250e1305030e10171b0eb442190000132e011101120640186e0e030e3a0b3b053f190000141d01311011011206580b590b570b0000151d00311011011206580b590b570b0000161d0031135517580b590b0000171d0031105517580b590b570b0000182e006e0e030e3a0b3b0b3f19200b0000192e006e0e030e3a0b3b053f19200b00001a2e011101120640186e0e030e3a0b3b0b00001b2e01110112064018311300001c1d01311311011206580b590b00001d2e01110112064018030e3a0b3b053f1900001e1d01311011011206580b5905570b00001f1d0131105517580b5905570b0000201d0131105517580b590b570b0000211d0031105517580b5905570b0000221d00311011011206580b590b0000231d01311011011206580b590b0000242e00110112064018030e3a0b3b053f190000251d0031105517580b590b0000262e001101120640186e0e030e3a0b3b0b3f198701190000272e006e0e030e3a0b3b0b870119200b0000282e011101120640186e0e030e3a0b3b0b360b3f198701190000292e001101120640186e0e030e3a0b3b05360b3f1987011900000000c2bf050b2e64656275675f696e666f7000000004000000000004019a1901001c002c19010000000000ee0b000000000000202c000002d40b000002e60b000003147400000900000007ed03000000009f79170000dc0200000120020002d40b000002bd05000004950201000900000007ed03000000009f2407000002980103000000002e0b000004000000000004059a1901001c00cf1801007200000076fc0000ffffffffd80e000002c20a00000266050000026005000002bd02000006a2230000c8b6000002ab030106eb98000088ba000002ab0301069637000087bb000002ab03010000025805000002bd02000006501f000088ba000004100401066d83000087bb00000410040100000002f10a000002cd020000020c02000007dc1e0000b3b600000be30107a95000002eba00000bf3010755a1000075ba00000be301074027000074bb00000be301073174000053bb00000bf301000002bd02000006c6630000deb600000c930201067177000014b700000cbd0201064b7a000032b700000c93020106f78f00006ab700000c93020106d46f00004cb700000cbd02010000023104000002e10a000002b30a0000060a3700006eb6000003210201060a3700006eb600000321020100000002b805000002e10a0000028901000006dd6800007eb6000006680401060f1c00009db6000006950401000239010000064e26000083b6000006c704010002ef00000006b49c0000a2b600000628050100021502000007ac0d0000870b000006bf010002430100000603a400007eb6000006d802010002f900000006f21d000083b6000006330301000002280400000209030000025f02000007745d00009eb700000d21010000000002010600000260040000027501000006199200006603000005ed05010000000214070000024902000006fc4a0000b60b00000ee501010000020aec000002bd02000002bc03000006328f000000ec00000ac804010006ef9f0000bc0300000a990401000000024e04000002dd080000027e07000002fb06000007dfa60000fb0600000702010002d20a000008ffffffffd80e000004ed00059fe5590000d20a000001e20309dc000000ffffffff080000000f0a1a0a99000000ffffffff080000000c9a021a0b3a000000ffffffff080000000bee1c00000c7a010000000000000104010e0c5a0100002000000006c804090d2e01000040000000066904110e02020000ffffffff07000000066c041c000009e9000000ffffffff020000000f0e150aa5000000ffffffff020000000cc4021e0b6d000000ffffffff020000000bf925000009f6000000ffffffff020000000f0a1a0ab1000000ffffffff020000000c9a021a0b47000000ffffffff020000000bee1c000009f6000000ffffffff020000000f0a1a0ab1000000ffffffff020000000c9a021a0b47000000ffffffff020000000bee1c00000a7a010000ffffffff16000000011001120a5a010000ffffffff1600000006c804090e02020000ffffffff07000000066c041c0e2e010000ffffffff0700000006690411000009e9000000ffffffff0c0000000f0e150aa5000000ffffffff0c0000000cc4021e0b6d000000ffffffff0c0000000bf92500000a7a010000ffffffff18000000010e010e0a5a010000ffffffff1800000006c804090e02020000ffffffff09000000066c041c0e2e010000ffffffff0700000006690411000009f6000000ffffffff110000000f0a1a0ab1000000ffffffff110000000c9a021a0b47000000ffffffff110000000bee1c00000ae3010000ffffffff19000000011c0112098d010000ffffffff190000000d22130a67010000ffffffff19000000062905090e02020000ffffffff010000000699041c0d3b01000060000000069604110000000ff6000000780000000f0a1a0cb1000000900000000c9a021a1047000000a80000000bee1c00000e6c020000ffffffff120000000124010d11d80b0000ffffffff0a000000012501140903010000ffffffff0a0000000f0a1a0abd000000ffffffff0a0000000c9a021a0b54000000ffffffff0a0000000bee1c00000903010000ffffffff0a0000000f0a1a0abd000000ffffffff0a0000000c9a021a0b54000000ffffffff0a0000000bee1c00000f03010000c00000000f0a1a0cbd000000e80000000c9a021a1054000000100100000bee1c00000cc501000038010000013901160cb2010000600100000634030e0ca00100008801000006dc0223101c020000a801000006c11c0000000910010000ffffffff0a000000011d150ac9000000ffffffff0a0000000cc4021e0b7a000000ffffffff0a0000000bf92500000ce3010000c8010000015c01160f8d010000e00100000d22130c67010000f8010000062905090d3b01000010020000069604110e02020000ffffffff050000000699041c0000000903010000ffffffff100000000f0a1a0abd000000ffffffff100000000c9a021a0b54000000ffffffff100000000bee1c00000c7a010000300200000166011a0c5a0100004802000006c804090d2e01000060020000066904110d0202000078020000066c041c000009e9000000ffffffff020000000f0e150aa5000000ffffffff020000000cc4021e0b6d000000ffffffff020000000bf92500000903010000ffffffff080000000f0a1a0abd000000ffffffff080000000c9a021a0b54000000ffffffff080000000bee1c000009f6000000ffffffff020000000f0a1a0ab1000000ffffffff020000000c9a021a0b47000000ffffffff020000000bee1c000009f6000000ffffffff020000000f0a1a0ab1000000ffffffff020000000c9a021a0b47000000ffffffff020000000bee1c00000a7a010000ffffffff18000000016a011e0a5a010000ffffffff1800000006c804090e02020000ffffffff05000000066c041c0d2e0100009002000006690411000009e9000000ffffffff0c0000000f0e150aa5000000ffffffff0c0000000cc4021e0b6d000000ffffffff0c0000000bf92500000a6c020000ffffffff140000000181010d0948020000ffffffff010000000720090e3a020000ffffffff010000000acf041200000910010000ffffffff1c0000000f0e150ac9000000ffffffff1c0000000cc4021e0b7a000000ffffffff1c0000000bf92500000910010000ffffffff1c000000010e150ac9000000ffffffff1c0000000cc4021e0b7a000000ffffffff1c0000000bf92500000a6c020000ffffffffa8000000018e010a0948020000ffffffff010000000720090e3a020000ffffffff010000000acf041200000ce3010000a8020000018f010e0f8d010000d00200000d22130c67010000f8020000062905090d3b01000020030000069604110d02020000400300000699041c00000009e9000000ffffffff0c0000000f0e150aa5000000ffffffff0c0000000cc4021e0b6d000000ffffffff0c0000000bf925000009f6000000ffffffff080000000f0a1a0ab1000000ffffffff080000000c9a021a0b47000000ffffffff080000000bee1c00000ff6000000580300000f0a1a0cb1000000700300000c9a021a1047000000880300000bee1c000009e9000000ffffffff0c0000000f0e150aa5000000ffffffff0c0000000cc4021e0b6d000000ffffffff0c0000000bf92500000ae3010000ffffffff1d0000000195010e098d010000ffffffff1d0000000d22130a67010000ffffffff1d000000062905090d3b010000a0030000069604110000000ce3010000b803000001a301160f8d010000d80300000d22130c67010000f8030000062905090d3b01000018040000069604110e02020000ffffffff0e0000000699041c0000000ce30100003804000001aa01160f8d010000580400000d22130c6701000078040000062905090d3b01000098040000069604110e02020000ffffffff0e0000000699041c00000009f6000000ffffffff100000000f0a1a0ab1000000ffffffff100000000c9a021a0b47000000ffffffff100000000bee1c00000a7a010000ffffffff1600000001b101160a5a010000ffffffff1600000006c804090e02020000ffffffff07000000066c041c0e2e010000ffffffff070000000669041100000000000000003f00000004000000000004129a1901001c00bdf70000cb0b000076fc0000024e04000002dd080000027e070000028105000007b0b5000081050000010a010000000000fa0e000004000000000004019a1901001c00340701000a0c000076fc000000000000382c000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000002310400000269030000022a02000007e38e0000720b000002ab0100029c01000006831b00007b050000020f010100022401000006f933000074050000027301010002a6010000062d560000b4050000024b020100027a00000006906d00001808000002d501010002910000000606720000c5060000029b0301000202010000068b550000a2060000021603010002f80100000709710000720b000002ab0100024c01000006023900007b050000020f01010002da00000006b8250000740500000273010100023e02000006ec260000b4050000024b020100021901000006018a00001808000002d5010100025302000006bf560000c5060000029b03010002ce000000065c350000a206000002160301000002c7080000020000000006588c0000de06000008f702010002b202000006a74c0000de06000008f7020100000002010600000260040000027202000006d45b0000e40a000003f1050106b17200006d03000003f3050106eb5400006603000003ed050100027f0100000679240000f005000003990501069c2c0000c70a0000039b05010002ee0100000635680000e40a000003f10501066b3b00006d03000003f3050106848800006603000003ed050100022f01000006493f0000f00500000399050106e6650000c70a0000039b05010000000214070000027100000006f93d0000350c000009cd040100023f000000069a9a0000350c000009cd04010000020aec000002bd02000002b403000006baaa0000e7eb00000b67040100065e820000b40300000b51040102bc03000006328f000000ec00000bc804010006ef9f0000bc0300000b990401000000024e04000002ae03000002bd020000070a6f00006f050000077b010790af00006a0500000794010002d00b000007b18c0000dcbb000004050113ffffffff9402000007ed03000000009f1a33000088f3000005ea010f03030000b804000004c30909e5020000ffffffff0e000000041d150948000000ffffffff0e000000077c160e3a000000ffffffff0e0000000175041200000b86000000ffffffff03000000041f110bc6010000ffffffff080000000422080bd3010000ffffffff0100000004240c0bd3010000ffffffff0100000004280c0bf3010000ffffffff01000000042c0c0bf3010000ffffffff0300000004370c0b98000000ffffffff0100000004252109f1020000ffffffff010000000425140968000000ffffffff010000000795110e5a000000ffffffff0100000001d1041200000b98000000ffffffff0100000004292109f1020000ffffffff010000000429140968000000ffffffff010000000795110e5a000000ffffffff0100000001d1041200000bab000000ffffffff0d000000042e100bf3010000ffffffff01000000042e100b86000000ffffffff05000000043f2509f1020000ffffffff03000000043f180968000000ffffffff030000000795110e5a000000ffffffff0300000001d1041200000bd3010000ffffffff09000000044c080b86000000ffffffff0300000004561d147e1b0000ffffffff12000000045b2715141b0000ffffffff0300000007a01615401b0000ffffffff0b00000007a31a15201b0000ffffffff0100000007a11600147e1b0000ffffffff1200000004602715141b0000ffffffff0300000007a01615401b0000ffffffff0b00000007a31a15201b0000ffffffff0100000007a116000bab000000ffffffff0b0000000468180bd1000000ffffffff0d000000046f150bd1000000ffffffff03000000046e150b00020000ffffffff0b0000000474080be0010000ffffffff0100000004750c0bbe000000ffffffff0900000004781d0b98000000ffffffff0300000004781d09aa0e0000ffffffff030000000477340b67020000ffffffff030000000ab30d000bd1000000ffffffff030000000477230b00020000ffffffff010000000477230b94010000ffffffff0d000000048e090b86000000ffffffff0100000004920c0bbe000000ffffffff0500000004941d0b98000000ffffffff0700000004941d0b86000000ffffffff0100000004932c09aa0e0000ffffffff07000000047e190b67020000ffffffff070000000ab30d000be0010000ffffffff0100000004860c14fd1b0000ffffffff0700000004881115cd1b0000ffffffff070000000ac70d000be4000000ffffffff0900000004890d0b98000000ffffffff01000000049b1d09f1020000ffffffff01000000049b100968000000ffffffff010000000795110e5a000000ffffffff0100000001d10412000009aa0e0000ffffffff0700000004a3310b67020000ffffffff070000000ab30d000bbe000000ffffffff0500000004a4190b98000000ffffffff0300000004a4190bd1000000ffffffff0700000004a31f0b00020000ffffffff0100000004a31f0bbe000000ffffffff0800000004ad160b86000000ffffffff0500000004ad160bd1000000ffffffff0100000004b00f0bf7000000ffffffff0100000004b0050bf7000000ffffffff0b00000004b1050b86000000ffffffff0100000004b9130b94010000ffffffff0300000004b9090ff10200000805000004bc050f68000000200500000795110d5a0000003805000001d1041200000b94010000ffffffff0100000004b6090b00020000ffffffff010000000468170bbe000000ffffffff0d00000004551f0bbe000000ffffffff0500000004541f0b86000000ffffffff09000000041e1109e5020000ffffffff0f000000041c150948000000ffffffff0f000000077c160e3a000000ffffffff0f00000001750412000000000777b5000088ba000004050113ffffffff1d03000007ed03000000009f98130000acf3000005ea010f780800005005000004c90909860e0000ffffffff17000000041d1509a6020000ffffffff17000000077c160e98020000ffffffff170000000b6e041200000b0a010000ffffffff03000000041f110b13020000ffffffff0d0000000422080b20020000ffffffff0100000004240c0b20020000ffffffff0100000004280c0b40020000ffffffff01000000042c0c0b40020000ffffffff0300000004370c0b1c010000ffffffff0100000004252109920e0000ffffffff0100000004251409c6020000ffffffff010000000795110eb8020000ffffffff010000000bcf041200000b1c010000ffffffff0100000004292109920e0000ffffffff0100000004291409c6020000ffffffff010000000795110eb8020000ffffffff010000000bcf041200000b2f010000ffffffff12000000042e100b40020000ffffffff01000000042e100b40020000ffffffff07000000043c0c1640020000a005000004000b0a010000ffffffff05000000043f2509920e0000ffffffff03000000043f1809c6020000ffffffff030000000795110eb8020000ffffffff030000000bcf041200000b20020000ffffffff09000000044c080b0a010000ffffffff0300000004561d14901b0000ffffffff15000000045b2717601b0000b805000007a016152d1b0000ffffffff0100000007a116154d1b0000ffffffff0300000007a31a0014901b0000ffffffff1500000004602717601b0000d005000007a016152d1b0000ffffffff0100000007a116154d1b0000ffffffff0300000007a31a000b2f010000ffffffff0b0000000468180b55010000ffffffff12000000046f150b55010000ffffffff03000000046e150b4d020000ffffffff0b0000000474080b2d020000ffffffff0100000004750c0b42010000ffffffff0a00000004781d0b1c010000ffffffff0300000004781d09cf0e0000ffffffff050000000477340b7a020000ffffffff050000000ab30d000b55010000ffffffff050000000477230b4d020000ffffffff010000000477230bdb0e0000ffffffff010000000477110ba7010000ffffffff11000000048e090b0a010000ffffffff0100000004920c0b4d020000ffffffff0100000004920c0b42010000ffffffff0500000004941d0b1c010000ffffffff0700000004941d0b0a010000ffffffff0100000004932c09cf0e0000ffffffff07000000047e190b7a020000ffffffff070000000ab30d000b40020000ffffffff0300000004800c0b2d020000ffffffff0100000004860c140f1c0000ffffffff0800000004881115df1b0000ffffffff080000000ac70d000b68010000ffffffff0a00000004890d0b1c010000ffffffff01000000049b1d09920e0000ffffffff01000000049b1009c6020000ffffffff010000000795110eb8020000ffffffff010000000bcf041200000b42010000ffffffff0900000004a4190b1c010000ffffffff0700000004a41909cf0e0000ffffffff0300000004a3310b7a020000ffffffff030000000ab30d000b55010000ffffffff0500000004a31f0b4d020000ffffffff0100000004a31f0bdb0e0000ffffffff0100000004a30d0bed0e0000ffffffff0500000004b00f0b55010000ffffffff0500000004b00f0b7b010000ffffffff0100000004b0050b7b010000ffffffff0500000004b1050b0a010000ffffffff0100000004b9130ba7010000ffffffff0300000004b9090f920e0000e805000004bc050fc6020000000600000795110db8020000180600000bcf041200000ba7010000ffffffff0100000004b6090b42010000ffffffff0c00000004ad160b0a010000ffffffff0100000004ad160bbc0e0000ffffffff0700000004a9220b4d020000ffffffff010000000468170b42010000ffffffff0100000004551f0bbc0e0000ffffffff0d00000004551f0b42010000ffffffff0100000004541f0bbc0e0000ffffffff0500000004541f0b0a010000ffffffff0e000000041e1109860e0000ffffffff14000000041c1509a6020000ffffffff14000000077c160e98020000ffffffff140000000b6e04120000000000025f02000007eb4d00006f050000077b0107489000006a0500000794010000022f03000002f90000000780a40000350c00000ab20100021f02000006401800000d0300000a7401010002710000000795960000350c00000ab20107e7840000e00700000a9a0100029d02000006555200000d0300000a74010100000000b500000004000000000004129a1901001c008ff500002b15000076fc000002c20a000002140700000271000000079c2200003504000001940106f93d0000350c000001cd040106f93d0000350c000001cd040100020c02000006c0710000350c000003d0040106c0710000350c000003d0040100023f000000078d34000035040000019401000000024e04000002ae03000002bd0200001817410000a10a0000029e0100025f02000018412c0000a10a0000029e01000000007b00000004000000000004129a1901001c0025ed0000c515000076fc000002c20a000002140700000271000000079c2200003504000001940100023f000000078d34000035040000019401000000024e040000022f03000002f900000018753e00003504000002c60100027100000018a64400003504000002c60100000000a102000004000000000004059a1901001c003bf200004c16000076fc00009f0201004a000000024e040000027a070000026004000006073a000080040000020e010106bb890000cd080000021c010107097f0000520b0000027c0102520b000007f2790000a10400000280010787450000e304000002980107da4600001d050000028a01000781970000450b0000021c0102450b000007486600008e040000021e0107211b0000c50400000236010767700000020500000228010007465e00006604000002e101026604000007d96d00007004000002e3010774990000b504000002ec010000139f0201004a00000007ed03000000009f6c230000f90500000190010b35000000a60201003f00000003360900195c7b0000e90600000190010119b54e0000ab0a00000190010119375c0000a00300000190010119c46c000000060000019001011937600000c602000001900101000002c20a00000214070000024902000006b10f0000350c000004cd040106b10f0000350c000004cd040106a79f0000ff0800000471050106b10f0000350c000004cd040106a79f0000ff0800000471050100000266050000026005000002bd02000006f87f0000d7b7000005ab030106346c0000ccb7000005d0010106311100004cb800000501040106f87f0000d7b7000005ab03010000025805000002bd02000006f6950000d7b700000610040106f55d0000ccb7000006dd010106db2400004cb800000666040106983000008fb6000006dd01010614730000d3b600000666040106983000008fb6000006dd01010614730000d3b600000666040106f6950000d7b7000006100401061fb30000c8b6000006100401061fb30000c8b600000610040106f6950000d7b700000610040106f6950000d7b7000006100401061fb30000c8b60000061004010000000000dd05000004000000000004019a1901001c0071e800009417000076fc000000000000502c000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b40300000251040102bc03000006328f000000ec000002c8040106328f000000ec000002c804010006ef9f0000bc0300000299040106ef9f0000bc0300000299040100000266050000026005000002bd02000006eb98000088ba000005ab030100000002f10a000002cd020000020c0200000755a1000075ba000007e301000002bd020000064b7a000032b7000008930201000000024e04000002dd080000027e0700000676560000240b00000660010106f0960000f70a0000066801010662490000370b00000656010102d80200001affffffff9308000007ed03000000009f4f320000d8020000015d0948000000ffffffff090000000162240e3a000000ffffffff09000000026e04120015d7240000ffffffff0300000001bf18151a250000ffffffff0500000001c4170fd200000030060000060a1a0cbf00000048060000089a021a10a00000006006000007ee1c000009d2000000ffffffff09000000060a1a0abf000000ffffffff09000000089a021a0ba0000000ffffffff0900000007ee1c000009d2000000ffffffff0b000000060a1a0abf000000ffffffff0b000000089a021a0ba0000000ffffffff0b00000007ee1c00000afe000000ffffffff09000000014f010e0a48000000ffffffff07000000066901150e3a000000ffffffff07000000026e0412000a75000000ffffffff01000000066c01050e5a000000ffffffff0100000002cf041200000afe000000ffffffff09000000014801180a48000000ffffffff07000000066901150e3a000000ffffffff07000000026e0412000a75000000ffffffff01000000066c01050e5a000000ffffffff0100000002cf041200000afe000000ffffffff09000000014001180a48000000ffffffff07000000066901150e3a000000ffffffff07000000026e0412000a75000000ffffffff01000000066c01050e5a000000ffffffff0100000002cf041200000af1000000ffffffff05000000013401180a75000000ffffffff01000000066401050e5a000000ffffffff0100000002cf041200000afe000000ffffffff0b000000013101130a48000000ffffffff09000000066901150e3a000000ffffffff09000000026e0412000a75000000ffffffff01000000066c01050e5a000000ffffffff0100000002cf041200000af1000000ffffffff14000000012b010e0a75000000ffffffff01000000066401050e5a000000ffffffff0100000002cf0412000a48000000ffffffff09000000066101150e3a000000ffffffff09000000026e041200000afe000000ffffffff09000000010d010e0a48000000ffffffff07000000066901150e3a000000ffffffff07000000026e0412000a75000000ffffffff01000000066c01050e5a000000ffffffff0100000002cf041200000afe000000ffffffff02000000015401130a75000000ffffffff01000000066c01050e5a000000ffffffff0100000002cf041200000a48000000ffffffff03000000015801190e3a000000ffffffff03000000026e0412000af1000000ffffffff05000000017d01160a75000000ffffffff01000000066401050e5a000000ffffffff0100000002cf041200000cfe00000078060000018501120a48000000ffffffff03000000066901150e3a000000ffffffff03000000026e0412000a75000000ffffffff0c000000066c01050e5a000000ffffffff0c00000002cf041200000a0b010000ffffffff09000000018e01090a48000000ffffffff07000000065701080e3a000000ffffffff07000000026e041200000af1000000ffffffff150000000195010d0a75000000ffffffff05000000066401050e5a000000ffffffff0500000002cf04120000000002fb0600001affffffffae00000007ed03000000009fdfa60000fb06000009020982000000ffffffff010000000920090e67000000ffffffff0100000002cf0412000000000000003f00000004000000000004129a1901001c0010ea0000d420000076fc0000024e04000002dd080000027e070000021203000007d01b00001203000001520100000000003f00000004000000000004129a1901001c00e8dd00001221000076fc0000024e04000002dd080000027e07000002390500000765b200003905000001070100000000007101000004000000000004059a1901001c0047d600005021000076fc0000ffffffff0f01000002c20a0000023103010002bd02000002b403000006c677000019030100016e040106c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a004010658300000b403000001460401000000024e04000002dd080000027e07000002f00900001bffffffff0f01000007ed03000000009f220100000955000000ffffffff17000000021c140e3a000000ffffffff1700000001750412000955000000ffffffff0a000000022a100e3a000000ffffffff0a00000001750412000975000000ffffffff060000000235090e67000000ffffffff0600000001d1041200000723490000f00900000219010002da050000070f8e0000da0500000367010788b100007e0800000353010002ac09000007a1640000ac09000004180100023609000007c4970000360900000518010000000000cd04000004000000000004019a1901001c00fec30000f622000076fc000000000000682c000002c20a00000214070000023f000000078d340000350400000494010648340000fd020000046f0201069a9a0000350c000004cd04010002a802000006e6550000350c000004cd0401000271000000079c2200003504000004940106102b0000fd020000046f020106f93d0000350c000004cd0401066e4a00000908000004aa030106c1850000fc070000048e050106f4a80000a90b000004a40401000000024e040000022f030000023307000007cc5e00007003000003310107426b0000540700000580011affffffff2d03000004ed00059f0a7b00004707000001140b61000000ffffffff1400000001ab2709d3000000ffffffff1200000001a51f0b35000000ffffffff0800000003401c0b35000000ffffffff04000000034032001cdf000000ffffffff1700000001000b41000000ffffffff1700000005811c0009df000000ffffffff0f000000016e320b41000000ffffffff0f00000005811c0009df000000ffffffff130000000171320b41000000ffffffff1300000005811c0009df000000ffffffff15000000012a1f0b41000000ffffffff1500000005811c0009df000000ffffffff190000000163230b41000000ffffffff1900000005811c000b61000000ffffffff16000000018b2b09df000000ffffffff0500000001932f0b41000000ffffffff0500000005811c0009d3000000ffffffff0a00000001382a0b35000000ffffffff040000000340320b35000000ffffffff0600000003401c000b61000000ffffffff1600000001522b09df000000ffffffff05000000015a2f0b41000000ffffffff0500000005811c000007bd5a000088030000033101077f4200006707000005dc011affffffff8602000007ed03000000009fe38600005b0700000114097c020000ffffffff0700000001a51f0b74000000ffffffff0300000003401c0b74000000ffffffff03000000034032000b4e000000ffffffff0f00000001ab271c88020000ffffffff1700000001000b80000000ffffffff1700000005dd1c000988020000ffffffff0f000000016e320b80000000ffffffff0f00000005dd1c000988020000ffffffff0d0000000171320b80000000ffffffff0d00000005dd1c000b4e000000ffffffff0f000000018b2b0988020000ffffffff0500000001932f0b80000000ffffffff0500000005dd1c00097c020000ffffffff0800000001382a0b74000000ffffffff030000000340320b74000000ffffffff0500000003401c000b4e000000ffffffff0f00000001522b0988020000ffffffff05000000015a2f0b80000000ffffffff0500000005dd1c000988020000ffffffff05000000012a1f0b80000000ffffffff0500000005dd1c000988020000ffffffff050000000163230b80000000ffffffff0500000005dd1c00001affffffff6c01000007ed03000000009f296e00006e07000006170a7c020000ffffffff120000000691011b0b74000000ffffffff0300000003401c0b74000000ffffffff03000000034032000e8d000000ffffffff03000000069301170e8d000000ffffffff07000000069e011f0ca70000009006000006b3011b0d9a000000c006000004920516000d8d000000f006000006b3012b0db40000002007000006b7011b00000000000d02000004000000000004059a1901001c005ffb0000d428000076fc0000ffffffffde07000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b40300000251040100000266050000026005000002bd02000006eb98000088ba000004ab030100000679100000abbb0000052506010002f10a000002cd020000020c0200000755a1000075ba000008e301000002bd020000064b7a000032b7000009930201000000024e04000002dd080000027e070000025a0c0000072970000056050000017201073e85000078080000011f011affffffffde07000004ed00019f619800005a0c000001860948000000ffffffff110000000187140e3a000000ffffffff11000000026e04120015b42d0000ffffffff09000000019c0d09a5000000ffffffff010000000a0a1a0a92000000ffffffff01000000099a021a0b66000000ffffffff0100000008ee1c00000b75000000ffffffff080000000a031215b42d0000ffffffff0100000001ac2210c90000005007000001c40909d5000000ffffffffa202000001c81415b42d0000ffffffff050000000125140bee010000ffffffff620000000131120b00020000ffffffff90000000012e0e10ee01000068070000012f0e0b00020000ffffffff8c00000001300f000000028e06000007f90f00008e060000062f0100024804000007c93600004804000007370100000000003f00000004000000000004129a1901001c00bdf70000882e000076fc0000024e04000002dd080000027e070000028105000007b0b5000081050000010a0100000000006a02000004000000000004059a1901001c0045de0000c72e000076fc0000ffffffff8d09000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040106baaa0000e7eb00000267040100065e820000b40300000251040102bc03000006328f000000ec000002c804010006ef9f0000bc03000002990401065e820000b403000002510401000000024e04000002dd080000027e0700000205fd00000205fd000007e73a000018070000013301001affffffff8d09000004ed00029f02b1000005fd0000012d0955000000ffffffff130000000130110e3a000000ffffffff13000000026e0412000975000000ffffffff0c00000001ac110e67000000ffffffff0c00000002cf04120009ab000000ffffffff3d010000019d100982000000ffffffff050000000149170e47000000ffffffff05000000026e0412000982000000ffffffff05000000013f120e47000000ffffffff05000000026e0412000009ab000000ffffffff41010000018c180982000000ffffffff0e000000013f120e47000000ffffffff0e000000026e0412000982000000ffffffff0e0000000149170e47000000ffffffff0e000000026e0412000009ab000000ffffffff3d010000015b140982000000ffffffff050000000149170e47000000ffffffff05000000026e0412000982000000ffffffff05000000013f120e47000000ffffffff05000000026e0412000009ab000000ffffffff3f010000017c180982000000ffffffff0e000000013f120e47000000ffffffff0e000000026e0412000982000000ffffffff0e0000000149170e47000000ffffffff0e000000026e04120000000000000000a801000004000000000004059a1901001c009b1601003234000076fc0000ffffffffa201000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b40300000246040106606f00000d07000002e60101000002660500000679100000abbb000004250601026005000002bd020000068d510000dcbb000005ab030100000002f10a000002cd020000020c020000076b760000c9bb000006e301000002bd02000006e073000084b7000007930201000000024e04000002dd080000027e07000002cb0900001affffffffa201000004ed00019faa540000cb090000012d0948000000ffffffff0f0000000132140e3a000000ffffffff0f00000002750412001511320000ffffffff0d000000014a0d0b69000000ffffffff0600000008031209b2000000ffffffff0a000000080a1a0a9f000000ffffffff0a000000079a021a0b80000000ffffffff0a00000006ee1c000009b2000000ffffffff09000000080a1a0a9f000000ffffffff09000000079a021a0b80000000ffffffff0900000006ee1c00000b55000000ffffffff0500000001380e0000000000003f00000004000000000004129a1901001c00b7e700001937000076fc0000024e04000002dd080000027e070000028b09000007e46400008b09000001050100000000004c01000004000000000004059a1901001c00060501005837000076fc0000ffffffff6203000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b40300000251040106b76200000d07000002e5010102bc03000006328f000000ec000002c804010006ef9f0000bc030000029904010000026605000006f348000057ba0000032506010000024e04000002dd080000027e07000002910701001affffffff6203000004ed00019fb34100009107010001220948000000ffffffff19000000012a140e3a000000ffffffff19000000026e0412000b55000000ffffffff0500000001310e0b89000000ffffffff060000000403120975000000ffffffff070000000175110e67000000ffffffff0700000002cf0412000975000000ffffffff0b00000001810e0e67000000ffffffff0b00000002cf0412000000000000002f01000004000000000004059a1901001c00a5fa0000973a000076fc0000ffffffffd202000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b40300000246040102bc03000006600f00002703010002ca04010006454b0000bc03000002a00401000002660500000679100000abbb0000032506010000024e04000002dd080000027e07000002930a00001affffffffd202000004ed00019f73790000930a000001240948000000ffffffff190000000127140e3a000000ffffffff1900000002750412000b7c000000ffffffff080000000403120968000000ffffffff070000000175110e5a000000ffffffff0700000002d10412000968000000ffffffff0b00000001800e0e5a000000ffffffff0b00000002d1041200000000000000e701000004000000000004059a1901001c000df00000b73d000076fc0000ffffffffe102000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b40300000251040106b76200000d07000002e5010102bc03000006328f000000ec000002c804010006ef9f0000bc03000002990401000002660500000679100000abbb000003250601026005000002bd02000006eb98000088ba000004ab0301000006f348000057ba0000032506010002f10a000002cd020000020c0200000755a1000075ba000006e301000002bd020000064b7a000032b7000007930201000000024e04000002dd080000027e07000002fb06000007dfa60000fb0600000502010002f50500001affffffffe102000004ed00019f2b840000f505000001550948000000ffffffff0700000001620d0e3a000000ffffffff07000000026e0412000b55000000ffffffff0700000001690e0b89000000ffffffff1c00000008031209df000000ffffffff08000000080a1a0acc000000ffffffff08000000079a021a0ba0000000ffffffff0800000006ee1c00000baf000000ffffffff110000000803120903010000ffffffffa10000000198090975000000ffffffff010000000520090e67000000ffffffff0100000002cf04120000000000000000a801000004000000000004059a1901001c002edd0000f840000076fc0000ffffffff2402000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b40300000251040106b76200000d07000002e50101000002660500000679100000abbb000004250601026005000002bd02000006eb98000088ba000005ab030100000002f10a000002cd020000020c0200000755a1000075ba000006e301000002bd020000064b7a000032b7000007930201000000024e04000002dd080000027e07000002020700001affffffff2402000004ed00019f9b5700000207000001440948000000ffffffff130000000146150e3a000000ffffffff13000000026e041200156e380000ffffffff0d00000001600d0b55000000ffffffff05000000014a0e0b69000000ffffffff0600000008031209b2000000ffffffff0a000000080a1a0a9f000000ffffffff0a000000079a021a0b80000000ffffffff0a00000006ee1c000009b2000000ffffffff09000000080a1a0a9f000000ffffffff09000000079a021a0b80000000ffffffff0900000006ee1c00000000000000003f00000004000000000004129a1901001c00e8dd00000344000076fc0000024e04000002dd080000027e07000002390500000765b20000390500000107010000000000bd01000004000000000004059a1901001c0019d400004144000076fc0000ffffffff6102000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b40300000246040102bc03000006600f00002703010002ca04010006454b0000bc03000002a00401000002660500000679100000abbb000003250601026005000002bd020000068d510000dcbb000004ab030100000002f10a000002cd020000020c020000076b760000c9bb000006e301000002bd02000006e073000084b7000007930201000000024e04000002dd080000027e07000002c309000007c3940000c309000005020100029a0900001affffffff6102000004ed00019f7baa00009a09000001220948000000ffffffff070000000125140e3a000000ffffffff0700000002750412000b7c000000ffffffff1500000008031209c5000000ffffffff08000000080a1a0ab2000000ffffffff08000000079a021a0b93000000ffffffff0800000006ee1c00000b7c000000ffffffff0d00000008031209e9000000ffffffff930000000163090968000000ffffffff01000000051c090e5a000000ffffffff0100000002d1041200000000000000000f01000004000000000004059a1901001c0015e400005d47000076fc0000ffffffffa101000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000000024e04000002dd080000027e07000002f10800001affffffffa101000007ed03000000009f95390000f1080000024a0948000000ffffffff19000000024d140e3a000000ffffffff19000000016e0412000948000000ffffffff05000000025c100e3a000000ffffffff05000000016e0412000968000000ffffffff0a0000000269090e5a000000ffffffff0a00000001cf041200000000000000c500000004000000000004059a1901001c0077d000002e49000076fc0000fffffffff000000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000000024e04000002ae03000002ee02000006ef9e00001c08000001ea0101021c0800001dfffffffff000000004ed00029f1c08000001f3010a67000000ffffffffb300000001f401110a48000000ffffffff0d000000031a01170e3a000000ffffffff0d000000027504120000000000000000c400000004000000000004059a1901001c0062c700003d4a000076fc0000ffffffff8000000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000000024e04000002ae03000002ee02000006026b00009908000001ea010102990800001dffffffff8000000007ed03000000009f9908000001f3010c670000008007000001f401110a48000000ffffffff0f000000030901170e3a000000ffffffff0f000000027504120000000000000000c500000004000000000004059a1901001c008bbe00004c4b000076fc0000ffffffff0001000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b403000002510401000000024e04000002ae03000002ee0200000674a500003308000001ea010102330800001dffffffff0001000004ed00029f3308000001f3010a67000000ffffffffc500000001f401110a48000000ffffffff12000000034d01170e3a000000ffffffff12000000026e04120000000000000000c400000004000000000004059a1901001c00e2110100584c000076fc0000ffffffff8600000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b403000002510401000000024e04000002ae03000002ee02000006866300006108000001ea010102610800001dffffffff8600000007ed03000000009f6108000001f3010c670000009807000001f401110a48000000ffffffff14000000032b01170e3a000000ffffffff14000000026e04120000000000000000c300000004000000000004059a1901001c0087090100644d000076fc0000ffffffff6e00000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000000024e04000002ae03000002ee02000006bc1200004a08000001ea0101024a0800001dffffffff6e00000007ed03000000009f4a08000001f3010c67000000b007000001f401110948000000ffffffff0f00000003f8170e3a000000ffffffff0f000000027504120000000000000000c400000004000000000004059a1901001c00d4ff0000724e000076fc0000ffffffff8b00000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b403000002510401000000024e04000002ae03000002ee0200000668840000b008000001ea010102b00800001dffffffff8b00000007ed03000000009fb008000001f3010c67000000c807000001f401110a48000000ffffffff14000000033c01170e3a000000ffffffff14000000026e04120000000000000000c300000004000000000004059a1901001c0084eb0000814f000076fc0000ffffffff5b00000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000000024e04000002ae03000002ee02000006e8370000a308000001ea010102a30800001dffffffff5b00000007ed03000000009fa308000001f3010c67000000e007000001f401110948000000ffffffff0d00000003a5170e3a000000ffffffff0d000000027504120000000000000000c300000004000000000004059a1901001c008ae100008250000076fc0000ffffffff6100000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b403000002510401000000024e04000002ae03000002ee02000006342a00006b08000001ea0101026b0800001dffffffff6100000007ed03000000009f6b08000001f3010c67000000f807000001f401110948000000ffffffff1100000003c5170e3a000000ffffffff11000000026e04120000000000000000c400000004000000000004059a1901001c0075d800007f51000076fc0000ffffffffb300000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b403000002510401000000024e04000002ae03000002ee0200000691b400003d08000001ea0101023d0800001dffffffffb300000004ed00029f3d08000001f3010a67000000ffffffff7a00000001f401110948000000ffffffff1100000003e5170e3a000000ffffffff11000000026e04120000000000000000c400000004000000000004059a1901001c00bdcf00007452000076fc0000ffffffffa700000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000000024e04000002ae03000002ee02000006a86000002608000001ea010102260800001dffffffffa700000004ed00029f2608000001f3010a67000000ffffffff6c00000001f401110948000000ffffffff0d00000003b5170e3a000000ffffffff0d000000027504120000000000000000c300000004000000000004059a1901001c00a8c600006d53000076fc0000ffffffff4f00000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000000024e04000002ae03000002ee0200000698a200005408000001ea010102540800001dffffffff4f00000007ed03000000009f5408000001f3010c670000001008000001f401110948000000ffffffff0d0000000395170e3a000000ffffffff0d000000027504120000000000000000c300000004000000000004059a1901001c00d1bd00006d54000076fc0000ffffffff6200000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b403000002510401000000024e04000002ae03000002ee0200000643450000ba08000001ea010102ba0800001dffffffff6200000007ed03000000009fba08000001f3010c670000002808000001f401110948000000ffffffff1100000003d5170e3a000000ffffffff11000000026e04120000000000000000cd00000004000000000004059a1901001c00281101006f55000076fc0000ffffffff3d00000002c20a0000020aec000002bd02000006b76200000d07000001e50101000000024e04000002dd080000027e070000022e07000007e65300002e070000020c01000006672200002e07000003ea0101022e0700001dffffffff3d00000007ed03000000009f2e07000003f3010c670000004008000003f401110f5900000060080000040b150b35000000ffffffff0a000000020d0a0b35000000ffffffff07000000020f1100000000000000cd00000004000000000004059a1901001c00cd0801008056000076fc0000ffffffff3900000002c20a0000023103010002bd02000006606f00000d07000001e60101000000024e04000002dd080000027e07000002d8090000072b230000d8090000020c010000063f3e0000d809000003ea010102d80900001dffffffff3900000007ed03000000009fd809000003f3010c670000008008000003f401110f59000000a0080000040b150b35000000ffffffff0a000000020d0a0b35000000ffffffff07000000020f1100000000000000c500000004000000000004059a1901001c00d0e000009257000076fc0000ffffffff14000000024e04000002dd080000027e070000020c09000007332900000c090000020201000006215100000c09000001ea0101020c0900001dffffffff1400000007ed03000000009f0c09000001f3010a48000000ffffffff0700000001f40111093a000000ffffffff07000000040b150bb8000000ffffffff05000000020b0b00000000000002c20a0000023103010002bd02000006606f00000d07000003e6010100000000c500000004000000000004059a1901001c00bbd700006d58000076fc0000ffffffff14000000024e04000002dd080000027e07000002b309000007b4a50000b30900000202010000066b640000b309000001ea010102b30900001dffffffff1400000007ed03000000009fb309000001f3010a48000000ffffffff0700000001f40111093a000000ffffffff07000000040b150bb8000000ffffffff05000000020b0b00000000000002c20a0000023103010002bd02000006606f00000d07000003e6010100000000c500000004000000000004059a1901001c0003cf00004859000076fc0000ffffffff14000000024e04000002dd080000027e0700000294060000079e82000094060000020201000006a4b200009406000001ea010102940600001dffffffff1400000007ed03000000009f9406000001f3010a48000000ffffffff0700000001f40111093a000000ffffffff07000000040b150bb8000000ffffffff05000000020b0b00000000000002c20a0000020aec000002bd02000006b76200000d07000003e5010100000000c500000004000000000004059a1901001c00eec50000225a000076fc0000ffffffff14000000024e04000002dd080000027e07000002d302000007fe2c0000d30200000202010000061e8d0000d302000001ea010102d30200001dffffffff1400000007ed03000000009fd302000001f3010a48000000ffffffff0700000001f40111093a000000ffffffff07000000040b150bb8000000ffffffff05000000020b0b00000000000002c20a0000020aec000002bd02000006b76200000d07000003e5010100000000a400000004000000000004059a1901001c0016e00000fc5a000076fc0000ffffffffae000000024e04000002dd08000002f30500001dffffffffae00000007ed03000000009ff305000001f3011ecd4a0000ffffffff9f00000001f4011114624a0000ffffffff9f000000041d0114504a0000ffffffff9f00000005030514944a0000ffffffff0100000002200911864a0000ffffffff0100000003cf04120000000000000000008300000004000000000004129a1901001c00410a0100335c000076fc0000024e04000002dd080000027e07000002fb06000007dfa60000fb0600000102010002f30500000721200000f30500000202010000000002c20a0000020aec000002bd02000002bc03000006328f000000ec000003c804010006ef9f0000bc03000003990401000000003400000004000000000004129a1901001c009d0e0100ce5c000076fc0000024e04000002dd08000019ec4e0000f305000001ea0101000000c901000004000000000004059a1901001c0001d70000fd5c000076fc0000ffffffff65000000024e040000022f030000029a0300000202f300001dffffffff6500000007ed03000000009f02f3000001f3011fe94c0000c008000001f4011120dc4c0000d8080000025d0917fc4c0000f008000002272e20294d000008090000022711208c4d000020090000039f31217f4d00003809000006b30516000014354d0000ffffffff0500000002281114ac4d0000ffffffff0500000003bb0d119f4d0000ffffffff0500000007bb0516000020094d00005009000002260d11534d0000ffffffff05000000033a012a11604d0000ffffffff01000000033a01180014414d0000ffffffff0d00000002272e14c64d0000ffffffff0d00000003b70d11b94d0000ffffffff0d000000079d0516000015164d0000ffffffff0100000002271115e44d0000ffffffff0500000002271120094d000068090000021e0d11534d0000ffffffff0a000000033a012a11604d0000ffffffff01000000033a01180015fc4c0000ffffffff05000000021f1114354d0000ffffffff06000000021f1114ac4d0000ffffffff0600000003bb0d119f4d0000ffffffff0600000007bb0516000000000000000000004801000004000000000004129a1901001c005ae70000af5e000076fc0000024e040000022f030000029a03000002b305000007d17b00006abb0000011b010019c338000002f3000002ea01010002b10000000644960000960800000333010106079a000085080000033901010606280000380600000330010100024301000007a63c000087050000039e0107888600009305000003ba01076fa00000fc07000003b60100022f010000062f63000090080000034d010106669d0000f0060000034a010100000002c20a0000021407000002bb00000006ee470000a005000004da030106558a00009305000004af050100025f02000006b2b30000a00500000559030106157800009305000005b7050106650c0000090800000529030106c6210000fc07000005990501000002310400000269030000024800000006fe1500007b050000060f010100000000002101000004000000000004059a1901001c0049ce0000b35f000076fc0000ffffffff73000000024e04000002ae03000002010600000222fd00001dffffffff7300000007ed03000000009f22fd000001f3011f3a5000008009000001f40111202e50000098090000057809141c500000ffffffff0d000000052c11145b4f0000ffffffff0d000000067c16114d4f0000ffffffff0d00000002750412000015794f0000ffffffff09000000052e1115bc4f0000ffffffff01000000053208158b4f0000ffffffff07000000053708159e4f0000ffffffff0b00000005400815cf4f0000ffffffff0100000005400815dc4f0000ffffffff05000000054c0f15e94f0000ffffffff0500000005410c22fc4f0000ffffffff07000000050000000000000000002c01000004000000000004129a1901001c0024f10000a461000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b403000001460401000002310400000269030000022a02000007e38e0000720b000005ab0100029c01000006831b00007b050000050f010100029d00000007d21a0000720b000005ab0100000002010600000260040000027202000006b17200006d03000006f305010002e40100000611a50000e40a000006f10501066d6900006d03000006f3050106358100006603000006ed05010002930200000644590000f00500000699050100000000024e04000002ae03000002bd020000070a6f00006f050000027b01000201060000071ca1000099bb0000032201192d1d000022fd000004ea0101000000001301000004000000000004059a1901001c0034c50000da62000076fc0000ffffffff08010000024e04000002dd080000021f0300001dffffffff0801000007ed03000000009f1f03000003f3011ff4510000b009000003f4011120e6510000c8090000041d0114a2510000ffffffff100000000225191194510000ffffffff10000000016e04120014a2510000ffffffff0500000002421a1194510000ffffffff05000000016e04120014c2510000ffffffff01000000024d0911b4510000ffffffff0100000001cf04120014a2510000ffffffff0700000002660c1194510000ffffffff07000000016e04120014c2510000ffffffff0100000002680911b4510000ffffffff0100000001cf041200000000000000009e00000004000000000004129a1901001c009d0e01007364000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000000024e04000002dd080000027e070000021f030000077e9200001f030000022201000019b83100001f03000003ea0101000000ca01000004000000000004059a1901001c005dbc00001165000076fc0000ffffffff45000000024e040000022f030000029a0300000259f300001dffffffff4500000007ed03000000009f59f3000001f3011f11540000e009000001f401112004540000f80900000252091524540000ffffffff02000000020f401451540000ffffffff03000000020f4014b5540000ffffffff0300000003b70d11a8540000ffffffff030000000692051600001531540000ffffffff07000000020e1115c2540000ffffffff03000000020f2b145d540000ffffffff01000000020f1114dc540000ffffffff01000000039f3111cf540000ffffffff0100000006b30516000015fa540000ffffffff01000000020f11203e540000100a0000020d0d116f540000ffffffff04000000033a012a117c540000ffffffff01000000033a0118001451540000ffffffff05000000020e1114b5540000ffffffff0500000003b70d11a8540000ffffffff050000000692051600001531540000ffffffff0300000002090d1451540000ffffffff0300000002090d14b5540000ffffffff0300000003b70d11a8540000ffffffff030000000692051600001589540000ffffffff0400000002090d00000000000000003601000004000000000004129a1901001c005ae70000ab66000076fc0000024e040000022f030000029a0300000217080000072d21000085b90000010501001949b1000059f3000002ea01010002890100000695650000960800000333010106dd8200003806000003300101066c21000085080000033901010002f900000007782f0000fc07000003b60107dfac000087050000039e01000202020000065728000090080000034d01010622a70000f0060000034a0101065728000090080000034d010100000002c20a000002140700000271000000066e4a00000908000004aa030106c1850000fc070000048e050106f93d0000350c000004cd04010625540000a005000004da030106a81400009305000004af0501000002310400000269030000029c01000006831b00007b050000050f010100000000003501000004000000000004059a1901001c00721801009e67000076fc0000ffffffffd1010000024e04000002dd080000021dfd00001dffffffffd101000007ed03000000009f1dfd000003f3011f33570000280a000003f4011120fa560000500a0000051d011485560000ffffffff190000000224191177560000ffffffff19000000016e0412001485560000ffffffff050000000241101177560000ffffffff05000000016e04120014a5560000ffffffff0a000000024e091197560000ffffffff0a00000001cf0412001485560000ffffffff07000000025b0d1177560000ffffffff07000000016e04120014a5560000ffffffff0c000000025d0a1197560000ffffffff0c00000001cf04120014d6560000ffffffff0100000002640b11c3560000ffffffff0100000006f502090000000000000000c200000004000000000004129a1901001c00841501002f6a000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000002170300000214070000021500000007bb8300001f070000033401000002d101000006e01000009cba000004f40201000000024e04000002dd080000027e070000021dfd0000079d4f00001dfd000002210100000000003400000004000000000004129a1901001c009d0e0100196b000076fc0000024e04000002dd08000019784700001dfd000001ea0101000000d300000004000000000004059a1901001c00570f0100486b000076fc0000ffffffff37000000024e040000022f030000021e0c0000023b0600001dffffffff3700000007ed03000000009f3b06000002f3011fe6580000780a000002f4011120d9580000980a0000034e0920c7580000b80a0000032b1320b5580000d00a0000031c1d2092580000e80a000003051b1747580000000b000005c30d00149e580000ffffffff070000000306121554580000ffffffff0700000005ab0d0000001572580000ffffffff0f000000032c270000000000000000d900000004000000000004129a1901001c00cc0c0100766c000076fc000002c20a00000214070000023f0000000638970000990b000001f0050106eb450000a90b000001a40401000002010600000260040000026b010000069a6b00006603000005ed050100000000024e040000022f030000027100000007741a0000990b000002c2010715140000a90b000002aa0100021e0c000002520c000007e00e00009ab800000304010002530c000007a51c00009bb80000031b0100025d06000007391700006ab80000032a010019103000003b06000004ea0101000000002b01000004000000000004059a1901001c00d7060100666d000076fc0000ffffffffcf040000024e04000002dd08000002d30900001dffffffffcf04000004ed00019fd309000001f3011ee85a0000ffffffffa204000001f4011114585a0000ffffffffa2040000071d01149c5a0000ffffffff0f000000022114118e5a0000ffffffff0f0000000375041200202a5b0000180b0000024c12145c5b0000ffffffff01000000043d0d114e5b0000ffffffff0100000003d104120000176a5a0000300b0000024d05156a5a0000ffffffff67000000024214156a5a0000ffffffff68000000024014156a5a0000ffffffff67000000023914156a5a0000ffffffff68000000023714156a5a0000ffffffff6700000002311015b05a0000ffffffff06000000080312000000000000009600000004000000000004129a1901001c0048d200008f71000076fc0000024e04000002dd080000027e07000002d309000007ec600000d3090000011c010002d109000007c74b0000d10900000317010000000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000002660500000679100000abbb0000042506010000003400000004000000000004129a1901001c009d0e01007872000076fc0000024e04000002dd080000199f6f0000d309000001ea01010000007100000004000000000004129a1901001c0045bf0000a772000076fc0000024e04000002dd080000027e070000027c0a000007477c00007c0a00000123010000000002c20a0000023103010002bd02000002bc03000006600f00002703010002ca04010006454b0000bc03000002a00401000000008e01000004000000000004059a1901001c0019fc00003973000076fc0000fffffffff4010000024e040000022f03000002d807000002cee800001dfffffffff401000004ed00069fcee8000001f3011e385d0000ffffffffb401000001f40111142c5d0000ffffffffac010000027e18144a5d0000ffffffff1901000002501c155d5d0000ffffffff03000000022310175d5d0000480b0000022325146f5d0000ffffffff2c00000002252015ac5d0000ffffffff2c00000003af0d00208d5d0000600b0000022d1e21b95d0000800b00000354012200208d5d0000a00b0000022e1e21b95d0000c00b00000354012200147b5d0000ffffffff06000000022f2015c65d0000ffffffff0600000003c30d00208d5d0000e00b000002271e21b95d0000000c00000354012200208d5d0000200c000002281e21b95d0000400c00000354012200147b5d0000ffffffff0600000002292015c65d0000ffffffff0600000003c30d00148d5d0000ffffffff2500000002331e11b95d0000ffffffff250000000354012200000000000000000000d400000004000000000004129a1901001c00b8170100bb74000076fc0000024e040000022f03000002d8070000072c12000092070000013e0119c48b0000cee8000002ea01010235060000077e5f00005fb8000001220100000271000000073baf00000b06000003a2010002a80200000783a60000cf07000003ae01077b9b0000990b000003c2010002bd010000063c360000880700000353010100000002c20a0000021407000002a802000006a6490000cf07000004e4040106a6490000cf07000004e4040106c06e0000990b000004f0050100000000fb00000004000000000004059a1901001c00def100005d75000076fc0000ffffffff7e010000024e04000002dd08000002240300001dffffffff7e01000007ed03000000009f2403000003f3011f9f5f0000600c000003f40111205a5f0000880c0000051d0114165f0000ffffffff1300000002191511085f0000ffffffff13000000016e04120014365f0000ffffffff0b000000022d0911285f0000ffffffff0b00000001cf04120017665f0000b00c000002471415665f0000ffffffff4600000002481415e15f0000ffffffff0100000002490914165f0000ffffffff10000000021a1511085f0000ffffffff10000000016e041200000000000000009d00000004000000000004129a1901001c0033c900003577000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000000024e04000002dd080000027e070000022403000007793d0000240300000215010731a00000ed05000002070100000000003400000004000000000004129a1901001c009d0e0100c377000076fc0000024e04000002dd08000019e14000002403000001ea01010000003f00000004000000000004129a1901001c0010ea0000f277000076fc0000024e04000002dd080000027e070000021203000007d01b0000120300000152010000000000cf00000004000000000004059a1901001c0014e800003078000076fc0000ffffffff0f010000024e04000002dd08000002f00900001dffffffff0f01000007ed03000000009ff009000003f3011f57610000c80c000003f401112049610000e80c0000041d011405610000ffffffff17000000021c1411f7600000ffffffff1700000001750412001405610000ffffffff0a000000022a1011f7600000ffffffff0a00000001750412001425610000ffffffff060000000235091117610000ffffffff0600000001d1041200000000000000009e00000004000000000004129a1901001c009d0e0100d679000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000000024e04000002dd080000027e07000002f00900000723490000f009000002190100001960650000f009000003ea0101000000e200000004000000000004059a1901001c00ffde0000747a000076fc0000ffffffffcf000000024e04000002ae03000002ee020000020b0a00001dffffffffcf00000004ed00029f0b0a000001f3011fd2620000080d000001f401111487620000ffffffff20000000038d39117a620000ffffffff2000000005f1051300204d630000200d0000038d181510630000ffffffff12000000033f131429630000ffffffff1e000000034013111c630000ffffffff1e00000006920516000014b3620000ffffffff01000000038d0911a5620000ffffffff0100000004cf041200000000000000009200000004000000000004129a1901001c005cc00000a47b000076fc000002c20a000002140700000293010000066a1d00003e05000001d6050106e61c00004b05000001f005010000020aec000002bd02000002bc03000006328f000000ec000003c804010006ef9f0000bc03000003990401000000024e04000002ae03000002ee02000019dca200000b0a000002ea0101000000007700000004000000000004129a1901001c0016c10000337c000076fc000002c20a0000021407000002a802000007e32200003504000001940106622000000908000001aa0301062a9c0000fc070000018e0501000000024e04000002ae03000002ee02000002a7030000076d5c0000c6030000023e0100000000007d00000004000000000004059a1901001c00ead50000bd7c000076fc0000ffffffffd9000000024e040000027a070000025bc400001dffffffffd900000007ed03000000009f5bc40000030d021e13640000ffffffffd8000000030e02111407640000ffffffffd80000000194091736640000380d0000014d4b000000000000006500000004000000000004129a1901001c003bf20000fb7d000076fc0000024e040000027a07000007e7880000abb900000148011932b000005bc4000002050201000002c20a00000266050000026005000002bd02000006caa00000a2b9000003ab03010000000000cb00000004000000000004059a1901001c0032cd0000917e000076fc0000ffffffff20010000024e04000002dd08000002a60900001dffffffff2001000007ed03000000009fa609000005f3011fc0650000600d000005f40111207b650000880d0000061d011457650000ffffffff18000000022a101149650000ffffffff1800000001750412001502660000ffffffff030000000240131545660000ffffffff1900000002410d1587650000ffffffff1e0000000242201587650000ffffffff1e000000023c18000000000000007d00000004000000000004129a1901001c0060f700005b80000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b403000001460401000000024e04000002dd080000027e07000002a609000007367e0000a6090000022701079a930000eb050000021b0100000000003400000004000000000004129a1901001c009d0e0100e980000076fc0000024e04000002dd08000019fe6b0000a609000001ea01010000003f00000004000000000004129a1901001c00b7e700001881000076fc0000024e04000002dd080000027e070000028b09000007e46400008b09000001050100000000003f00000004000000000004129a1901001c0010ea00005781000076fc0000024e04000002dd080000027e070000021203000007d01b00001203000001520100000000005f00000004000000000004059a1901001c00a1c300009581000076fc0000ffffffff0a000000024e04000002dd08000002f10800001dffffffff0a00000007ed03000000009ff108000002f30111e1660000ffffffff0900000002f4011100000000003400000004000000000004129a1901001c009d0e0100e981000076fc0000024e04000002dd0800001958710000f108000001ea0101000000d600000004000000000004059a1901001c005b1701001882000076fc0000ffffffff18000000024e04000002dd08000002040a00001dffffffff1800000007ed03000000009f040a000005f3011e9a680000ffffffff1700000005f401111461680000ffffffff17000000061d01144f680000ffffffff13000000030710140b680000ffffffff0a00000002081011fd670000ffffffff0a0000000175041200142b680000ffffffff01000000020b05111d680000ffffffff0100000001d10412000015dc680000ffffffff0100000003070500000000000000a300000004000000000004129a1901001c00caea00001d83000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000000024e04000002dd080000027e07000002b90900000768720000b90900000206010002040a000007719c0000040a000003060100000000003400000004000000000004129a1901001c009d0e0100bc83000076fc0000024e04000002dd08000019107c0000040a000001ea01010000003f00000004000000000004129a1901001c0018d80000eb83000076fc0000024e04000002dd080000027e07000002590a000007ac9e0000590a00000104010000000000cd00000004000000000004059a1901001c00c00501002b84000076fc0000ffffffff23020000024e04000002dd08000002600b00001dffffffff2302000007ed03000000009f600b000003f3011f946a0000b00d000003f40111205b6a0000e00d0000051d0114fe690000ffffffff1000000002051511f0690000ffffffff10000000016e04120015376a0000ffffffff0d00000002301115376a0000ffffffff0b000000023a0d141e6a0000ffffffff01000000024f0511106a0000ffffffff0100000001cf04120000000000000000aa00000004000000000004129a1901001c008ef900008886000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc0300000199040100000214070000023f000000069a9a0000350c000003cd0401000000024e04000002dd080000027e07000002600b000007a2430000600b000002040100000000003400000004000000000004129a1901001c009d0e01002787000076fc0000024e04000002dd0800001983310000600b000001ea01010000006b00000004000000000004059a1901001c0002fb00005687000076fc0000ffffffff73000000024e040000022f03000002f80200000208e900001dffffffff7300000004ed00039f08e9000001f3011f7e6b0000100e000001f4011117406b0000280e0000037501000000000000003a00000004000000000004129a1901001c002fd90000f387000076fc0000024e040000022f03000002f3020000191a350000fbe8000001eb0101000000003a00000004000000000004129a1901001c00e7c200002288000076fc0000024e040000022f03000002f802000019bd15000008e9000001eb010100000000cd00000004000000000004059a1901001c00c7f000005188000076fc0000ffffffffe2010000024e04000002dd08000002fe0900001dffffffffe201000007ed03000000009ffe09000003f3011f366d0000400e000003f4011120fd6c0000700e0000051d0114a06c0000ffffffff0e00000002061511926c0000ffffffff0e000000017504120015d96c0000ffffffff0d00000002361115d96c0000ffffffff0b00000002420d14c06c0000ffffffff0100000002580511b26c0000ffffffff0100000001d104120000000000000000aa00000004000000000004129a1901001c002ce500009d8a000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a0040100000214070000027100000006f93d0000350c000003cd0401000000024e04000002dd080000027e07000002fe09000007e3750000fe09000002050100000000003400000004000000000004129a1901001c009d0e01003d8b000076fc0000024e04000002dd080000197f4e0000fe09000001ea01010000008501000004000000000004059a1901001c00fde600006c8b000076fc0000ffffffffd6030000024e04000002dd08000002090700001dffffffffd603000004ed00019f0907000001f3011ed76f0000ffffffffa903000001f4011114806f0000ffffffffa9030000061d01141c6f0000ffffffff11000000032e0f11016f0000ffffffff11000000026e04120020926f0000a00e000003450514296f0000ffffffff10000000043f0f110e6f0000ffffffff10000000026e041200149e6f0000ffffffff0d00000004630e14296f0000ffffffff0b000000046814110e6f0000ffffffff0b000000026e04120014496f0000ffffffff01000000046805113b6f0000ffffffff0100000002cf04120000149e6f0000ffffffff0d00000004600e14296f0000ffffffff0b000000046814110e6f0000ffffffff0b000000026e04120014496f0000ffffffff01000000046805113b6f0000ffffffff0100000002cf041200000017926f0000c00e0000033b10155d6f0000ffffffff0800000007031200000000000000dc00000004000000000004129a1901001c005fd30000dd8e000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040106baaa0000e7eb00000167040100065e820000b403000001510401065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc030000019904010000026605000006f348000057ba0000042506010000024e04000002dd080000027e070000020907000007f86c000009070000022b0100020707000007f22d000007070000033e0107a2180000160b000003670100000000003400000004000000000004129a1901001c009d0e0100c48f000076fc0000024e04000002dd080000198c7100000907000001ea0101000000fa05000004000000000004059a1901001c00d3d40000f38f000076fc0000ffffffff4c020000024e04000002ae03000002d8070000027ff300001dffffffff4c02000007ed03000000009f7ff3000008f3011f85790000d80e000008f401112079790000380f000004bf09145b790000ffffffff0f0000000420111425760000ffffffff0f000000067c161117760000ffffffff0f0000000175041200001563760000ffffffff0300000004271d15ef770000ffffffff05000000042b081563760000ffffffff09000000042e1515fc770000ffffffff0100000004320c15fc770000ffffffff0100000004360c151c780000ffffffff01000000043a0c151c780000ffffffff0100000004440c1509780000ffffffff03000000045b0c14147b0000ffffffff12000000045c2b15aa7a0000ffffffff0300000006a01615d67a0000ffffffff0b00000006a31a15b67a0000ffffffff0100000006a116001509780000ffffffff0300000004610c20147b0000980f000004622b15aa7a0000ffffffff0500000006a01615b67a0000ffffffff0100000006a116002367790000ffffffff0300000004001445760000ffffffff030000000695111137760000ffffffff0300000001d10412000015c1760000ffffffff040000000447251467790000ffffffff010000000447181445760000ffffffff010000000695111137760000ffffffff0100000001d10412000015c1760000ffffffff04000000043d251467790000ffffffff01000000043d181445760000ffffffff010000000695111137760000ffffffff0100000001d10412000015c1760000ffffffff010000000433211467790000ffffffff010000000433141445760000ffffffff010000000695111137760000ffffffff0100000001d10412000015c1760000ffffffff010000000437211467790000ffffffff010000000437141445760000ffffffff010000000695111137760000ffffffff0100000001d104120000159b760000ffffffff0800000004741420e2790000b00f000004732f11d5790000ffffffff080000000754013311d5790000ffffffff010000000754011a1183780000ffffffff01000000075401220015ae760000ffffffff01000000046b0520027a0000c80f000004732f11f5790000ffffffff050000000737011b110f7a0000ffffffff09000000073701260015a3780000ffffffff05000000047a0a15a3780000ffffffff09000000047b0a1563760000ffffffff03000000047f0815c1760000ffffffff0d00000004821815d4760000ffffffff0800000004830915a3780000ffffffff0300000004802d159b760000ffffffff0800000004a71915e7760000ffffffff0100000004a60915ae760000ffffffff0500000004a70914227a0000ffffffff0700000004921515dd780000ffffffff0700000007b30d0017c1760000e00f0000049b1b1588760000ffffffff05000000049b3c15fa760000ffffffff09000000049c0d1467790000ffffffff030000000494141445760000ffffffff030000000695111137760000ffffffff0300000001d10412000015c1760000ffffffff0100000004881d1467790000ffffffff010000000488101445760000ffffffff010000000695111137760000ffffffff0100000001d10412000015ae760000ffffffff1100000004ab0515fc770000ffffffff0100000004b00815bd770000ffffffff0100000004b10920677900000010000004b80520457600001810000006951121377600003010000001d104120000151c780000ffffffff0100000004b4081563760000ffffffff0100000004b51915bd770000ffffffff0300000004b50915b0780000ffffffff05000000047c0a1563760000ffffffff0300000004261d1575760000ffffffff0b0000000424181563760000ffffffff070000000424181588760000ffffffff040000000423161563760000ffffffff230000000423161588760000ffffffff040000000422161563760000ffffffff06000000042216145b790000ffffffff0a000000041f111425760000ffffffff0a000000067c161117760000ffffffff0a00000001750412000000000000000000009404000004000000000004129a1901001c005cdf0000d194000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000002310400000269030000022a02000007e38e0000720b000005ab0100022401000006f933000074050000057301010002a6010000062d560000b4050000054b020100027a00000006906d00001808000005d50101000202010000068b550000a20600000516030100029c01000006831b00007b050000050f01010002910000000606720000c5060000059b030100022900000006ddad0000d006000005cf02010002b101000006552b0000af06000005ed03010002f80100000709710000720b000005ab010002da00000006b8250000740500000573010100023e02000006ec260000b4050000054b020100021901000006018a00001808000005d501010002ce000000065c350000a20600000516030100024c01000006023900007b050000050f010100025302000006bf560000c5060000059b030100027c020000063e4d0000d006000005cf0201000285000000068d190000af06000005ed0301000002c7080000020000000006588c0000de0600000af702010002b202000006a74c0000de0600000af7020100000002010600000260040000027202000006d45b0000e40a000006f1050106b17200006d03000006f3050106eb5400006603000006ed050100027f0100000679240000f0050000069905010002ee0100000635680000e40a000006f10501066b3b00006d03000006f3050106848800006603000006ed050100022f01000006493f0000f00500000699050106e6650000c70a0000069b05010000000214070000023f00000006ee3f0000cf07000008e40401069a9a0000350c000008cd040100020c020000067a6e0000a90b000009a8040106c0710000350c000009d00401067a6e0000a90b000009a8040106c0710000350c000009d0040100027100000006f93d0000350c000008cd04010002a802000006a6490000cf07000008e404010000020aec000002bd02000002b403000006baaa0000e7eb00000b67040100065e820000b40300000b51040102bc03000006328f000000ec00000bc804010006ef9f0000bc0300000b990401000000024e04000002ae03000002bd020000070a6f00006f050000027b010790af00006a0500000294010002d807000007d17a0000a2bb00000304011930b600007ff3000004ea010107d46600004eba00000304011942910000a3f3000004ea010100025f02000007eb4d00006f050000027b0107489000006a0500000294010000022f03000002020200000611b20000f50600000747010106c35c0000880700000753010100028901000006dd8200003806000007300101068f8e00008a08000007360101069565000096080000073301010002f90000000780a40000350c000007b2010002bd010000063c360000880700000753010100021f02000006401800000d0300000774010100029d02000006555200000d030000077401010002710000000795960000350c000007b20100000000b500000004000000000004129a1901001c008ff500005296000076fc000002c20a000002140700000271000000079c2200003504000001940106f93d0000350c000001cd040106f93d0000350c000001cd040100020c02000006c0710000350c000003d0040106c0710000350c000003d0040100023f000000078d34000035040000019401000000024e04000002ae03000002bd0200001817410000a10a0000029e0100025f02000018412c0000a10a0000029e01000000009e01000004000000000004059a1901001c001bcc0000ec96000076fc0000ffffffff52000000024e040000022f030000029a030000020cf300001dffffffff5200000007ed03000000009f0cf3000001f3011f177d00004810000001f40111200a7d000060100000024b09152a7d0000ffffffff05000000020f4020577d000078100000020e1120bb7d00009010000003b70d21ae7d0000a810000006920516000014577d0000ffffffff09000000020f4014bb7d0000ffffffff0900000003b70d11ae7d0000ffffffff0900000006920516000015377d0000ffffffff03000000020e1114637d0000ffffffff07000000020f1114d57d0000ffffffff07000000039f3111c87d0000ffffffff0700000006b30516000015f37d0000ffffffff03000000020f1120447d0000c0100000020d0d11757d0000ffffffff01000000033a012a11827d0000ffffffff01000000033a01180014577d0000ffffffff0400000002090d14bb7d0000ffffffff0400000003b70d11ae7d0000ffffffff04000000069205160000158f7d0000ffffffff0100000002090d00000000000000002901000004000000000004129a1901001c005ae700007e98000076fc0000024e040000022f030000029a03000002170800000735620000d0ba0000010501001918a800000cf3000002ea01010002c701000006c932000096080000033301010631460000380600000330010106e09a0000850800000339010100029301000007dc4f0000fc07000003b60107a974000087050000039e01000234020000064a80000090080000034d0101068d3a0000f0060000034a0101064a80000090080000034d010100000002c20a0000021407000002bb00000006d5b400000908000004aa0301062e1a0000fc070000048e050106ee470000a005000004da030106558a00009305000004af050100000231040000026903000002da01000006ac2b00007b050000050f01010000000000cf00000004000000000004059a1901001c008ac200007199000076fc0000ffffffffb2000000024e04000002dd080000021d0900001dffffffffb200000007ed03000000009f1d09000003f3011f6a7f0000d810000003f40111205c7f0000f0100000041d0114187f0000ffffffff14000000022219110a7f0000ffffffff14000000017504120014187f0000ffffffff0900000002301a110a7f0000ffffffff09000000017504120014387f0000ffffffff01000000023e09112a7f0000ffffffff0100000001d1041200000000000000009e00000004000000000004129a1901001c009d0e0100e19a000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000000024e04000002dd080000027e070000021d09000007fe9200001d090000021d010000193d7900001d09000003ea01010000005301000004000000000004059a1901001c003e160100809b000076fc0000ffffffff46000000024e040000022f030000021e0c000002730600001dffffffff4600000007ed03000000009f7306000002f3011fd38100000811000002f4011120c68100002811000004560920b481000048110000043813209681000060110000041f1d208a8100007811000004110920678100009011000004051b17fe800000a811000006c30d001473810000ffffffff01000000040612150b810000ffffffff0100000006ab0d00001529810000ffffffff0100000004101414a2810000ffffffff070000000410141473810000ffffffff03000000040d1e150b810000ffffffff0300000006ab0d001467810000ffffffff03000000040b1b15fe800000ffffffff0300000006c30d000000001547810000ffffffff0100000004390f1547810000ffffffff1000000004392700000000000000000f01000004000000000004129a1901001c00cc0c0100239d000076fc000002c20a00000214070000023f0000000638970000990b000001f0050106eb450000a90b000001a4040100000231040000026903000002bb00000007bfab00002a030000053d010000000201060000026004000002c400000006489e00006603000006ed050100000000024e040000022f030000027100000007741a0000990b000002c2010715140000a90b000002aa0100021e0c000002520c000007e00e00009ab8000003040107ceb10000a5b80000030f0107a49800008bb80000030a010002530c00000765440000e5b80000031e0100028406000007874b0000c6b800000337010019eb2800007306000004ea0101000000006200000004000000000004059a1901001c00860d0100629e000076fc0000ffffffff4b000000024e040000022f03000002f30200000298f200001dffffffff4b00000004ed00059f98f2000001f3011177820000ffffffff2100000001f401110000000000003a00000004000000000004129a1901001c002fd90000c79e000076fc0000024e040000022f03000002f302000019bb33000098f2000001eb010100000000ba00000004000000000004059a1901001c00a9040100f69e000076fc0000ffffffff1d010000024e04000002dd08000002ec0800001dffffffff1d01000004ed00019fec08000001f3011f16840000c011000001f4011120dd830000d8110000051d011486830000ffffffff0500000003130a1178830000ffffffff0500000002cf04120015ba830000ffffffff0800000006031214a6830000ffffffff16000000030a171198830000ffffffff16000000026e04120000000000000000a400000004000000000004129a1901001c00fee20000c3a0000076fc000002c20a0000020aec000002bd02000002bc03000006328f000000ec000001c804010006ef9f0000bc0300000199040102b403000006baaa0000e7eb00000167040100065e820000b403000001510401000002660500000679100000abbb0000032506010000024e04000002dd080000027e07000002ec08000007782a0000ec08000002080100000000003400000004000000000004129a1901001c009d0e01009fa1000076fc0000024e04000002dd080000194a420000ec08000001ea0101000000c700000004000000000004059a1901001c0048fa0000cea1000076fc0000ffffffff63000000024e04000002ae03000002ee02000002570900001dffffffff6300000007ed03000000009f5709000004f3011e7f850000ffffffff6200000004f401112023850000f0110000016f181542850000ffffffff05000000010c130014ab850000ffffffff07000000016f38119e850000ffffffff0700000005f105130014d7850000ffffffff01000000016f0911c9850000ffffffff0100000003d1041200000000000000005d00000004000000000004129a1901001c0016c10000dba2000076fc0000024e04000002ae03000002ee02000002a70300000798780000180400000108010000000002c20a000002140700000271000000079c22000035040000029401000000009200000004000000000004129a1901001c005cc0000065a3000076fc0000024e04000002ae03000002ee02000019e14300005709000001ea010100000002c20a00000214070000020c020000064f3900003e05000002d6050106205800004b05000002f005010000023103010002bd02000002bc03000006600f00002703010003ca04010006454b0000bc03000003a00401000000007d00000004000000000004059a1901001c00b0ef0000f4a3000076fc0000ffffffffd9000000024e040000027a0700000237e900001dffffffffd900000007ed03000000009f37e90000030d021e9d860000ffffffffd8000000030e02111491860000ffffffffd800000001900917c086000008120000014d4b000000000000006500000004000000000004129a1901001c003bf2000032a5000076fc0000024e040000027a070000076a610000e3ba0000014801199ca9000037e9000002050201000002c20a00000266050000026005000002bd02000006b4270000daba000003ab03010000000000ba00000004000000000004059a1901001c00e6e50000c8a5000076fc0000fffffffff5000000024e04000002dd08000002ea0900001dfffffffff500000004ed00019fea09000001f3011f608800003012000001f40111202788000048120000051d0114d0870000ffffffff0500000003090911c2870000ffffffff0500000002d10412001504880000ffffffff0800000006031214f0870000ffffffff1100000003061411e2870000ffffffff11000000027504120000000000000000a400000004000000000004129a1901001c001cc800008ea7000076fc000002c20a0000023103010002bd02000002bc03000006600f00002703010001ca04010006454b0000bc03000001a0040102b403000006c677000019030100016e0401000658300000b403000001460401000002660500000679100000abbb0000032506010000024e04000002dd080000027e07000002ea09000007df510000ea09000002040100000000003400000004000000000004129a1901001c009d0e01006ba8000076fc0000024e04000002dd080000194a940000ea09000001ea01010000000001000004000000000004059a1901001c00d1dc00009aa8000076fc0000ffffffff50030000024e04000002dd08000002900600001dffffffff5003000004ed00019f9006000001f3011e488a0000ffffffff2b03000001f4011114eb890000ffffffff2b030000071d0114b4890000ffffffff0900000003300f11a6890000ffffffff09000000026e04120015fd890000ffffffff85000000034c0f150f8a0000ffffffff7700000003490e15fd890000ffffffff89000000034a0e150f8a0000ffffffff73000000034b0f150f8a0000ffffffff62000000033e1015c8890000ffffffff0800000008031215c8890000ffffffff0600000008031200000000000000a800000004000000000004129a1901001c004aca0000c1ab000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b4030000015104010000026605000006f348000057ba0000052506010000024e04000002dd080000027e0700000290060000078638000090060000022c0100024804000007c93600004804000003370100028e06000007f90f00008e060000042f0100000000003400000004000000000004129a1901001c009d0e0100b4ac000076fc0000024e04000002dd08000019ea8c00009006000001ea0101000000bd00000004000000000004059a1901001c00bcd30000e3ac000076fc0000ffffffffa1000000024e04000002dd08000002e40900001dffffffffa100000007ed03000000009fe409000001f3011fd68b00006012000001f40111204b8b000080120000051d01147d8b0000ffffffff05000000020d10116f8b0000ffffffff0500000003d104120015188c0000ffffffff13000000021d0e149d8b0000ffffffff0b000000020714118f8b0000ffffffff0b0000000375041200000000000000009100000004000000000004129a1901001c008e00010045ae000076fc0000024e04000002dd080000027e07000002e40900000702450000e40900000105010000000002c20a0000023103010002bd02000002bc03000006600f00002703010002ca04010006454b0000bc03000002a0040102b403000006c677000019030100026e0401000658300000b403000002460401000000003400000004000000000004129a1901001c009d0e0100d3ae000076fc0000024e04000002dd0800001988670000e409000001ea01010000003f00000004000000000004129a1901001c006e10010002af000076fc0000024e04000002dd080000027e07000002730a0000079f530000730a000001080100000000000d01000004000000000004059a1901001c0004cb000044af000076fc0000ffffffff39000000024e04000002ae0300000201060000027cfd00001dffffffff3900000007ed03000000009f7cfd000005f3011ef48d0000ffffffff3800000005f4011114e88d0000ffffffff3800000004970914d68d0000ffffffff0f000000045d11147a8d0000ffffffff0f000000067c16116c8d0000ffffffff0f000000016e0412000015988d0000ffffffff0c000000045f1115b68d0000ffffffff0100000004620515988d0000ffffffff0c00000004601114d68d0000ffffffff0e000000045e11147a8d0000ffffffff0e000000067c16116c8d0000ffffffff0e000000016e041200000000000000000000c700000004000000000004129a1901001c0024f10000bdb0000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040100000231040000026903000002f80100000709710000720b000005ab010000000201060000026004000002ee010000066b3b00006d03000006f3050100000000024e04000002ae030000025f02000007eb4d00006f050000027b0100020106000007256500006aba000003550119571300007cfd000004ea0101000000002101000004000000000004059a1901001c00d0c10000f3b1000076fc0000ffffffff73000000024e04000002ae03000002010600000241fd00001dffffffff7300000007ed03000000009f41fd000001f3011f49900000a012000001f40111203d900000b8120000056d09142b900000ffffffff0d000000052c11146a8f0000ffffffff0d000000067c16115c8f0000ffffffff0d00000002750412000015888f0000ffffffff09000000052e1115cb8f0000ffffffff01000000053208159a8f0000ffffffff0700000005370815ad8f0000ffffffff0b00000005400815de8f0000ffffffff0100000005400815eb8f0000ffffffff05000000054c0f15f88f0000ffffffff0500000005410c220b900000ffffffff07000000050000000000000000002c01000004000000000004129a1901001c0024f10000e4b3000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b403000001460401000002310400000269030000022a02000007e38e0000720b000005ab0100029c01000006831b00007b050000050f010100029d00000007d21a0000720b000005ab0100000002010600000260040000027202000006b17200006d03000006f305010002e40100000611a50000e40a000006f10501066d6900006d03000006f3050106358100006603000006ed05010002930200000644590000f00500000699050100000000024e04000002ae03000002bd020000070a6f00006f050000027b01000201060000071ca1000099bb0000032201193750000041fd000004ea0101000000005f00000004000000000004059a1901001c00271501001ab5000076fc0000ffffffff0a000000024e04000002dd08000002cb0900001dffffffff0a00000007ed03000000009fcb09000002f30111e5900000ffffffff0900000002f4011100000000003400000004000000000004129a1901001c009d0e01006eb5000076fc0000024e04000002dd08000019353b0000cb09000001ea01010000007000000004000000000004059a1901001c00920301009db5000076fc0000ffffffff0c000000024e04000002dd08000002600a00001dffffffff0c00000007ed03000000009f600a000002f3011ed4910000ffffffff0b00000002f40111159b910000ffffffff0b000000031d010000000000003f00000004000000000004129a1901001c0060fe000017b6000076fc0000024e04000002dd080000027e07000002600a000007584f0000600a000001040100000000003400000004000000000004129a1901001c009d0e010058b6000076fc0000024e04000002dd0800001970140000600a000001ea0101000000e000000004000000000004059a1901001c0031f9000087b6000076fc0000ffffffffb2030000024e04000002dd080000024a0400001dffffffffb203000004ed00019f4a04000001f3011e89930000ffffffff8903000001f40111142c930000ffffffff89030000061d011408930000ffffffff13000000032e0f11fa920000ffffffff13000000026e0412001550930000ffffffff7700000003470e153e930000ffffffff8900000003440e1550930000ffffffff7300000003450f153e930000ffffffff8500000003460f153e930000ffffffff90000000033910000000000000009500000004000000000004129a1901001c00ef0301004eb9000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b403000001510401000000024e04000002dd080000027e070000024a04000007f72900004a040000022d0100024804000007c93600004804000003370100028e06000007f90f00008e060000042f0100000000003400000004000000000004129a1901001c009d0e0100f2b9000076fc0000024e04000002dd08000019078600004a04000001ea0101000000c700000004000000000004059a1901001c0099ee000021ba000076fc0000ffffffff4a000000024e04000002ae03000002ee02000002250a00001dffffffff4a00000007ed03000000009f250a000004f3011ef2940000ffffffff4900000004f401112096940000d012000001751815b5940000ffffffff0300000001181300141e950000ffffffff070000000175381111950000ffffffff0700000005f1051300144a950000ffffffff01000000017509113c950000ffffffff0100000003cf041200000000000000005d00000004000000000004129a1901001c0016c100002cbb000076fc0000024e04000002ae03000002ee02000002a70300000708950000e70300000114010000000002c20a000002140700000271000000079c22000035040000029401000000009200000004000000000004129a1901001c005cc00000b6bb000076fc0000024e04000002ae03000002ee02000019c4990000250a000001ea010100000002c20a00000214070000020c020000064f3900003e05000002d6050106205800004b05000002f005010000020aec000002bd02000002bc03000006328f000000ec000003c804010006ef9f0000bc03000003990401000000009900000004000000000004059a1901001c00cfe4000045bc000076fc0000ffffffff72010000024e040000027a07000002e90701001dffffffff7201000007ed03000000009fe9070100040d021e2c960000ffffffff71010000040e02111420960000ffffffff71010000019d09154f960000ffffffff0700000001632d1768960000e812000001634f176896000010130000015d4f000000000000007e00000004000000000004129a1901001c003bf200000cbe000076fc0000024e040000027a07000007b16a000027b8000001550119b58d0000e907010002050201000002c20a00000266050000025805000002bd02000006f6950000d7b70000031004010000026005000002bd02000006f87f0000d7b7000004ab030100000000007d00000004000000000004059a1901001c00badb0000b0be000076fc0000ffffffffd9000000024e040000027a0700000287fd00001dffffffffd900000007ed03000000009f87fd0000030d021e2f970000ffffffffd8000000030e02111423970000ffffffffd8000000018c09175297000038130000014d4b000000000000006500000004000000000004129a1901001c003bf20000eebf000076fc0000024e040000027a070000079b8a0000f8b8000001480119df76000087fd000002050201000002c20a00000266050000026005000002bd02000006da110000efb8000003ab030100000000007000000004000000000004059a1901001c0002d3000084c0000076fc0000ffffffffe2000000024e040000027a0700000284c400001dffffffffe200000007ed03000000009f84c40000020d021e0c980000ffffffffe1000000020e02111500980000ffffffffe100000001be090000000000004000000004000000000004129a1901001c003bf200001bc1000076fc0000024e040000027a07000007f4580000d0b90000016c01191b5d000084c40000020502010000006200000004000000000004059a1901001c00edc900005cc1000076fc0000ffffffff35000000024e040000022f03000002f30200000229f300001dffffffff3500000004ed00029f29f3000001f30111af980000ffffffff1300000001f401110000000000003a00000004000000000004129a1901001c002fd90000c1c1000076fc0000024e040000022f03000002f302000019b97d000029f3000001eb010100000000ff03000004000000000004059a1901001c00b50b0100f0c1000076fc0000ffffffffc5060000024e04000002dd08000002120900001dffffffffc506000007ed03000000009f1209000001f3011ffc9d00006013000001f4011120b19d000008140000081d0114039d0000ffffffff14000000034b0c11f59c0000ffffffff140000000275041200153e9e0000ffffffff1900000003920a208d9d0000b0140000090a1a1f7a9d0000c81400000a9a021a175b9d0000e01400000bee1c0000148d9d0000ffffffff09000000090a1a1e7a9d0000ffffffff090000000a9a021a155b9d0000ffffffff090000000bee1c000014309d0000ffffffff0500000003ee0e11159d0000ffffffff0500000002d104120014309d0000ffffffff0100000003f90f11159d0000ffffffff0100000002d104120014039d0000ffffffff0600000003f51211f59c0000ffffffff06000000027504120014309d0000ffffffff0100000003f60f11159d0000ffffffff0100000002d10412001e039d0000ffffffff040000000302011211f59c0000ffffffff0400000002750412001e309d0000ffffffff010000000303010f11159d0000ffffffff0100000002d10412001e039d0000ffffffff04000000030a011211f59c0000ffffffff0400000002750412001e309d0000ffffffff01000000030b010f11159d0000ffffffff0100000002d1041200148d9d0000ffffffff0b000000090a1a1e7a9d0000ffffffff0b0000000a9a021a155b9d0000ffffffff0b0000000bee1c00001e039d0000ffffffff040000000312011111f59c0000ffffffff0400000002750412001e309d0000ffffffff010000000313010e11159d0000ffffffff0100000002d104120014039d0000ffffffff0400000003ce1111f59c0000ffffffff04000000027504120014309d0000ffffffff0100000003cf0e11159d0000ffffffff0100000002d104120015819e0000ffffffff03000000038f101e309d0000ffffffff010000000319010a11159d0000ffffffff0100000002d10412001e039d0000ffffffff0b000000031d010b11f59c0000ffffffff0b00000002750412001e309d0000ffffffff01000000033b010d11159d0000ffffffff0100000002d10412001e039d0000ffffffff030000000343010c11f59c0000ffffffff0300000002750412001e309d0000ffffffff080000000344010911159d0000ffffffff0800000002d10412001e039d0000ffffffff03000000034d010b11f59c0000ffffffff0300000002750412001e309d0000ffffffff050000000353010d11159d0000ffffffff0500000002d10412001ec39d0000ffffffff930000000351010d143d9d0000ffffffff01000000071c0911229d0000ffffffff0100000002d104120000000000000000000d01000004000000000004129a1901001c009bfc000029ca000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca040106600f00002703010001ca04010006454b0000bc03000001a0040106454b0000bc03000001a0040100000266050000026005000002bd020000068d510000dcbb000003ab030100000002f10a000002cd020000020c020000076b760000c9bb000004e301000002bd02000006e073000084b7000005930201000000024e04000002dd080000027e070000021209000007a173000012090000022f010002c309000007c3940000c309000006020100000000003400000004000000000004129a1901001c009d0e010076cb000076fc0000024e04000002dd080000192f9f00001209000001ea01010000003f00000004000000000004129a1901001c00b7e70000a5cb000076fc0000024e04000002dd080000027e070000028b09000007e46400008b09000001050100000000003f00000004000000000004129a1901001c001bf40000e4cb000076fc0000024e04000002dd080000027e070000021709000007244400001709000001110100000000005300000004000000000004059a1901001c005f02010023cc000076fc0000ffffffff0c000000024e04000002ae03000002d00b000002acf3000024ffffffff0c00000007ed03000000009facf3000001f3010000000000bd00000004000000000004059a1901001c001af8000068cc000076fc0000ffffffffc2000000024e04000002dd08000002e70800001dffffffffc200000007ed03000000009fe708000001f3011f67a00000f814000001f4011120dc9f000018150000051d01140ea00000ffffffff05000000021a0a1100a00000ffffffff0500000003cf04120015a9a00000ffffffff1b000000022f13142ea00000ffffffff10000000020e171120a00000ffffffff10000000036e041200000000000000009100000004000000000004129a1901001c0031d10000cdcd000076fc0000024e04000002dd080000027e07000002e7080000074aab0000e70800000108010000000002c20a0000020aec000002bd02000002bc03000006328f000000ec000002c804010006ef9f0000bc0300000299040102b403000006baaa0000e7eb00000267040100065e820000b403000002510401000000003400000004000000000004129a1901001c009d0e01005ace000076fc0000024e04000002dd080000194ea60000e708000001ea01010000003f00000004000000000004129a1901001c0017bd000089ce000076fc0000024e04000002dd080000027e07000002fffc00000709ab0000fffc000001050100000000006301000004000000000004059a1901001c00b8e30000c8ce000076fc0000ffffffff48020000024e04000002dd08000002f8fc00001dffffffff4802000004ed00019ff8fc000001f3011f67a300003815000001f40111201ba3000068150000081d011e61a20000ffffffff0b0000000357010e1153a20000ffffffff0b000000026e0412001795a20000981500000903121e61a20000ffffffff030000000375010e1153a20000ffffffff03000000026e04120011c6a20000ffffffff050000000377010d14f7a20000ffffffff0e000000090a1a1ee4a20000ffffffff0e0000000a9a021a15aca20000ffffffff0e0000000bee1c000014f7a20000ffffffff01000000090a1a1ee4a20000ffffffff010000000a9a021a15aca20000ffffffff010000000bee1c00001e2ea30000ffffffffa2000000038301051481a20000ffffffff010000000720091173a20000ffffffff0100000002cf04120000000000000000001a01000004000000000004129a1901001c0043e600001ed2000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000002660500000679100000abbb000003250601026005000002bd02000006caa00000a2b9000005ab03010000000214070000027100000006f4a80000a90b000004a40401000002f10a000002cd020000020c02000007838f00008fb9000006e301000002bd020000068f0e0000fab6000007930201000000024e04000002dd080000027e07000002f8fc000006b5a80000f8fc0000024601010002fb06000007dfa60000fb06000008020100000000003400000004000000000004129a1901001c009d0e010086d3000076fc0000024e04000002dd080000199c7a0000f8fc000001ea0101000000bb02000004000000000004059a1901001c00a3da0000b5d3000076fc0000ffffffffa4000000024e04000002ae030000026b0b00000266fd00001dffffffffa400000007ed03000000009f66fd000009f3011eb4a70000ffffffffa300000009f4011114a8a70000ffffffffa3000000054c091496a70000ffffffff140000000523111476a60000ffffffff140000000a7c161168a60000ffffffff140000000175041200001594a60000ffffffff0800000005231114dfa70000ffffffff0700000005260815ffa60000ffffffff0700000006b30d00153da70000ffffffff01000000052608154aa70000ffffffff01000000052e0f15a6a60000ffffffff1600000005380915f1a70000ffffffff03000000053e1f1404a80000ffffffff0b000000054016141fa70000ffffffff0b00000006b70d1112a70000ffffffff0b0000000b920516000015b9a60000ffffffff040000000541161404a80000ffffffff01000000054136141fa70000ffffffff0100000006b70d1112a70000ffffffff010000000b920516000015cca60000ffffffff0500000005411615f1a70000ffffffff03000000053f20145fa80000ffffffff07000000053d151541a80000ffffffff0700000006c70d0015f1a70000ffffffff05000000052a1f1404a80000ffffffff0b000000052c16141fa70000ffffffff0b00000006b70d1112a70000ffffffff0b0000000b920516000015e5a60000ffffffff03000000052d091594a60000ffffffff0100000005441f15f1a70000ffffffff0300000005441f1404a80000ffffffff0100000005451f141fa70000ffffffff0100000006b70d1112a70000ffffffff010000000b920516000015cca60000ffffffff0100000005451214c7a70000ffffffff010000000545051477a70000ffffffff010000000a95111169a70000ffffffff0100000008cf041200000000000000000000da01000004000000000004129a1901001c00120c01002dd6000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b403000001460401000002310400000269030000022a02000007e38e0000720b000005ab010002ce000000065c350000a2060000051603010002da00000006b8250000740500000573010100024c01000006023900007b050000050f0101000002c708000002b202000006a74c0000de06000009f702010000000214070000027100000006f93d0000350c000006cd040100023f00000006ebaf00000908000006aa0301060a0e0000fc070000068e0501000002010600000260040000027202000006eb5400006603000008ed050106d45b0000e40a000008f10501000000020aec000002bd02000002bc03000006328f000000ec00000ac804010006ef9f0000bc0300000a990401000000024e04000002ae03000002bd020000070a6f00006f050000027b0100026b0b00000780910000abba000003050119f917000066fd000004ea010100025f02000007489000006a0500000294010000022f03000002f90000000780a40000350c000007b20100026600000006538d00000d0300000774010100027100000007fc120000fc07000007b601000000005700000004000000000004129a1901001c0025ed0000a0d7000076fc000002c20a000002140700000271000000079c22000035040000019401000000024e040000022f03000002f900000018753e00003504000002c60100000000b500000004000000000004059a1901001c00ebd1000027d8000076fc0000ffffffff9b000000024e04000002dd08000002680a00001dffffffff9b00000007ed03000000009f680a000003f3011e68a90000ffffffff9a00000003f40111145aa90000ffffffff9a000000041d011499a90000ffffffff0b000000013911118ba90000ffffffff0b000000026e04120014b9a90000ffffffff0300000001680511aba90000ffffffff0300000002cf041200000000000000009e00000004000000000004129a1901001c009d0e010050d9000076fc0000024e04000002dd080000027e07000002680a0000073a100000680a000001310100001974500000680a000002ea0101000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000367040100065e820000b40300000351040102bc03000006328f000000ec000003c804010006ef9f0000bc03000003990401000000006f00000004000000000004059a1901001c00d6c80000eed9000076fc0000ffffffffa4000000024e040000022f03000002f802000002a2f200001dffffffffa400000004ed00059fa2f2000001f3011f6aaa0000b015000001f4011115a8aa0000ffffffff1900000002a801000000000000003a00000004000000000004129a1901001c00e7c2000080da000076fc0000024e040000022f03000002f8020000198c320000a2f2000001eb0101000000003a00000004000000000004129a1901001c002fd90000afda000076fc0000024e040000022f03000002f302000019bb33000098f2000001eb010100000000c000000004000000000004059a1901001c00ffbf0000deda000076fc0000ffffffff9d000000024e04000002ae03000002ee02000002490900001dffffffff9d00000004ed00029f4909000001f3011f25ac0000c815000001f4011120e7ab0000e015000003611815aaab0000ffffffff1600000003351314c3ab0000ffffffff1800000003361311b6ab0000ffffffff180000000592051600001457ac0000ffffffff010000000361091149ac0000ffffffff0100000004d1041200000000000000007700000004000000000004129a1901001c0016c10000fddb000076fc000002c20a0000021407000002a802000007e32200003504000001940106622000000908000001aa0301062a9c0000fc070000018e0501000000024e04000002ae03000002ee02000002a703000007f4410000f703000002340100000000006c00000004000000000004129a1901001c005cc0000087dc000076fc0000024e04000002ae03000002ee02000019294a00004909000001ea010100000002c20a0000023103010002bd02000002bc03000006600f00002703010002ca04010006454b0000bc03000002a00401000000006800000004000000000004059a1901001c005613010005dd000076fc0000ffffffff38000000024e040000027a07000002e90600001dffffffff3800000007ed03000000009fe90600000299011f321d0000f8150000029a011117611c000010160000034209000000000000a800000004000000000004059a1901001c004801010090dd000076fc0000ffffffff6a000000024e04000002ae03000002d8020000022afd00001dffffffff6a00000007ed03000000009f2afd000001f3011e0fae0000ffffffff5500000001f401111403ae0000ffffffff55000000031e0914ebad0000ffffffff0b00000003081315adad0000ffffffff0b00000005f42a0015cbad0000ffffffff1400000003120900000000000000009c00000004000000000004129a1901001c00e9d90000d5de000076fc000002c20a00000214070000020c020000064f3900003e05000001d605010000023104000002c7080000026001000006b72a0000ba0600000574030100000000024e040000022f03000002bb00000007df800000f509000002f301000002ae03000002d8020000073877000090bb000003050119ba3d00002afd000004ea010100000000bd00000004000000000004059a1901001c0003f70000d1df000076fc0000ffffffff7a010000024e04000002dd08000002860a00001dffffffff7a01000007ed03000000009f860a000002f3011f7eaf00002816000002f401112013af000078160000051d011445af0000ffffffff0d0000000120141137af0000ffffffff0d000000037504120015c0af0000ffffffff0100000001530f1445af0000ffffffff090000000121141137af0000ffffffff090000000375041200000000000000007100000004000000000004129a1901001c00b31301000fe2000076fc0000024e04000002dd080000027e07000002860a000007ab3f0000860a0000011c010000000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000000003400000004000000000004129a1901001c009d0e01009ee2000076fc0000024e04000002dd080000197a6a0000860a000001ea01010000003f00000004000000000004129a1901001c00b7e70000cde2000076fc0000024e04000002dd080000027e070000028b09000007e46400008b0900000105010000000000d600000004000000000004059a1901001c00c8ec00000ce3000076fc0000ffffffff21000000024e04000002dd08000002650b00001dffffffff2100000007ed03000000009f650b000005f3011e7ab10000ffffffff2000000005f401111441b10000ffffffff20000000061d01142fb10000ffffffff1c00000003070f14ebb00000ffffffff0f00000002081011ddb00000ffffffff0f000000016e041200140bb10000ffffffff01000000020b0511fdb00000ffffffff0100000001cf0412000015bcb10000ffffffff0100000003070500000000000000a300000004000000000004129a1901001c001aff00000ee4000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000000024e04000002dd080000027e07000002990600000766580000990600000206010002650b00000743880000650b000003060100000000003400000004000000000004129a1901001c009d0e0100abe4000076fc0000024e04000002dd08000019224f0000650b000001ea01010000003f00000004000000000004129a1901001c0074bd0000dae4000076fc0000024e04000002dd080000027e07000002da0b00000780850000da0b000001040100000000005f00000004000000000004059a1901001c00a1e2000019e5000076fc0000ffffffff0a000000024e04000002dd080000025a0c00001dffffffff0a00000007ed03000000009f5a0c000002f3011158b20000ffffffff0900000002f4011100000000003400000004000000000004129a1901001c009d0e01006de5000076fc0000024e04000002dd08000019d79300005a0c000001ea0101000000d200000004000000000004059a1901001c008cd900009ce5000076fc0000ffffffff12010000024e04000002dd08000002e20800001dffffffff1201000004ed00019fe208000001f3011e0eb40000ffffffffeb00000001f4011114d5b30000ffffffffeb000000061d01147eb30000ffffffff05000000030f091170b30000ffffffff0500000002cf0412001550b40000ffffffff1f00000003250515b2b30000ffffffff11000000070312149eb30000ffffffff12000000030d141190b30000ffffffff12000000026e04120000000000000000a400000004000000000004129a1901001c006bec000041e7000076fc000002c20a0000020aec000002bd02000002bc03000006328f000000ec000001c804010006ef9f0000bc0300000199040102b403000006baaa0000e7eb00000167040100065e820000b4030000015104010000026605000006f348000057ba0000032506010000024e04000002dd080000027e07000002e208000007f42e0000e2080000020b0100000000003400000004000000000004129a1901001c009d0e01001de8000076fc0000024e04000002dd0800001927530000e208000001ea01010000003f00000004000000000004129a1901001c00700801004ce8000076fc0000024e04000002dd080000027e07000002fdfc0000076db30000fdfc000001080100000000006200000004000000000004059a1901001c00d4d000008de8000076fc0000ffffffff47000000024e040000022f03000002f3020000021ee900001dffffffff4700000004ed00039f1ee9000001f30111f4b40000ffffffff2400000001f401110000000000003a00000004000000000004129a1901001c002fd900000ae9000076fc0000024e040000022f03000002f3020000194b3a00001ee9000001eb010100000000b600000004000000000004059a1901001c00bfc7000039e9000076fc0000ffffffff1f000000024e040000022f030000021e0c000002c40b00001dffffffff1f00000007ed03000000009fc40b000002f3011f5ab60000c816000002f40111204db60000e0160000034209203bb60000f8160000031c1d2018b600001017000003051b17ecb500002817000004c30d001424b60000ffffffff0700000003061215f9b50000ffffffff0700000004ab0d00000000000000000000a800000004000000000004129a1901001c00cc0c01000cea000076fc000002c20a00000214070000023f0000000638970000990b000001f0050106eb450000a90b000001a40401000000024e040000022f030000027100000007741a0000990b000002c2010715140000a90b000002aa0100021e0c000002520c000007e00e00009ab800000304010002530c0000073a9b0000dbb80000031b010019ec180000c40b000004ea0101000000006200000004000000000004059a1901001c00e8be0000b1ea000076fc0000ffffffff72000000024e040000022f03000002f302000002d8e800001dffffffff7200000004ed00069fd8e8000001f30111feb60000ffffffff4300000001f401110000000000003a00000004000000000004129a1901001c002fd900002ceb000076fc0000024e040000022f03000002f302000019c09d0000d8e8000001eb0101000000006f00000004000000000004059a1901001c003f1201005beb000076fc0000ffffffffdc000000024e040000022f03000002f802000002e5e800001dffffffffdc00000004ed00069fe5e8000001f3011fafb700004017000001f4011115edb70000ffffffff2a00000002a101000000000000003a00000004000000000004129a1901001c00e7c20000f4eb000076fc0000024e040000022f03000002f80200001972410000e5e8000001eb0101000000003a00000004000000000004129a1901001c002fd9000023ec000076fc0000024e040000022f03000002f302000019c09d0000d8e8000001eb0101000000001606000004000000000004059a1901001c00e409010052ec000076fc0000ffffffff1c030000024e04000002ae03000002d807000002a3f300001dffffffff1c03000004ed00029fa3f3000001f3011e9e790000fffffffff102000001f401111492790000fffffffff102000005c50914b1790000ffffffff0e000000052011141c790000ffffffff0e000000077c16110e790000ffffffff0e000000026e04120000150d770000ffffffff0300000005271d152f780000ffffffff05000000052b08150d770000ffffffff0e000000052e15153c780000ffffffff0100000005320c153c780000ffffffff0100000005360c155c780000ffffffff01000000053a0c155c780000ffffffff0100000005440c155c780000ffffffff0300000005540c1549780000ffffffff03000000055b0c14267b0000ffffffff15000000055c2b17f67a00005817000007a01615c37a0000ffffffff0100000007a11615e37a0000ffffffff0300000007a31a001549780000ffffffff0300000005610c14267b0000ffffffff1200000005622b17f67a00007017000007a01615c37a0000ffffffff0100000007a116001569780000ffffffff03000000053b1023bd790000ffffffff070000000500143c790000ffffffff07000000079511112e790000ffffffff0700000002cf04120000156b770000ffffffff0400000005472514bd790000ffffffff05000000054718143c790000ffffffff05000000079511112e790000ffffffff0500000002cf04120000156b770000ffffffff04000000053d2514bd790000ffffffff05000000053d18143c790000ffffffff05000000079511112e790000ffffffff0500000002cf04120000156b770000ffffffff0100000005332114bd790000ffffffff05000000053314143c790000ffffffff05000000079511112e790000ffffffff0500000002cf04120000156b770000ffffffff0100000005372114bd790000ffffffff05000000053714143c790000ffffffff05000000079511112e790000ffffffff0500000002cf041200001545770000ffffffff1a0000000574141558770000ffffffff03000000056b0520347a00008817000005732f21f0780000a0170000085401220015477a0000ffffffff0300000005781f15bd780000ffffffff01000000057a0a15bd780000ffffffff05000000057b0a150d770000ffffffff01000000057f081569780000ffffffff04000000057f08156b770000ffffffff0d000000058218157e770000ffffffff0800000005830915bd780000ffffffff0300000005802d155a7a0000ffffffff0500000005a7191545770000ffffffff0c00000005a7191591770000ffffffff0100000005a6091558770000ffffffff0500000005a709146d7a0000ffffffff070000000592151590780000ffffffff0700000008b30d00176b770000b8170000059b1b1532770000ffffffff08000000059b3c15a4770000ffffffff09000000059c0d1545770000ffffffff01000000059a1a14bd790000ffffffff07000000059414143c790000ffffffff07000000079511112e790000ffffffff0700000002cf04120000156b770000ffffffff0100000005881d14bd790000ffffffff05000000058810143c790000ffffffff05000000079511112e790000ffffffff0500000002cf041200001558770000ffffffff1600000005ab05153c780000ffffffff0100000005b00815d0770000ffffffff0100000005b10920bd790000d817000005b805203c790000f0170000079511212e7900000818000002cf04120000155c780000ffffffff0100000005b408150d770000ffffffff0100000005b51915d0770000ffffffff0300000005b50915ca780000ffffffff05000000057c0a15477a0000ffffffff0300000005771f150d770000ffffffff0300000005261d151f770000ffffffff10000000052418150d770000ffffffff070000000524181532770000ffffffff04000000052316150d770000ffffffff250000000523161532770000ffffffff04000000052216150d770000ffffffff0600000005221614b1790000ffffffff0e000000051f11141c790000ffffffff0e000000077c16110e790000ffffffff0e000000026e0412000000000000000000000d01000004000000000004059a1901001c003100010002f1000076fc0000ffffffff25000000024e04000002ae03000002010600000249fd00001dffffffff2500000007ed03000000009f49fd000005f3011ee3bf0000ffffffff2400000005f4011114d7bf0000ffffffff2400000004730914c5bf0000ffffffff0a000000045d111469bf0000ffffffff0a000000067c16115bbf0000ffffffff0a0000000175041200001587bf0000ffffffff07000000045f1115a5bf0000ffffffff010000000462051587bf0000ffffffff0700000004601114c5bf0000ffffffff09000000045e111469bf0000ffffffff09000000067c16115bbf0000ffffffff090000000175041200000000000000000000c700000004000000000004129a1901001c0024f100007bf2000076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b403000001460401000002310400000269030000022a02000007e38e0000720b000005ab0100000002010600000260040000027202000006b17200006d03000006f3050100000000024e04000002ae03000002bd020000070a6f00006f050000027b0100020106000007eb8a0000bebb000003550119ad47000049fd000004ea0101000000009e01000004000000000004059a1901001c00ecf50000b1f3000076fc0000ffffffff54000000024e040000022f030000029a03000002f8f200001dffffffff5400000007ed03000000009ff8f2000001f3011fd5c100002018000001f4011120c8c1000038180000026f0915e8c10000ffffffff07000000023c2e2015c2000050180000023c11206cc2000068180000039f31215fc200008018000006b3051600001415c20000ffffffff05000000023d11146cc20000ffffffff05000000039f31115fc20000ffffffff0500000006b30516000020f5c1000098180000023b0d1133c20000ffffffff05000000033a012a1140c20000ffffffff01000000033a0118001421c20000ffffffff0d000000023c2e1486c20000ffffffff0d00000003b70d1179c20000ffffffff0d0000000692051600001502c20000ffffffff01000000023c1115a4c20000ffffffff05000000023c1115e8c10000ffffffff0500000002370d1415c20000ffffffff0200000002370d146cc20000ffffffff02000000039f31115fc20000ffffffff0200000006b30516000000000000000000001c01000004000000000004129a1901001c005ae7000043f5000076fc0000024e040000022f030000029a03000002ae0500000703750000bcba00000134010019a8840000f8f2000002ea01010002c701000006c9320000960800000333010106e09a000085080000033901010631460000380600000330010100029301000007a974000087050000039e0107dc4f0000fc07000003b601000234020000064a80000090080000034d0101068d3a0000f0060000034a010100000002c20a0000021407000002bb00000006ee470000a005000004da030106558a00009305000004af050106d5b400000908000004aa0301062e1a0000fc070000048e050100000231040000026903000002da01000006ac2b00007b050000050f01010000000000dc00000004000000000004059a1901001c000eec000036f6000076fc0000ffffffff27020000024e04000002dd08000002050600001dffffffff2702000004ed00019f0506000001f3011f66c40000b018000001f40111202dc40000e0180000051d0114d6c30000ffffffff0700000003461911c8c30000ffffffff07000000026e04120014d6c30000ffffffff0700000003721711c8c30000ffffffff07000000026e04120014f6c30000ffffffff0a00000003840d11e8c30000ffffffff0a00000002cf041200150ac40000ffffffff0800000006031200000000000000a400000004000000000004129a1901001c00f6ee0000d6f8000076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000002660500000679100000abbb0000032506010000024e04000002dd080000027e070000020506000007b11d00000506000002450100000000003400000004000000000004129a1901001c009d0e0100b3f9000076fc0000024e04000002dd080000198bb000000506000001ea01010000006b00000004000000000004059a1901001c00e7e10000e2f9000076fc0000ffffffff5c000000024e040000022f03000002f802000002eff200001dffffffff5c00000004ed00029feff2000001f3011f50c500001019000001f401111712c5000028190000038c11000000000000003a00000004000000000004129a1901001c002fd9000072fa000076fc0000024e040000022f03000002f3020000197a250000e5f2000001eb0101000000003a00000004000000000004129a1901001c00e7c20000a1fa000076fc0000024e040000022f03000002f802000019332e0000eff2000001eb0101000000000001000004000000000004059a1901001c00d2d80000d0fa000076fc0000ffffffff6f010000024e040000022f03000002f302000002fbe800001dffffffff6f01000007ed03000000009ffbe8000001f3011e2dc70000ffffffff6401000001f401111492c60000ffffffff550100000519171e9ec60000ffffffff120000000291011b15bcc60000ffffffff0300000004401c15bcc60000ffffffff030000000440320011c8c60000ffffffff030000000293011711c8c60000ffffffff07000000029e011f1fe2c600004019000002b3011b21d5c6000070190000069205160021c8c60000a019000002b3012b21efc60000d019000002b7011b00000000000000009700000004000000000004129a1901001c00fec3000010fd000076fc0000024e040000022f030000023307000007296e00006e07000001170107bd5a00008803000003310100000002c20a000002140700000271000000079c2200003504000002940106f93d0000350c000002cd0401066e4a00000908000002aa030106c1850000fc070000028e050106f4a80000a90b000002a40401000000003a00000004000000000004129a1901001c002fd90000c4fd000076fc0000024e040000022f03000002f3020000191a350000fbe8000001eb0101000000007701000004000000000004059a1901001c001ad00000f3fd000076fc0000ffffffffb8050000024e04000002dd08000002ae0900001dffffffffb805000004ed00019fae09000001f3011e8dc90000ffffffff8b05000001f4011114ebc80000ffffffff8b050000081d011441c90000ffffffff0f0000000221141133c90000ffffffff0f000000037504120020cfc90000001a00000256121401ca0000ffffffff01000000043d0d11f3c90000ffffffff0100000003d10412000015fdc80000ffffffff4b000000025b0f150fc90000ffffffff4b00000002580e15fdc80000ffffffff4f00000002590e170fc90000181a0000025a0e150fc90000ffffffff4b000000024d1015fdc80000ffffffff4b000000024a1915fdc80000ffffffff4f000000024818170fc90000301a0000023d1015fdc80000ffffffff4f000000023a1815fdc80000ffffffff4b000000023819150fc90000ffffffff4b0000000231101555c90000ffffffff0600000009031200000000000000a800000004000000000004129a1901001c0030d50000d002010076fc0000024e04000002dd080000027e07000002ae09000007a6590000ae090000011c0100023609000007c4970000360900000318010002ac09000007a1640000ac0900000418010000000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000002660500000679100000abbb0000052506010000003400000004000000000004129a1901001c009d0e0100c603010076fc0000024e04000002dd0800001994360000ae09000001ea01010000007100000004000000000004129a1901001c0045bf0000f503010076fc0000024e04000002dd080000027e070000027c0a000007477c00007c0a00000123010000000002c20a0000023103010002bd02000002bc03000006600f00002703010002ca04010006454b0000bc03000002a0040100000000dc00000004000000000004059a1901001c0005c700008704010076fc0000ffffffff92010000024e04000002dd080000029f0900001dffffffff9201000004ed00019f9f09000001f3011fc2cb0000481a000001f401112089cb0000781a0000051d011432cb0000ffffffff170000000319191124cb0000ffffffff1700000002750412001432cb0000ffffffff080000000345171124cb0000ffffffff0800000002750412001452cb0000ffffffff0600000003570d1144cb0000ffffffff0600000002d10412001566cb0000ffffffff0800000006031200000000000000a400000004000000000004129a1901001c006d140100e406010076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000002660500000679100000abbb0000032506010000024e04000002dd080000027e070000029f09000007063f00009f09000002180100000000003400000004000000000004129a1901001c009d0e0100c207010076fc0000024e04000002dd08000019cc8100009f09000001ea0101000000e901000004000000000004059a1901001c002ebe0000f107010076fc0000ffffffff52000000024e040000022f030000029a0300000246f300001dffffffff5200000007ed03000000009f46f3000001f3011ffecd0000a81a000001f4011120f1cd0000c01a00000264091511ce0000ffffffff0200000002272e143ece0000ffffffff0500000002281114a1ce0000ffffffff0500000003bb0d1194ce0000ffffffff0500000006bb05160000201ece0000d81a000002260d1168ce0000ffffffff08000000033a012a1175ce0000ffffffff01000000033a01180015cece0000ffffffff03000000022749144ace0000ffffffff0100000002272e14bbce0000ffffffff0100000003b70d11aece0000ffffffff01000000069d05160000152bce0000ffffffff030000000227111456ce0000ffffffff0300000002271114e8ce0000ffffffff03000000039f3111dbce0000ffffffff0300000007b3051600001506cf0000ffffffff01000000022711201ece0000f01a0000021e0d1168ce0000ffffffff0c000000033a012a1175ce0000ffffffff01000000033a0118001511ce0000ffffffff02000000021f11143ece0000ffffffff03000000021f1114a1ce0000ffffffff0300000003bb0d1194ce0000ffffffff0300000006bb0516000000000000000000005501000004000000000004129a1901001c005ae70000a209010076fc0000024e040000022f030000029a03000002b305000007a0ac00001bba0000011b0100190488000046f3000002ea010100025c00000006d0690000960800000333010106079800008508000003390101067ca7000038060000033001010002bb000000073f9300009305000003ba0107a8a30000fc07000003b601073319000087050000039e010002e5000000068311000090080000034d0101062c380000f0060000034a010100000002c20a00000214070000020c02000006855e0000a00500000459030106bc5f00009305000004b705010607260000090800000429030106029e0000fc0700000499050100027100000006f93d0000350c000005cd04010625540000a005000005da030106a81400009305000005af0501000002310400000269030000020b000000063b8600007b050000060f01010000000000eb01000004000000000004059a1901001c0085110100a60a010076fc0000ffffffff00010000024e040000022f03000002d807000002f1e800001dffffffff0001000007ed03000000009ff1e8000001f3011f40d10000081b000001f401112034d10000201b00000271181452d10000ffffffff8a00000002501c1565d10000ffffffff010000000223101765d10000381b00000223251477d10000ffffffff0d00000002252015ced10000ffffffff0d00000003af0d0014a2d10000ffffffff0a000000022d1e1195d10000ffffffff010000000354013311dbd10000ffffffff09000000035401220014a2d10000ffffffff07000000022e1e11dbd10000ffffffff07000000035401220015afd10000ffffffff01000000022f371483d10000ffffffff0d000000022f2015e8d10000ffffffff0d00000003c30d0014a2d10000ffffffff0a00000002271e1195d10000ffffffff010000000354013311dbd10000ffffffff09000000035401220014a2d10000ffffffff0700000002281e11dbd10000ffffffff07000000035401220015afd10000ffffffff010000000229371483d10000ffffffff0d00000002292015e8d10000ffffffff0d00000003c30d0014a2d10000ffffffff0b00000002331e11dbd10000ffffffff0b0000000354012200000000000000000000ee00000004000000000004129a1901001c00b8170100850c010076fc0000024e040000022f03000002d807000007640d0000bb070000013e0119230f0000f1e8000002ea0101023506000007e31f0000c6ba00000122010000029301000007871e00000b06000003a2010002f900000007356d0000cf07000003ae0107a3900000990b000003c2010002340200000617640000f50600000347010106824600008807000003530101064a80000090080000034d010100000002c20a00000214070000027100000006d9b20000cf07000004e4040106d9b20000cf07000004e404010639ad0000990b000004f0050100000000c700000004000000000004059a1901001c002a090100270d010076fc0000ffffffff6f000000024e04000002ae03000002ee020000023f0a00001dffffffff6f00000007ed03000000009f3f0a000004f3011e52d30000ffffffff6e00000004f4011120f6d20000501b00000181181515d30000ffffffff05000000012c1300147ed30000ffffffff070000000181381171d30000ffffffff0700000005f105130014aad30000ffffffff01000000018109119cd30000ffffffff0100000003cf041200000000000000005d00000004000000000004129a1901001c0016c10000360e010076fc0000024e04000002ae03000002ee02000002a703000007af870000d70300000128010000000002c20a00000214070000023f000000078d34000035040000029401000000009200000004000000000004129a1901001c005cc00000c00e010076fc0000024e04000002ae03000002ee02000019746200003f0a000001ea010100000002c20a0000021407000002d1010000065c4300003e05000002d6050106332400004b05000002f005010000020aec000002bd02000002bc03000006328f000000ec000003c804010006ef9f0000bc03000003990401000000005f00000004000000000004059a1901001c0077ff00004f0f010076fc0000ffffffff0a000000024e04000002dd08000002f50500001dffffffff0a00000007ed03000000009ff505000002f3011146d40000ffffffff0900000002f4011100000000003400000004000000000004129a1901001c009d0e0100a30f010076fc0000024e04000002dd0800001976480000f505000001ea01010000000001000004000000000004059a1901001c0032f50000d20f010076fc0000ffffffff1a010000024e040000022f03000002f30200000216f300001dffffffff1a01000007ed03000000009f16f3000004f3011e22d60000ffffffff1601000004f401111487d50000ffffffff160100000512091e93d50000ffffffff160000000191011b15b1d50000ffffffff0700000003401c15b1d50000ffffffff030000000340320011bdd50000ffffffff030000000193011711bdd50000ffffffff09000000019e011f1fd7d50000681b000001b3011b21cad50000981b0000069205160021bdd50000c81b000001b3012b21e4d50000f81b000001b7011b00000000000000009700000004000000000004129a1901001c00fec30000de11010076fc0000024e040000022f030000023307000007296e00006e07000001170107bd5a00008803000003310100000002c20a000002140700000271000000079c2200003504000002940106f93d0000350c000002cd0401066e4a00000908000002aa030106c1850000fc070000028e050106f4a80000a90b000002a40401000000003a00000004000000000004129a1901001c002fd900009212010076fc0000024e040000022f03000002f302000019414e000016f3000001eb0101000000005300000004000000000004059a1901001c0027eb0000c112010076fc0000ffffffff0c000000024e04000002ae03000002d00b00000288f3000024ffffffff0c00000007ed03000000009f88f3000001f30100000000002601000004000000000004059a1901001c002de100000613010076fc0000ffffffff29000000024e040000022f030000021e0c000002420c00001dffffffff2900000007ed03000000009f420c000002f3011f85d80000281c000002f401112078d80000401c0000045209205ad80000581c0000041f1d204ed80000701c0000041109202bd80000881c000004051b17e1d70000a01c000005c30d001437d80000ffffffff0100000004061215eed70000ffffffff0100000005ab0d0000150cd80000ffffffff010000000410141466d80000ffffffff070000000410141437d80000ffffffff03000000040d1e15eed70000ffffffff0300000005ab0d00142bd80000ffffffff03000000040b1b15e1d70000ffffffff0300000005c30d0000000000000000000000de00000004000000000004129a1901001c00cc0c01004314010076fc000002c20a00000214070000023f0000000638970000990b000001f0050106eb450000a90b000001a4040100000231040000026903000002bb00000007bfab00002a030000053d0100000000024e040000022f030000027100000007741a0000990b000002c2010715140000a90b000002aa0100021e0c000002520c000007e00e00009ab8000003040107ceb10000a5b80000030f0107a49800008bb80000030a010002530c00000765440000e5b80000031e01001924760000420c000004ea010100000000e800000004000000000004059a1901001c0060cf00003715010076fc0000ffffffff62090000024e04000002dd08000002e40500001dffffffff6209000007ed03000000009fe405000004f3011f4fda0000b81c000004f4011120e6d90000d81c000003681114c2d90000ffffffff1c00000002a91411b4d90000ffffffff1c000000016e04120014f2d90000ffffffffa202000002cb0d1591da0000ffffffff0500000002981a1504da0000ffffffff6200000002a3121516da0000ffffffff9000000002a00e1704da0000081d000002a10e1516da0000ffffffff8c00000002a20f0000000000000000a100000004000000000004129a1901001c008fcd0000321b010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b403000001510401000000024e04000002dd080000027e07000002e405000007b2170000e405000002a80107332f00007e08000002940100028e06000007f90f00008e060000032f0100024804000007c93600004804000004370100000000003400000004000000000004129a1901001c009d0e0100db1b010076fc0000024e04000002dd08000019619a0000e405000001ea01010000003f00000004000000000004129a1901001c00bdf700000a1c010076fc0000024e04000002dd080000027e070000028105000007b0b5000081050000010a010000000000b802000004000000000004059a1901001c004bc60000491c010076fc0000ffffffffac020000024e040000027a07000002ab0a00001dffffffffac02000007ed03000000009fab0a00000699011e3f1d0000ffffffffa9020000069a011115841d0000ffffffff10000000022125206e1c0000201d000002270d15d61d0000ffffffff0700000005c717207f1c0000381d000005cd0920301e0000501d000005811f11231e0000ffffffff090000000471041b0014301e0000ffffffff0100000005831911231e0000ffffffff010000000471041b0000148b1c0000ffffffff5800000005d70d144a1e0000ffffffff0100000005b325113d1e0000ffffffff010000000471041b000020971c0000681d000005d50d14641e0000ffffffff0100000005902511571e0000ffffffff010000000471041b000014f01d0000ffffffff0b00000005cf1311e31d0000ffffffff0b000000030c041b00147f1c0000ffffffff3f00000005dd0514301e0000ffffffff0100000005831911231e0000ffffffff010000000471041b000015161e0000ffffffff0d00000005c6190014a41c0000ffffffff3101000002250d149e1d0000ffffffff0500000005673111911d0000ffffffff050000000772051b0014b51c0000ffffffff3500000005680915711e0000ffffffff05000000051f1d15fd1d0000ffffffff0700000005231715711e0000ffffffff010000000522190014c11c0000ffffffff5800000005720d157e1e0000ffffffff010000000552250014cd1c0000ffffffff2c00000005700d158b1e0000ffffffff07000000053023158b1e0000ffffffff01000000052f250015fd1d0000ffffffff0700000005751315fd1d0000ffffffff0d000000056a1314b51c0000ffffffff2100000005780515fd1d0000ffffffff0700000005231715711e0000ffffffff0100000005221900000000000000005f00000004000000000004059a1901001c00cb100100cc1f010076fc0000ffffffff0a000000024e04000002dd08000002930a00001dffffffff0a00000007ed03000000009f930a000002f30111e9dd0000ffffffff0900000002f4011100000000003400000004000000000004129a1901001c009d0e01002020010076fc0000024e04000002dd0800001964570000930a000001ea0101000000e200000004000000000004059a1901001c00bdfe00004f20010076fc0000ffffffffcb000000024e04000002ae03000002ee020000023d0900001dffffffffcb00000004ed00029f3d09000001f3011f64df0000801d000001f401111419df0000ffffffff20000000038739110cdf0000ffffffff2000000005f105130020dfdf0000981d000003871815a2df0000ffffffff1200000003351314bbdf0000ffffffff1800000003361311aedf0000ffffffff180000000692051600001445df0000ffffffff010000000387091137df0000ffffffff0100000004d1041200000000000000009200000004000000000004129a1901001c005cc000008b21010076fc000002c20a000002140700000293010000066a1d00003e05000001d6050106e61c00004b05000001f005010000023103010002bd02000002bc03000006600f00002703010003ca04010006454b0000bc03000003a00401000000024e04000002ae03000002ee02000019c67000003d09000002ea0101000000007700000004000000000004129a1901001c0016c100001a22010076fc000002c20a0000021407000002a802000007e32200003504000001940106622000000908000001aa0301062a9c0000fc070000018e0501000000024e04000002ae03000002ee02000002a703000007f4410000f703000002340100000000008d00000004000000000004059a1901001c0078f40000a422010076fc0000ffffffffb6000000024e040000027a07000002970701001dffffffffb600000007ed03000000009f97070100040d021eb5e00000ffffffffb5000000040e021114a9e00000ffffffffb500000001880915d8e00000ffffffff07000000014d2917f1e00000b01d0000014d4b000000000000007e00000004000000000004129a1901001c003bf20000e023010076fc0000024e040000027a07000007da9b0000dfb7000001480119b07e00009707010002050201000002c20a00000266050000025805000002bd02000006f6950000d7b70000031004010000026005000002bd02000006f87f0000d7b7000004ab030100000000003101000004000000000004059a1901001c0073e000008424010076fc0000ffffffff87000000024e04000002ae03000002010600000274fd00001dffffffff8700000007ed03000000009f74fd000001f3011f6ae30000d81d000001f40111205ee30000f01d0000059109144ce30000ffffffff12000000052c111478e20000ffffffff12000000067c16116ae20000ffffffff12000000026e041200001596e20000ffffffff0e000000052e1115d9e20000ffffffff0100000005320815a8e20000ffffffff0700000005370815ece20000ffffffff0100000005370815bbe20000ffffffff0b00000005400815ffe20000ffffffff01000000054008150ce30000ffffffff05000000054c0f1519e30000ffffffff0500000005410c222ce30000ffffffff07000000050000000000000000003f01000004000000000004129a1901001c0024f100007e26010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040100000231040000026903000002f80100000709710000720b000005ab0100024c01000006023900007b050000050f010100025200000007d7420000720b000005ab010000000201060000026004000002ee010000066b3b00006d03000006f3050100022f01000006493f0000f0050000069905010002560100000658330000e40a000006f1050106444c00006d03000006f305010695ae00006603000006ed050100022a02000006ed310000f00500000699050100000000024e04000002ae030000025f02000007eb4d00006f050000027b0100020106000007f662000045ba000003220119805a000074fd000004ea0101000000008900000004000000000004059a1901001c005ed70000b427010076fc0000ffffffffbd010000024e040000027a0700000289e900001dffffffffbd01000007ed03000000009f89e90000010d021e3ce40000ffffffffb5010000010e02111430e40000ffffffffb501000002a509175fe40000081e000002634f175fe40000301e0000025d4f000000000000006500000004000000000004129a1901001c003bf200008429010076fc0000024e040000027a07000007904000002dbb000001550119bf91000089e9000002050201000002c20a00000266050000026005000002bd02000006b4270000daba000003ab030100000000005f00000004000000000004059a1901001c00a6ce00001a2a010076fc0000ffffffff0a000000024e04000002dd08000002910701001dffffffff0a00000007ed03000000009f9107010002f30111fce40000ffffffff0900000002f4011100000000003400000004000000000004129a1901001c009d0e01006e2a010076fc0000024e04000002dd08000019575100009107010001ea0101000000a800000004000000000004059a1901001c0091c500009d2a010076fc0000ffffffff76000000024e04000002ae03000002d8020000025cfd00001dffffffff7600000007ed03000000009f5cfd000001f3011e47e60000ffffffff5d00000001f40111143be60000ffffffff5d0000000322091423e60000ffffffff0b00000003081315e5e50000ffffffff0b00000005f42a001503e60000ffffffff1800000003120900000000000000009c00000004000000000004129a1901001c00e9d90000e22b010076fc000002c20a00000214070000020c020000064f3900003e05000001d605010000023104000002c7080000020e01000006907c0000ba0600000574030100000000024e040000022f03000002bb00000007df800000f509000002f301000002ae03000002d802000007777e000025ba000003050119500e00005cfd000004ea0101000000009900000004000000000004059a1901001c00babc0000de2c010076fc0000ffffffff0d000000024e04000002ae030000024e0c000002b5f300001dffffffff0d00000007ed03000000009fb5f3000003f3011e66e70000ffffffff0c00000003f401111454e70000ffffffff06000000020d151435e70000ffffffff060000000495111127e70000ffffffff0600000001cf04120000000000000000007e00000004000000000004129a1901001c00d5f400009d2d010076fc000002c20a0000020aec000002bd02000002bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000000024e04000002ae030000025f02000007489000006a05000002940100024e0c0000196c540000b5f3000003ea0101000000006f00000004000000000004059a1901001c00111001002f2e010076fc0000ffffffff58000000024e040000022f03000002f8020000026df300001dffffffff5800000004ed00029f6df3000001f3011f17e80000501e000001f401111555e80000ffffffff0d000000029e01000000000000003a00000004000000000004129a1901001c00e7c20000bb2e010076fc0000024e040000022f03000002f802000019f02000006df3000001eb0101000000003a00000004000000000004129a1901001c002fd90000ea2e010076fc0000024e040000022f03000002f302000019004d000063f3000001eb0101000000005f00000004000000000004059a1901001c0013080100192f010076fc0000ffffffff0a000000024e04000002dd08000002020700001dffffffff0a00000007ed03000000009f0207000002f30111f1e80000ffffffff0900000002f4011100000000003400000004000000000004129a1901001c009d0e01006d2f010076fc0000024e04000002dd08000019205200000207000001ea01010000005701000004000000000004059a1901001c0003fe00009c2f010076fc0000ffffffff57000000024e040000022f030000029a03000002c8f200001dffffffff5700000007ed03000000009fc8f2000001f3011e9bea0000ffffffff3b00000001f40111148eea0000ffffffff3b00000002570920aeea0000681e0000020e1120d8ea0000801e000005b70d21e5ea0000981e000006920516000014aeea0000ffffffff07000000020f4014d8ea0000ffffffff0700000005b70d11e5ea0000ffffffff070000000692051600001512eb0000ffffffff05000000020f2b14baea0000ffffffff03000000020f1114f2ea0000ffffffff03000000059f3111ffea0000ffffffff0200000006b3051600001530eb0000ffffffff03000000020f1114aeea0000ffffffff0900000002090d14d8ea0000ffffffff0900000005b70d11e5ea0000ffffffff080000000692051600000000000000000000e200000004000000000004129a1901001c005ae70000f630010076fc0000024e040000022f030000029a030000021708000007f77d000080b80000010501001962730000c8f2000002ea010100027100000007fc120000fc07000004b6010737b4000087050000049e0100000002c20a00000214070000023f000000060a0e0000fc070000038e050106ebaf00000908000003aa030106aa2000009305000003af050106b7350000a005000003da030100027100000006f93d0000350c000003cd0401000002310400000269030000024c01000006023900007b050000050f01010000000000fe06000004000000000004059a1901001c00bef30000e931010076fc0000ffffffffb3020000024e04000002ae03000002050300000276f300001dffffffffb302000007ed03000000009f76f3000009f3011fb8f60000b01e000009f401111facf60000001f0000048b0309148ef60000ffffffff0f000000042e111484f20000ffffffff0f000000067c161176f20000ffffffff0f00000001750412000015c2f20000ffffffff0300000004351d154cf40000ffffffff0500000004390815c2f20000ffffffff09000000043c151559f40000ffffffff0100000004400c1559f40000ffffffff0100000004440c1579f40000ffffffff0100000004480c2579f40000501f000004001566f40000ffffffff0100000004690c1476f80000ffffffff12000000046a2b150cf80000ffffffff0300000006a0161538f80000ffffffff0b00000006a31a1518f80000ffffffff0100000006a116001566f40000ffffffff01000000046f0c2076f80000681f000004702b150cf80000ffffffff0300000006a0161538f80000ffffffff0700000006a31a1518f80000ffffffff0100000006a116001546f30000ffffffff04000000044e25149af60000ffffffff03000000044e1814a4f20000ffffffff030000000695111196f20000ffffffff0300000001d1041200001546f30000ffffffff01000000044121149af60000ffffffff0100000004411414a4f20000ffffffff010000000695111196f20000ffffffff0100000001d1041200001546f30000ffffffff01000000044521149af60000ffffffff0100000004451414a4f20000ffffffff010000000695111196f20000ffffffff0100000001d104120000149af60000ffffffff0300000004541414a4f20000ffffffff030000000695111196f20000ffffffff0300000001d1041200001546f30000ffffffff01000000046321149af60000ffffffff0100000004631414a4f20000ffffffff010000000695111196f20000ffffffff0100000001d104120000141cf70000ffffffff07000000047d0915d3f40000ffffffff0700000008b30d001428f70000ffffffff1a000000047d0915e0f40000ffffffff1a00000008ab0d0015faf20000ffffffff05000000047a05150df30000ffffffff010000000482111e1cf70000ffffffff030000000435012815d3f40000ffffffff0300000008b30d0011f6f30000ffffffff07000000046401111f5ff70000801f00000468012b1152f70000ffffffff080000000854011a1152f70000ffffffff03000000085401331168f50000ffffffff030000000854012200110df30000ffffffff010000000468013b1172f70000ffffffff090000000468012b1166f40000ffffffff01000000046d012f110df30000ffffffff05000000047a011b1120f30000ffffffff010000000479010911edf40000ffffffff05000000047b012e1e1cf70000ffffffff08000000047a011b15d3f40000ffffffff0800000008b30d00110df30000ffffffff010000000470011b11edf40000ffffffff050000000471012e1e1cf70000ffffffff080000000470011b15d3f40000ffffffff0800000008b30d0011f0f50000ffffffff07000000047501281e34f70000ffffffff0700000004af010d1414f50000ffffffff0700000008b70d1107f50000ffffffff070000000a9205160000113bf50000ffffffff0500000004b3010a1e40f70000ffffffff0100000004ad0113142ef50000ffffffff0100000008bb0d1121f50000ffffffff010000000ab3051600001e9af60000ffffffff0300000004ab011414a4f20000ffffffff030000000695111196f20000ffffffff0300000001d10412000011faf20000ffffffff0700000004a601091133f30000ffffffff0300000004a7010911c2f20000ffffffff0100000004a5011711c2f20000ffffffff0100000004bb01151108f40000ffffffff0300000004bb01091159f40000ffffffff0300000004be010c1146f30000ffffffff0300000004c401121e9af60000ffffffff0100000004c4010514a4f20000ffffffff010000000695111196f20000ffffffff0100000001d1041200001146f30000ffffffff01000000049e011d1e9af60000ffffffff01000000049e011014a4f20000ffffffff010000000695111196f20000ffffffff0100000001d10412000015faf20000ffffffff0500000004790515faf40000ffffffff0500000004810615c2f20000ffffffff0300000004341d15d4f20000ffffffff0b00000004321915c2f20000ffffffff0700000004321915e7f20000ffffffff0400000004311615c2f20000ffffffff1900000004311615e7f20000ffffffff0400000004301615c2f20000ffffffff06000000043016148ef60000ffffffff0a000000042d111484f20000ffffffff0a000000067c161176f20000ffffffff0a00000001750412000000000000000000009705000004000000000004129a1901001c00b40f01002937010076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000002310400000269030000022a02000007e38e0000720b000005ab0100022401000006f933000074050000057301010002a6010000062d560000b4050000054b0201000202010000068b550000a20600000516030100027a00000006906d00001808000005d501010002b101000006552b0000af06000005ed03010002910000000606720000c5060000059b030100029c01000006831b00007b050000050f01010002f80100000709710000720b000005ab010002da00000006b8250000740500000573010100023e02000006ec260000b4050000054b02010002ce000000065c350000a20600000516030100021901000006018a00001808000005d50101000285000000068d190000af06000005ed030100025302000006bf560000c5060000059b030100024c01000006023900007b050000050f0101000002c7080000021f00000007311500004e0c000009d40100020000000006588c0000de06000009f7020100027202000007cda700004e0c000009d4010002b202000006a74c0000de06000009f7020100000002010600000260040000027202000006d45b0000e40a000006f1050106b17200006d03000006f3050106eb5400006603000006ed050100027f0100000679240000f0050000069905010002ee0100000635680000e40a000006f10501066b3b00006d03000006f3050106848800006603000006ed050100022f01000006493f0000f0050000069905010000000214070000027100000006f93d0000350c000007cd040106f4a80000a90b000007a4040106d9b20000cf07000007e4040106f4a80000a90b000007a40401066e4a00000908000007aa030106c1850000fc070000078e05010625540000a005000007da030106a81400009305000007af050106f93d0000350c000007cd040106f93d0000350c000007cd040106f4a80000a90b000007a4040100023f00000006ee3f0000cf07000007e4040106ee3f0000cf07000007e4040106eb450000a90b000007a40401069a9a0000350c000007cd040106eb450000a90b000007a4040106ebaf00000908000007aa0301060a0e0000fc070000078e050106b7350000a005000007da030106aa2000009305000007af0501069a9a0000350c000007cd040100020c02000006c0710000350c00000ad004010002d101000006da570000350c00000ad004010642750000ff0800000a7f05010002a802000006a6490000cf07000007e404010000020aec000002bd02000002b403000006baaa0000e7eb00000b67040100065e820000b40300000b51040102bc03000006328f000000ec00000bc804010006ef9f0000bc0300000b990401000000024e04000002ae03000002bd020000070a6f00006f050000027b010790af00006a05000002940100020503000007e97c0000e5bb000003080119fe35000076f3000004ea010106896c000091ba000003c7010119a18000009af3000004ea010102e1eb00000674890000f5eb000003eb01010000025f02000007eb4d00006f050000027b0107489000006a0500000294010000022f03000002f90000000780a40000350c000008b20107268b0000a90b000008aa0107782f0000fc07000008b601073aae00009305000008ba010002020200000611b20000f50600000847010106c35c00008807000008530101000289010000069565000096080000083301010002bd010000063c36000088070000085301010002710000000795960000350c000008b2010715140000a90b000008aa0107fc120000fc07000008b601070c2200009305000008ba0100029d02000006555200000d0300000874010100000000b500000004000000000004129a1901001c008ff50000aa38010076fc000002c20a000002140700000271000000079c2200003504000001940106f93d0000350c000001cd040106f93d0000350c000001cd040100020c02000006c0710000350c000003d0040106c0710000350c000003d0040100023f000000078d34000035040000019401000000024e04000002ae03000002bd0200001817410000a10a0000029e0100025f02000018412c0000a10a0000029e01000000004e03000004000000000004059a1901001c00b3e900004439010076fc0000ffffffff5b010000024e04000002ae03000002da0b00000234fd00001dffffffff5b01000007ed03000000009f34fd000009f3011ec7fd0000ffffffff5a01000009f4011114bbfd0000ffffffff5a01000005760914a9fd0000ffffffff21000000052e11142afc0000ffffffff210000000a7c16111cfc0000ffffffff21000000016e041200001548fc0000ffffffff0d000000052e1114f2fd0000ffffffff0e00000005320815ebfc0000ffffffff0e00000006b30d0014f2fd0000ffffffff0100000005322815ebfc0000ffffffff0100000006b30d001523fd0000ffffffff010000000532081530fd0000ffffffff0100000005420f153dfd0000ffffffff01000000054a0f155afc0000ffffffff0100000005511a1510fe0000ffffffff0300000005511a155afc0000ffffffff0a000000055f34155afc0000ffffffff010000000561111510fe0000ffffffff0b0000000561111748fc0000981f000005621e1530fd0000ffffffff01000000056410155dfd0000ffffffff010000000568151593fc0000ffffffff0100000005691f15d1fc0000ffffffff0700000005691115d1fc0000ffffffff050000000565111580fc0000ffffffff03000000055a1d1550fd0000ffffffff01000000055a1d1548fc0000ffffffff0a00000005541b156dfc0000ffffffff0100000005541b155afc0000ffffffff010000000536161510fe0000ffffffff0b0000000536161548fc0000ffffffff09000000053a1a1530fd0000ffffffff01000000053b0c155dfd0000ffffffff01000000053e131593fc0000ffffffff0100000005401b15d1fc0000ffffffff0500000005400d15d1fc0000ffffffff03000000053d0d155afc0000ffffffff0100000005490f1510fe0000ffffffff0d00000005490f15a5fc0000ffffffff0500000005480914fefd0000ffffffff01000000056f1f1405fd0000ffffffff0100000006bb0d11f8fc0000ffffffff010000000bb3051600001510fe0000ffffffff08000000056f1f15b8fc0000ffffffff01000000056f1214dafd0000ffffffff01000000056f05148afd0000ffffffff010000000a9511117cfd0000ffffffff0100000008d10412000000000000000000003302000004000000000004129a1901001c00e30d0100903c010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040100000231040000026903000002f80100000709710000720b000005ab0100023e02000006ec260000b4050000054b020100024c01000006023900007b050000050f010100021901000006018a00001808000005d5010100022a02000007e38e0000720b000005ab01000202010000068b550000a20600000516030100029c01000006831b00007b050000050f0101000002c7080000020000000006588c0000de06000009f702010000000214070000023f000000069a9a0000350c000006cd040106b7350000a005000006da030106aa2000009305000006af050100000201060000026004000002ee01000006848800006603000008ed0501066b3b00006d03000008f305010635680000e40a000008f1050100022f01000006e6650000c70a0000089b050106493f0000f005000008990501000000023103010002bd02000002bc03000006600f0000270301000aca04010006454b0000bc0300000aa00401000000024e04000002ae030000025f02000007eb4d00006f050000027b010002da0b000007ae280000f0bb000003040119b37f000034fd000004ea01010002bd0200000790af00006a0500000294010000022f03000002710000000795960000350c000007b201070c2200009305000007ba01000288020000063aa900000d03000007740101000000007d07000004000000000004059a1901001c00b9df0000023e010076fc0000ffffffffa7030000024e04000002ae0300000205030000029af300001dffffffffa703000004ed00029f9af3000001f3011ed2f60000ffffffff7e03000001f401111ec5f60000ffffffff7e030000059003091ef8f60000ffffffff0e00000005f00111144ff60000ffffffff0e000000077c161141f60000ffffffff0e000000026e041200001159f30000ffffffff0300000005f7011d118cf40000ffffffff0500000005fb01081159f30000ffffffff0e00000005fe01151199f40000ffffffff010000000502020c1199f40000ffffffff010000000506020c11b9f40000ffffffff01000000050a020c25b9f40000b01f0000050011b9f40000ffffffff030000000519020c11a6f40000ffffffff01000000052b020c1e88f80000ffffffff15000000052c022b1758f80000d81f000007a0161525f80000ffffffff0100000007a1161545f80000ffffffff0300000007a31a0011a6f40000ffffffff010000000531020c1e88f80000ffffffff150000000532022b1758f80000f01f000007a0161525f80000ffffffff0100000007a1161545f80000ffffffff0500000007a31a0011ddf30000ffffffff04000000051002251e04f70000ffffffff0500000005100218146ff60000ffffffff050000000795111161f60000ffffffff0500000002cf0412000011ddf30000ffffffff01000000050302211e04f70000ffffffff0500000005030214146ff60000ffffffff050000000795111161f60000ffffffff0500000002cf0412000011ddf30000ffffffff01000000050702211e04f70000ffffffff0500000005070214146ff60000ffffffff050000000795111161f60000ffffffff0500000002cf041200001e04f70000ffffffff0700000005160214146ff60000ffffffff070000000795111161f60000ffffffff0700000002cf0412000011ddf30000ffffffff01000000052502211e04f70000ffffffff0500000005250214146ff60000ffffffff050000000795111161f60000ffffffff0500000002cf041200001191f30000ffffffff05000000053c02051148f50000ffffffff090000000579022a2175f5000008200000059902372175f500002820000005a8022f1148f50000ffffffff0700000005c602161ee4f60000ffffffff0600000005d902181e10f60000ffffffff0600000005ec01091103f60000ffffffff060000000a80051b00001182f50000ffffffff0400000005e0020e111bf40000ffffffff0e0000000525031111a4f30000ffffffff050000000529033b1f85f70000482000000529032b2123f6000060200000095401220011a6f40000ffffffff01000000052e032f11a4f30000ffffffff05000000053b031b11b7f30000ffffffff01000000053a03091175f50000ffffffff05000000053c032e1e98f70000ffffffff08000000053b031b158ff50000ffffffff0800000009b30d0011a4f30000ffffffff010000000531031b1175f50000ffffffff050000000532032e1e98f70000ffffffff080000000531031b158ff50000ffffffff0800000009b30d001103f60000ffffffff07000000053603281155f50000ffffffff01000000057203221eb0f70000ffffffff070000000571030d14b6f50000ffffffff0700000009b70d11a9f50000ffffffff070000000b920516000011ddf50000ffffffff050000000575030a1ebcf70000ffffffff01000000056f030d14d0f50000ffffffff0100000009bb0d11c3f50000ffffffff010000000bb3051600001e04f70000ffffffff07000000056c0314146ff60000ffffffff070000000795111161f60000ffffffff0700000002cf041200001191f30000ffffffff070000000567030911caf30000ffffffff03000000056803091159f30000ffffffff01000000056603171159f30000ffffffff01000000057d0315112df40000ffffffff03000000057d03091199f40000ffffffff03000000057f030c11ddf30000ffffffff03000000058503121e04f70000ffffffff0500000005850305146ff60000ffffffff050000000795111161f60000ffffffff0500000002cf0412000011ddf30000ffffffff01000000055f031d1e04f70000ffffffff03000000055f0310146ff60000ffffffff030000000795111161f60000ffffffff0300000002cf0412000011a4f30000ffffffff07000000054402111191f30000ffffffff05000000053b02051e98f70000ffffffff05000000053f0209158ff50000ffffffff0500000009b30d0011cef70000ffffffff030000000541021b1ea4f70000ffffffff0b000000053f0209159cf50000ffffffff0b00000009ab0d001182f50000ffffffff05000000054302061159f30000ffffffff0300000005f6011d116bf30000ffffffff1000000005f401191159f30000ffffffff0700000005f40119117ef30000ffffffff0400000005f301161159f30000ffffffff1b00000005f30116117ef30000ffffffff0400000005f201161159f30000ffffffff0600000005f201161ef8f60000ffffffff0e00000005ef0111144ff60000ffffffff0e000000077c161141f60000ffffffff0e000000026e041200000000000000000000c000000004000000000004059a1901001c00a4d60000c943010076fc0000ffffffffa0000000024e04000002ae03000002ee02000002170a00001dffffffffa000000004ed00029f170a000001f3011f0e0701007820000001f4011120d0060100902000000366181593060100ffffffff16000000033f1314ac060100ffffffff1e000000034013119f060100ffffffff1e0000000592051600001440070100ffffffff010000000366091132070100ffffffff0100000004cf041200000000000000007700000004000000000004129a1901001c0016c10000dc44010076fc000002c20a0000021407000002a802000007e32200003504000001940106622000000908000001aa0301062a9c0000fc070000018e0501000000024e04000002ae03000002ee02000002a7030000076d5c0000c6030000023e0100000000006c00000004000000000004129a1901001c005cc000006645010076fc0000024e04000002ae03000002ee020000191ea20000170a000001ea010100000002c20a0000020aec000002bd02000002bc03000006328f000000ec000002c804010006ef9f0000bc03000002990401000000006f00000004000000000004059a1901001c00eccd0000e445010076fc0000ffffffff9c000000024e040000022f03000002f802000002dcf200001dffffffff9c00000004ed00059fdcf2000001f3011ff1070100a820000001f40111152f080100ffffffff1900000002a901000000000000003a00000004000000000004129a1901001c00e7c200007a46010076fc0000024e040000022f03000002f80200001937890000dcf2000001eb0101000000003a00000004000000000004129a1901001c002fd90000a946010076fc0000024e040000022f03000002f302000019b8950000d2f2000001eb0101000000003101000004000000000004059a1901001c00d7c40000d846010076fc0000ffffffff8f000000024e04000002ae03000002010600000254fd00001dffffffff8f00000007ed03000000009f54fd000001f3011fa70a0100c020000001f40111209b0a0100d8200000059c0914890a0100ffffffff12000000052c1114b5090100ffffffff12000000067c1611a7090100ffffffff12000000026e0412000015d3090100ffffffff0e000000052e1115160a0100ffffffff0100000005320815e5090100ffffffff0700000005370815290a0100ffffffff0100000005370815f8090100ffffffff0b000000054008153c0a0100ffffffff0100000005400815490a0100ffffffff05000000054c0f15560a0100ffffffff0500000005410c22690a0100ffffffff07000000050000000000000000003f01000004000000000004129a1901001c0024f10000d748010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040100000231040000026903000002f80100000709710000720b000005ab0100024c01000006023900007b050000050f010100025200000007d7420000720b000005ab010000000201060000026004000002ee010000066b3b00006d03000006f3050100022f01000006493f0000f0050000069905010002560100000658330000e40a000006f1050106444c00006d03000006f305010695ae00006603000006ed050100022a02000006ed310000f00500000699050100000000024e04000002ae030000025f02000007eb4d00006f050000027b0100020106000007f662000045ba000003220119ea52000054fd000004ea0101000000008501000004000000000004059a1901001c0000bc00000d4a010076fc0000ffffffff62000000024e040000022f030000029a03000002b5f200001dffffffff6200000007ed03000000009fb5f2000001f3011e800c0100ffffffff4400000001f4011114730c0100ffffffff4400000002690914a60c0100ffffffff09000000021e0d11930c0100ffffffff09000000033a012a0014b90c0100ffffffff07000000021f1114ef0c0100ffffffff0700000003bb0d11fc0c0100ffffffff0600000006bb0516000015290d0100ffffffff0500000002274914c50c0100ffffffff0900000002272e14090d0100ffffffff0900000003b70d11160d0100ffffffff08000000069d0516000014d10c0100ffffffff05000000022711143c0d0100ffffffff05000000039f3111490d0100ffffffff0400000007b30516000015670d0100ffffffff0300000002271114b90c0100ffffffff0700000002281114ef0c0100ffffffff0700000003bb0d11fc0c0100ffffffff0700000006bb0516000000000000000000003401000004000000000004129a1901001c005ae70000824b010076fc0000024e040000022f030000029a03000002b305000007f5a90000b0b80000011b010019f4230000b5f2000002ea01010002a700000006018c000090080000034d0101000235000000061cb50000850800000339010100023f00000007887500009305000003ba010703820000fc07000003b601073d2d000087050000039e0100000002c20a0000021407000002d101000006d43400009305000004b705010634aa0000a005000004590301068b160000fc0700000499050106b54a0000090800000429030100027100000006f93d0000350c000005cd040100023f00000006aa2000009305000005af050106b7350000a005000005da0301000002310400000269030000026802000006aa2900007b050000060f010100000000001a01000004000000000004059a1901001c0015180100864c010076fc0000ffffffffb5000000024e040000027a07000002a00300001dffffffffb500000007ed03000000009fa00300000199011e4c1d0000ffffffffa5000000019a011114da1c0000ffffffffa5000000052f091eb81d0000ffffffff050000000200012911ab1d0000ffffffff050000000672051b001eeb1c0000ffffffff270000000201010915981e0000ffffffff0500000002e41515981e0000ffffffff0100000002e713001ef71c0000ffffffff370000000206010915a51e0000ffffffff0b00000002f51515b21e0000ffffffff0100000002f91f001eeb1c0000ffffffff15000000020a010515981e0000ffffffff0100000002e71300000000000000001301000004000000000004059a1901001c00fa0e0100484e010076fc0000ffffffff29010000024e04000002dd080000028d0a00001dffffffff2901000007ed03000000009f8d0a000003f3011f6b100100f020000003f40111203210010010210000041d0114ee0f0100ffffffff17000000021e1911e00f0100ffffffff17000000017504120014ee0f0100ffffffff0a00000002391011e00f0100ffffffff0a0000000175041200140e100100ffffffff060000000246091100100100ffffffff0600000001d104120014ee0f0100ffffffff0400000002520d11e00f0100ffffffff040000000175041200140e100100ffffffff0800000002540a1100100100ffffffff0800000001d1041200000000000000009100000004000000000004129a1901001c0077f800001f50010076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000000024e04000002dd080000027e070000028d0a0000071fa300008d0a0000021b0100000000003400000004000000000004129a1901001c009d0e0100ad50010076fc0000024e04000002dd0800001989ab00008d0a000001ea0101000000a400000004000000000004059a1901001c007a060100dc50010076fc0000ffffffffa0000000024e04000002dd08000002980900001dffffffffa000000007ed03000000009f9809000001f3011ed2110100ffffffff9100000001f401111467110100ffffffff91000000041d011455110100ffffffff910000000503051499110100ffffffff01000000021c09118b110100ffffffff0100000003d104120000000000000000008300000004000000000004129a1901001c0049f600000e52010076fc0000024e04000002dd080000027e07000002c309000007c3940000c309000001020100029809000007f8ae0000980900000202010000000002c20a0000023103010002bd02000002bc03000006600f00002703010003ca04010006454b0000bc03000003a00401000000003400000004000000000004129a1901001c009d0e0100ab52010076fc0000024e04000002dd08000019588e00009809000001ea01010000001f01000004000000000004059a1901001c00bcfb0000da52010076fc0000ffffffff6b010000024e04000002dd08000002300900001dffffffff6b01000007ed03000000009f3009000004f3011fce1301003021000004f40111208913010060210000051d011445130100ffffffff16000000022c141137130100ffffffff1600000001750412001510140100ffffffff100000000249091595130100ffffffff1e000000024d091445130100ffffffff08000000024a0c1137130100ffffffff0800000001750412001465130100ffffffff01000000024b0e1157130100ffffffff0100000001d10412001510140100ffffffff1200000002430d1595130100ffffffff1e00000002440d1595130100ffffffff1e000000023e2e000000000000009d00000004000000000004129a1901001c00dfed00001c55010076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000000024e04000002dd080000027e0700000230090000071a5b0000300900000225010734870000eb05000002190100000000003400000004000000000004129a1901001c009d0e0100aa55010076fc0000024e04000002dd08000019742900003009000001ea01010000003f00000004000000000004129a1901001c001bf40000d955010076fc0000024e04000002dd080000027e070000021709000007244400001709000001110100000000006200000004000000000004059a1901001c0081f100001856010076fc0000ffffffff4b000000024e040000022f03000002f302000002d2f200001dffffffff4b00000004ed00059fd2f2000001f30111b4140100ffffffff2100000001f401110000000000003a00000004000000000004129a1901001c002fd900007d56010076fc0000024e040000022f03000002f302000019b8950000d2f2000001eb0101000000009300000004000000000004059a1901001c00a2de0000ac56010076fc0000ffffffff83000000024e04000002dd080000022e0300001dffffffff8300000007ed03000000009f2e03000003f3011ece150100ffffffff7f00000003f4011114c0150100ffffffff7f000000041d01149c150100ffffffff17000000020419118e150100ffffffff17000000016e041200000000000000007e00000004000000000004129a1901001c009d0e01009e57010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b403000001510401000000024e04000002dd080000027e070000022e03000007ef1900002e030000020201000019d23900002e03000003ea01010000008100000004000000000004059a1901001c008dd500003c58010076fc0000ffffffffb3000000024e040000027a07000002c00701001dffffffffb300000007ed03000000009fc0070100030d021e97160100ffffffffb2000000030e0211148b160100ffffffffb200000001b20915ba160100ffffffff07000000017f26000000000000006500000004000000000004129a1901001c003bf200001a59010076fc0000024e040000027a07000007697d000003b80000016c0119e9300000c007010002050201000002c20a00000266050000025805000002bd02000006f6950000d7b70000031004010000000000cb00000004000000000004059a1901001c00d5cc0000ae59010076fc0000ffffffff4b000000024e04000002ae03000002ee020000027d0900001dffffffff4b00000007ed03000000009f7d09000001f3011e43180100ffffffff3d00000001f401111405180100ffffffff3c00000003571815c8170100ffffffff03000000031f1314e1170100ffffffff0900000003201311d4170100ffffffff090000000592051600001475180100ffffffff010000000357091167180100ffffffff0100000004d1041200000000000000007700000004000000000004129a1901001c0016c10000be5a010076fc000002c20a00000214070000023f000000078d3400003504000001940106ebaf00000908000001aa0301060a0e0000fc070000018e0501000000024e04000002ae03000002ee02000002a703000007295f000008040000021e0100000000006c00000004000000000004129a1901001c005cc00000485b010076fc0000024e04000002ae03000002ee020000199e1f00007d09000001ea010100000002c20a0000023103010002bd02000002bc03000006600f00002703010002ca04010006454b0000bc03000002a00401000000008900000004000000000004059a1901001c0044c30000c65b010076fc0000ffffffffbd010000024e040000027a07000002d9fd00001dffffffffbd01000007ed03000000009fd9fd0000010d021e47190100ffffffffb5010000010e0211143b190100ffffffffb501000002a109176a1901009021000002634f176a190100b8210000025d4f000000000000006500000004000000000004129a1901001c003bf20000965d010076fc0000024e040000027a070000072925000042b90000015501190a0d0000d9fd000002050201000002c20a00000266050000026005000002bd02000006da110000efb8000003ab030100000000001301000004000000000004059a1901001c00fe1601002c5e010076fc0000ffffffffea010000024e04000002dd08000002f81601001dffffffffea01000007ed03000000009ff816010003f3011f501b0100d821000003f4011120171b010000220000041d0114d31a0100ffffffff1900000002261911c51a0100ffffffff19000000016e04120014d31a0100ffffffff0500000002441011c51a0100ffffffff05000000016e04120014f31a0100ffffffff0a00000002510911e51a0100ffffffff0a00000001cf04120014d31a0100ffffffff07000000025f0d11c51a0100ffffffff07000000016e04120014f31a0100ffffffff0c00000002610a11e51a0100ffffffff0c00000001cf041200000000000000009100000004000000000004129a1901001c002dc200006160010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000000024e04000002dd080000027e07000002f81601000755370000f816010002230100000000003400000004000000000004129a1901001c009d0e0100ef60010076fc0000024e04000002dd08000019dba40000f816010001ea0101000000d200000004000000000004059a1901001c00400e01001e61010076fc0000ffffffffdc000000024e04000002dd08000002de0900001dffffffffdc00000004ed00019fde09000001f3011e061d0100ffffffffb500000001f4011114cd1c0100ffffffffb5000000061d0114761c0100ffffffff0500000003110911681c0100ffffffff0500000002d104120015481d0100ffffffff1700000003250515aa1c0100ffffffff0d00000007031214961c0100ffffffff0d000000030f1411881c0100ffffffff0d000000027504120000000000000000a400000004000000000004129a1901001c0044e20000c262010076fc000002c20a0000023103010002bd02000002bc03000006600f00002703010001ca04010006454b0000bc03000001a0040102b403000006c677000019030100016e0401000658300000b403000001460401000002660500000679100000abbb0000032506010000024e04000002dd080000027e07000002de0900000742310000de090000020b0100000000003400000004000000000004129a1901001c009d0e01009f63010076fc0000024e04000002dd080000199e5b0000de09000001ea01010000003f00000004000000000004129a1901001c006e100100ce63010076fc0000024e04000002dd080000027e07000002730a0000079f530000730a000001080100000000004301000004000000000004059a1901001c00630501001064010076fc0000ffffffff40000000024e040000022f030000021e0c000002620600001dffffffff4000000007ed03000000009f6206000002f3011fa21f01002822000002f4011120951f010048220000045e0920831f01006822000004381320651f010080220000041f1d20591f01009822000004110920361f0100b022000004051b17cd1e0100c822000006c30d0014421f0100ffffffff0100000004061215da1e0100ffffffff0100000006ab0d000015f81e0100ffffffff0100000004101414711f0100ffffffff0700000004101414421f0100ffffffff03000000040d1e15da1e0100ffffffff0300000006ab0d0014361f0100ffffffff03000000040b1b15cd1e0100ffffffff0300000006c30d0000000015161f0100ffffffff1200000004392700000000000000000f01000004000000000004129a1901001c00cc0c0100a965010076fc000002c20a00000214070000023f0000000638970000990b000001f0050106eb450000a90b000001a4040100000231040000026903000002bb00000007bfab00002a030000053d0100000002010600000260040000026b010000069a6b00006603000006ed050100000000024e040000022f030000027100000007741a0000990b000002c2010715140000a90b000002aa0100021e0c000002520c000007e00e00009ab8000003040107ceb10000a5b80000030f0107a49800008bb80000030a010002530c0000077c150000a6b80000031e0100028406000007ba61000075b8000003370100195e3c00006206000004ea0101000000009300000004000000000004059a1901001c006af00000e866010076fc0000ffffffff5b000000024e04000002dd080000022a0900001dffffffff5b00000007ed03000000009f2a09000003f3011ebc200100ffffffff5700000003f4011114ae200100ffffffff57000000041d01148a200100ffffffff10000000020419117c200100ffffffff100000000175041200000000000000007e00000004000000000004129a1901001c009d0e0100d867010076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b403000001460401000000024e04000002dd080000027e070000022a09000007c1b000002a0900000202010000190d6700002a09000003ea01010000000f01000004000000000004059a1901001c00a0e600007768010076fc0000ffffffff31010000024e04000002dd080000026d0a00001dffffffff3101000004ed00019f6d0a000001f3011f05230100e022000001f4011120cc22010010230000071d01141f220100ffffffff0f000000035a0e1111220100ffffffff0f00000002750412001533220100ffffffff0e000000080312141f220100ffffffff0500000003770e1111220100ffffffff050000000275041200147c220100ffffffff08000000080a1a1e69220100ffffffff08000000099a021a154a220100ffffffff080000000aee1c000014a8220100ffffffff01000000037b0f119a220100ffffffff0100000006cf04120000000000000000fa00000004000000000004129a1901001c00fb0a01003a6b010076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b403000001460401000002660500000679100000abbb000003250601026005000002bd02000006caa00000a2b9000004ab030100000002f10a000002cd020000020c02000007838f00008fb9000005e301000002bd020000068f0e0000fab60000069302010000020aec000002bd02000002bc03000006328f000000ec000007c804010006ef9f0000bc03000007990401000000024e04000002dd080000027e070000026d0a000007019100006d0a0000024d0100000000003400000004000000000004129a1901001c009d0e01008e6c010076fc0000024e04000002dd08000019264300006d0a000001ea01010000006f00000004000000000004059a1901001c008bdd0000bd6c010076fc0000ffffffff72000000024e040000022f03000002f8020000022be900001dffffffff7200000004ed00039f2be9000001f3011fb52301004023000001f4011115f3230100ffffffff16000000029601000000000000003a00000004000000000004129a1901001c00e7c20000526d010076fc0000024e040000022f03000002f802000019be6700002be9000001eb0101000000003a00000004000000000004129a1901001c002fd90000816d010076fc0000024e040000022f03000002f3020000194b3a00001ee9000001eb010100000000ca01000004000000000004059a1901001c0076d40000b06d010076fc0000ffffffff45000000024e040000022f030000029a030000023cf300001dffffffff4500000007ed03000000009f3cf3000001f3011f112601005823000001f401112004260100702300000276091524260100ffffffff02000000023c2e1451260100ffffffff05000000023d1114b5260100ffffffff05000000039f3111a8260100ffffffff0500000006b305160000203126010088230000023b0d116f260100ffffffff08000000033a012a117c260100ffffffff01000000033a01180015c2260100ffffffff03000000023c49145d260100ffffffff01000000023c2e14dc260100ffffffff0100000003b70d11cf260100ffffffff01000000069205160000153e260100ffffffff03000000023c111451260100ffffffff03000000023c1114b5260100ffffffff03000000039f3111a8260100ffffffff0300000006b30516000015fa260100ffffffff01000000023c111524260100ffffffff0200000002370d1451260100ffffffff0300000002370d14b5260100ffffffff03000000039f3111a8260100ffffffff0300000006b3051600001589260100ffffffff0100000002370d00000000000000003601000004000000000004129a1901001c005ae700004a6f010076fc0000024e040000022f030000029a03000002ae05000007702e000068b9000001340100192e8300003cf3000002ea010100028901000006956500009608000003330101066c210000850800000339010106dd82000038060000033001010002f900000007dfac000087050000039e0107782f0000fc07000003b601000202020000065728000090080000034d01010622a70000f0060000034a01010622a70000f0060000034a010100000002c20a0000021407000002710000000625540000a005000004da030106a81400009305000004af050106f93d0000350c000004cd0401066e4a00000908000004aa030106c1850000fc070000048e0501000002310400000269030000029c01000006831b00007b050000050f010100000000006200000004000000000004059a1901001c00becb00003d70010076fc0000ffffffff35000000024e040000022f03000002f30200000263f300001dffffffff3500000004ed00029f63f3000001f301119f270100ffffffff1300000001f401110000000000003a00000004000000000004129a1901001c002fd90000a270010076fc0000024e040000022f03000002f302000019004d000063f3000001eb010100000000b501000004000000000004059a1901001c00e1150100d170010076fc0000ffffffff6e000000024e040000022f03000002d807000002bff200001dffffffff6e00000007ed03000000009fbff2000001f3011fc8290100a023000001f4011120bb290100b8230000046d0914a3290100ffffffff150000000410151196290100ffffffff0b000000025101381196290100ffffffff010000000251011a111e2a0100ffffffff09000000025101270015db290100ffffffff0100000004113014a3290100ffffffff0d000000041115111e2a0100ffffffff0d000000025101270015db290100ffffffff0100000004121514a3290100ffffffff03000000041215111e2a0100ffffffff03000000025101270020ee290100d0230000041513173e2a0100e823000002ab0d0014002a0100ffffffff0500000004191a152b2a0100ffffffff0500000002af0d0014002a0100ffffffff05000000041a1b152b2a0100ffffffff0500000002af0d0014ee290100ffffffff02000000041909153e2a0100ffffffff0200000002ab0d0014a3290100ffffffff07000000041315111e2a0100ffffffff0700000002510127000000000000000000e200000004000000000004129a1901001c00b8170100d271010076fc0000024e040000022f03000002e5000000062c380000f0060000014a010106ac0c000083070000015001010002d807000002dc07000007fa610000d1b800000207010019ed490000bff2000003ea010100025c00000006d069000096080000013301010002490200000734400000a90b000001aa0100023f00000007972d0000cf07000001ae0100000002c20a0000021407000002d1010000063a5a0000cf07000004f80401063a5a0000cf07000004f8040100029301000006ad580000a90b000004a80401000000000001000004000000000004059a1901001c00290d01007372010076fc0000ffffffff49010000024e040000022f03000002f302000002e5f200001dffffffff4901000007ed03000000009fe5f2000001f3011e1b2c0100ffffffff3e01000001f4011114802b0100ffffffff3e010000050c091e8c2b0100ffffffff120000000291011b15aa2b0100ffffffff0300000004401c15aa2b0100ffffffff030000000440320011b62b0100ffffffff030000000293011711b62b0100ffffffff07000000029e011f1fd02b01000024000002b3011b21c32b010030240000069205160021b62b01006024000002b3012b21dd2b01009024000002b7011b00000000000000009700000004000000000004129a1901001c00fec300009274010076fc0000024e040000022f030000023307000007296e00006e07000001170107bd5a00008803000003310100000002c20a000002140700000271000000079c2200003504000002940106f93d0000350c000002cd0401066e4a00000908000002aa030106c1850000fc070000028e050106f4a80000a90b000002a40401000000003a00000004000000000004129a1901001c002fd900004675010076fc0000024e040000022f03000002f3020000197a250000e5f2000001eb010100000000df00000004000000000004059a1901001c004c0401007575010076fc0000ffffffffe4000000024e04000002dd08000002230900001dffffffffe400000007ed03000000009f2309000003f3011fcc2d0100c024000003f4011120932d0100d8240000051d01144f2d0100ffffffff10000000020a1511412d0100ffffffff100000000175041200146f2d0100ffffffff0f00000002180911612d0100ffffffff0f00000001d1041200150e2e0100ffffffff01000000022a09144f2d0100ffffffff0b000000020b1511412d0100ffffffff0b0000000175041200000000000000009100000004000000000004129a1901001c00a5010100e376010076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000000024e04000002dd080000027e070000022309000007649f00002309000002060100000000003400000004000000000004129a1901001c009d0e01007277010076fc0000024e04000002dd08000019a91000002309000001ea01010000003f00000004000000000004129a1901001c001bf40000a177010076fc0000024e04000002dd080000027e07000002170900000724440000170900000111010000000000ce01000004000000000004059a1901001c00ebf90000e077010076fc0000ffffffff0d090000024e04000002dd08000002da0500001dffffffff0d09000007ed03000000009fda05000008f3011f19300100f024000008f40111205f26000010250000076e1114ad250000ffffffff2c00000002680f1172250000ffffffff2c0000000175041200204d260000402500000286121480250000ffffffff0a000000031c141165250000ffffffff0a00000001750412001480250000ffffffff0a000000032a101165250000ffffffff0a000000017504120014a0250000ffffffff060000000335091192250000ffffffff0600000001d104120000146b260000ffffffffd1010000028a0d155b300100ffffffff0500000002581a157d260000ffffffff4b000000026212158f260000ffffffff4f000000025f0e177d2600005825000002600e158f260000ffffffff4b00000002610f00204d260000702500000294101480250000ffffffff0a000000031c141165250000ffffffff0a00000001750412001480250000ffffffff0a000000032a101165250000ffffffff0a000000017504120014a0250000ffffffff060000000335091192250000ffffffff0600000001d104120000000000000000003400000004000000000004129a1901001c009d0e01000e7f010076fc0000024e04000002dd080000190a4c0000da05000001ea01010000003f00000004000000000004129a1901001c006dea00003d7f010076fc0000024e04000002dd080000027e070000029109000007215700009109000001070100000000001f01000004000000000004059a1901001c0053ef00007d7f010076fc0000ffffffffcf020000024e04000002dd08000002430400001dffffffffcf02000007ed03000000009f4304000004f3011f583201008825000004f401112013320100b8250000051d0114cf310100ffffffff1400000002490d11c1310100ffffffff14000000016e041200159a320100ffffffff0500000002690914cf310100ffffffff09000000026b1b11c1310100ffffffff09000000016e04120014ef310100ffffffff01000000026b0a11e1310100ffffffff0100000001cf041200151f320100ffffffff76000000026e09159a320100ffffffff1c00000002630d151f320100ffffffff7600000002640d151f320100ffffffff76000000025e2e000000000000009d00000004000000000004129a1901001c0061cb00004c82010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000000024e04000002dd080000027e070000024304000007d613000043040000023f01070e940000eb05000002330100000000003400000004000000000004129a1901001c009d0e0100d982010076fc0000024e04000002dd080000199f6600004304000001ea01010000003f00000004000000000004129a1901001c0010ea00000883010076fc0000024e04000002dd080000027e070000021203000007d01b0000120300000152010000000000a100000004000000000004059a1901001c0089e500004683010076fc0000ffffffff2e000000024e04000002ae03000002ee02000002310a00001dffffffff2e00000007ed03000000009f310a000002f3011fde330100e825000002f4011120823301000026000001521815a1330100ffffffff03000000011813001410340100ffffffff010000000152091102340100ffffffff0100000004cf041200000000000000005d00000004000000000004129a1901001c0016c100003984010076fc0000024e04000002ae03000002ee02000002a70300000708950000e70300000114010000000002c20a000002140700000271000000079c22000035040000029401000000006c00000004000000000004129a1901001c005cc00000c384010076fc0000024e04000002ae03000002ee02000019343d0000310a000001ea010100000002c20a0000020aec000002bd02000002bc03000006328f000000ec000002c804010006ef9f0000bc03000002990401000000004002000004000000000004059a1901001c0074dc00004185010076fc0000ffffffff58000000024e040000022f03000002d80700000250f300001dffffffff5800000007ed03000000009f50f3000001f3011ec4360100ffffffff5000000001f4011114b7360100ffffffff500000000469091592360100ffffffff0100000004192e14d7360100ffffffff0700000004191a1574370100ffffffff0700000002af0d001592360100ffffffff01000000041a1b14d7360100ffffffff03000000041a1b1574370100ffffffff0300000002af0d0020e93601001826000004190917943701003026000002ab0d00209f36010048260000041513113b370100ffffffff01000000023a01181148370100ffffffff04000000023a012a0020e93601006026000004151317943701007826000002ab0d001555370100ffffffff0100000004161b1555370100ffffffff0100000004171b1428370100ffffffff030000000413151181370100ffffffff0300000002510127001508370100ffffffff010000000412151428370100ffffffff050000000412151181370100ffffffff0500000002510127001508370100ffffffff070000000411301428370100ffffffff050000000411151181370100ffffffff05000000025101270015fb360100ffffffff09000000041030202837010090260000041015111b370100ffffffff0100000002510138111b370100ffffffff010000000251011a1181370100ffffffff03000000025101270015fb360100ffffffff0b00000004101500000000000000003c01000004000000000004129a1901001c00b81701008186010076fc0000024e040000022f030000028901000006956500009608000001330101066c21000085080000013901010002d807000002dc07000007d11600007cb900000207010019b679000050f3000003eb01010002f900000007356d0000cf07000001ae010002710000000715140000a90b000001aa010002c70100000631460000380600000130010106c93200009608000001330101000234020000068d3a0000f0060000014a01010657a8000083070000015001010002020200000622a70000f0060000014a0101065728000090080000014d01010622a70000f0060000014a010100000002c20a00000214070000027100000006d9b20000cf07000004e4040106d9b20000cf07000004e4040100023f00000006eb450000a90b000004a40401000000007d01000004000000000004059a1901001c00a7ca00002387010076fc0000ffffffff55010000024e040000022f03000002d807000002130600001dffffffff5501000004ed00059f1306000001f3011e77390100ffffffff1d01000001f40111146a390100ffffffff1d0100000388091553390100ffffffff070000000323101753390100a8260000032325148a390100ffffffff2c00000003252015c7390100ffffffff2c00000002af0d0020a8390100c0260000032d1e21d4390100e0260000025401220020a839010000270000032e1e21d43901002027000002540122001496390100ffffffff06000000032f2015e1390100ffffffff0600000002c30d0020a83901004027000003271e21d439010060270000025401220020a83901008027000003281e21d4390100a027000002540122001496390100ffffffff0600000003292015e1390100ffffffff0600000002c30d0014a8390100ffffffff2500000003331e11d4390100ffffffff2500000002540122000000000000000000c800000004000000000004129a1901001c00b81701006988010076fc0000024e040000022f0300000271000000073baf00000b06000001a2010002d80700000235060000077e5f00005fb800000222010019436700001306000003ea01010002a80200000783a60000cf07000001ae01077b9b0000990b000001c2010002bd010000063c360000880700000153010100000002c20a0000021407000002a802000006a6490000cf07000004e4040106a6490000cf07000004e4040106c06e0000990b000004f00501000000007000000004000000000004059a1901001c0073c100000b89010076fc0000ffffffffd9000000024e040000027a0700000260e900001dffffffffd900000007ed03000000009f60e90000020d021e9a3a0100ffffffffd8000000020e0211158e3a0100ffffffffd800000001ba090000000000004000000004000000000004129a1901001c003bf20000a189010076fc0000024e040000027a07000007ed78000008bb0000016c0119f5a5000060e90000020502010000003b02000004000000000004059a1901001c00ca140100e289010076fc0000fffffffff7040000024e04000002dd08000002610c00001dfffffffff704000004ed00039f610c000001f3011e423e0100ffffffffc604000001f4011114eb3d0100ffffffffc6040000061d0114df3d0100ffffffff3900000003310e14293d0100ffffffff09000000031019111b3d0100ffffffff09000000026e04120014293d0100ffffffff0500000003151a111b3d0100ffffffff05000000026e0412000014df3d0100ffffffff3900000003320e14293d0100ffffffff09000000031019111b3d0100ffffffff09000000026e04120014293d0100ffffffff0500000003151a111b3d0100ffffffff05000000026e0412000014df3d0100ffffffff3900000003330e14293d0100ffffffff09000000031019111b3d0100ffffffff09000000026e04120014293d0100ffffffff0500000003151a111b3d0100ffffffff05000000026e0412000014f73d0100ffffffff1700000003431e15623d0100ffffffff170000000322190015753d0100ffffffff0a000000036e1317823d0100c027000003722115753d0100ffffffff09000000037424158f3d0100ffffffff0600000003741314bb3d0100ffffffff0900000003762011ae3d0100ffffffff090000000780051b00159c3d0100ffffffff06000000038411159c3d0100ffffffff0a00000003801120093e0100d827000003c00514493d0100ffffffff01000000052009113b3d0100ffffffff0100000002cf04120000000000000000002d01000004000000000004129a1901001c001d060100248e010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc030000019904010000021407000002a802000006a6490000cf07000003e4040100023f00000006eb450000a90b000003a4040106aa480000250c000003530601069a9a0000350c000003cd0401078d340000350400000394010002d101000006da570000350c000004d004010642750000ff080000047f0501000000024e04000002dd080000027e07000002610c000007818b0000a10a0000020d01073b470000610c0000022c01074e550000d80700000221010002fb06000007dfa60000fb06000005020100000000003400000004000000000004129a1901001c009d0e0100e08e010076fc0000024e04000002dd0800001998810000610c000001ea01010000005f00000004000000000004059a1901001c006f0c01000f8f010076fc0000ffffffff0a000000024e04000002dd080000029a0900001dffffffff0a00000007ed03000000009f9a09000002f30111dd3e0100ffffffff0900000002f4011100000000003400000004000000000004129a1901001c009d0e0100638f010076fc0000024e04000002dd0800001963a200009a09000001ea0101000000cd00000004000000000004059a1901001c0035030100928f010076fc0000ffffffffbe010000024e04000002dd080000020efd00001dffffffffbe01000007ed03000000009f0efd000002f3011f74400100f027000002f4011120f03f010048280000061d011422400100ffffffff090000000138151114400100ffffffff09000000036e041200153b400100ffffffff01000000013c0d15b6400100ffffffff01000000016c0e1422400100ffffffff09000000013a151114400100ffffffff09000000036e041200000000000000008a00000004000000000004129a1901001c0000db00001192010076fc0000024e04000002dd080000027e070000020efd000007354800000efd00000134010000000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000267040100065e820000b40300000251040100000214070000027100000006f93d0000350c000003cd0401000000003400000004000000000004129a1901001c009d0e0100b192010076fc0000024e04000002dd08000019ff6700000efd000001ea01010000003f00000004000000000004129a1901001c00e8dd0000e092010076fc0000024e04000002dd080000027e07000002390500000765b200003905000001070100000000006301000004000000000004059a1901001c00d4f800001e93010076fc0000ffffffff57000000024e040000022f030000029a03000002abf200001dffffffff5700000007ed03000000009fabf2000001f3011e6d420100ffffffff3b00000001f401111460420100ffffffff3b000000027b0915aa420100ffffffff05000000023c491480420100ffffffff09000000023c2e14bd420100ffffffff0900000005b70d11ca420100ffffffff08000000069205160000148c420100ffffffff05000000023c1114d7420100ffffffff05000000059f3111e4420100ffffffff0400000006b3051600001502430100ffffffff03000000023c11148c420100ffffffff09000000023d1114d7420100ffffffff09000000059f3111e4420100ffffffff0900000006b305160000148c420100ffffffff0900000002370d14d7420100ffffffff09000000059f3111e4420100ffffffff0800000006b3051600000000000000000000e200000004000000000004129a1901001c005ae700007394010076fc0000024e040000022f030000029a03000002ae050000072b61000054b800000134010019ce3b0000abf2000002ea010100027100000007fc120000fc07000004b6010737b4000087050000049e0100000002c20a00000214070000027100000006f93d0000350c000003cd040100023f000000060a0e0000fc070000038e050106ebaf00000908000003aa030106aa2000009305000003af050106b7350000a005000003da0301000002310400000269030000024c01000006023900007b050000050f01010000000000a100000004000000000004059a1901001c003cee00006695010076fc0000ffffffff45000000024e04000002ae03000002ee02000002630900001dffffffff4500000007ed03000000009f6309000002f3011f47440100a028000002f4011120eb430100b8280000014d18150a440100ffffffff05000000010c13001479440100ffffffff01000000014d09116b440100ffffffff0100000004d1041200000000000000005d00000004000000000004129a1901001c0016c100006096010076fc0000024e04000002ae03000002ee02000002a70300000798780000180400000108010000000002c20a000002140700000271000000079c22000035040000029401000000006c00000004000000000004129a1901001c005cc00000ea96010076fc0000024e04000002ae03000002ee02000019af2e00006309000001ea010100000002c20a0000023103010002bd02000002bc03000006600f00002703010002ca04010006454b0000bc03000002a00401000000007b01000004000000000004059a1901001c0072e400006897010076fc0000ffffffffa8050000024e04000002dd08000002380900001dffffffffa805000004ed00019f3809000001f3011edd460100ffffffff7b05000001f40111143b460100ffffffff7b050000081d011491460100ffffffff130000000221141183460100ffffffff130000000375041200201f470100d0280000024c121451470100ffffffff01000000043d0d1143470100ffffffff0100000003d104120000154d460100ffffffff4b00000002510e155f460100ffffffff4f000000024e0e174d460100e8280000024f0e155f460100ffffffff4b00000002500f154d460100ffffffff4b000000024214154d460100ffffffff4b000000024014154d460100ffffffff4b000000023714154d460100ffffffff4b000000023514155f460100ffffffff4f000000022d1015a5460100ffffffff0f000000090312155f460100ffffffff4f000000023e14155f460100ffffffff4b00000002331500000000000000a800000004000000000004129a1901001c0078cc0000229c010076fc0000024e04000002dd080000027e070000023809000007927b000038090000011c010002ac09000007a1640000ac09000003180100023609000007c4970000360900000418010000000002c20a0000023103010002bd02000002b403000006c677000019030100026e0401000658300000b403000002460401000002660500000679100000abbb0000052506010000003400000004000000000004129a1901001c009d0e0100189d010076fc0000024e04000002dd08000019026000003809000001ea01010000007100000004000000000004129a1901001c0045bf0000479d010076fc0000024e04000002dd080000027e070000027c0a000007477c00007c0a00000123010000000002c20a0000023103010002bd02000002bc03000006600f00002703010002ca04010006454b0000bc03000002a00401000000004d00000004000000000004059a1901001c005ddb0000d99d010076fc0000eb7100000e000000024e040000027a07000002f905000024eb7100000e00000007ed03000000009ff905000001990100000000f301000004000000000004059a1901001c00a5d200001e9e010076fc0000ffffffff06010000024e040000022f03000002d80700000214e900001dffffffff0601000007ed03000000009f14e9000001f3011ee3490100fffffffff400000001f4011114d7490100ffffffffec00000002771814f5490100ffffffff9600000002501c15084a0100ffffffff0100000002231017084a010000290000022325141a4a0100ffffffff0d00000002252015714a0100ffffffff0d00000003af0d0014454a0100ffffffff0a000000022d1e11384a0100ffffffff0100000003540133117e4a0100ffffffff09000000035401220014454a0100ffffffff07000000022e1e117e4a0100ffffffff07000000035401220015524a0100ffffffff01000000022f3714264a0100ffffffff0f000000022f20158b4a0100ffffffff0f00000003c30d0014454a0100ffffffff0a00000002271e11384a0100ffffffff0100000003540133117e4a0100ffffffff09000000035401220014454a0100ffffffff0700000002281e117e4a0100ffffffff07000000035401220015524a0100ffffffff0100000002293714264a0100ffffffff0f000000022920158b4a0100ffffffff0f00000003c30d0014454a0100ffffffff0b00000002331e117e4a0100ffffffff0b0000000354012200000000000000000000ee00000004000000000004129a1901001c00b8170100db9f010076fc0000024e040000022f03000002d80700000760a30000a7070000013e0119d32f000014e9000002ea01010235060000077187000072b90000012201000002f900000007c9a100000b06000003a2010002710000000782ad0000cf07000003ae0107741a0000990b000003c2010002020200000611b20000f50600000347010106c35c00008807000003530101065728000090080000034d010100000002c20a00000214070000023f00000006ee3f0000cf07000004e4040106ee3f0000cf07000004e404010638970000990b000004f00501000000004401000004000000000004059a1901001c0090c900007da0010076fc0000ffffffff53020000024e04000002dd08000002890600001dffffffff5302000007ed03000000009f8906000006f3011fd44c01001829000006f4011120754c010040290000071d0114634c0100ffffffff1c000000034d0a1e244c0100ffffffff140000000257010811164c0100ffffffff14000000016e0412000015164d0100ffffffff0300000003641015814c0100ffffffff7800000003660915594d0100ffffffff0d000000036509148e4c0100ffffffff0b000000036e0d1e244c0100ffffffff090000000269011511164c0100ffffffff09000000016e0412001e444c0100ffffffff01000000026c010511364c0100ffffffff0100000001cf0412000015814c0100ffffffff7600000003601c159b4c0100ffffffff0300000003520e00000000000000c400000004000000000004129a1901001c0017dc000009a3010076fc000002c20a0000020aec000002bd02000002b403000006baaa0000e7eb00000167040100065e820000b40300000151040102bc03000006328f000000ec000001c804010006ef9f0000bc03000001990401000000024e04000002dd080000027e0700000662490000370b000002560101028906000007f1b500008906000003460107bd920000d3050000033a010006f0960000f70a000002680101065b5b0000090b0000025b0101000000003400000004000000000004129a1901001c009d0e0100a0a3010076fc0000024e04000002dd08000019d13e00008906000001ea01010000003f00000004000000000004129a1901001c00e8dd0000cfa3010076fc0000024e04000002dd080000027e07000002390500000765b200003905000001070100000000003f00000004000000000004129a1901001c0010ea00000da4010076fc0000024e04000002dd080000027e070000021203000007d01b00001203000001520100000000009900000004000000000004059a1901001c00b9c000004ba4010076fc0000ffffffff0d000000024e04000002ae030000024e0c00000291f300001dffffffff0d00000007ed03000000009f91f3000003f3011e784e0100ffffffff0c00000003f4011114664e0100ffffffff0600000002081514474e0100ffffffff0600000004951111394e0100ffffffff0600000001d104120000000000000000007e00000004000000000004129a1901001c00d5f400000aa5010076fc000002c20a0000023103010002bd02000002bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000000024e04000002ae03000002bd0200000790af00006a05000002940100024e0c000019f9b3000091f3000003ea0101000000005f00000004000000000004059a1901001c00101401009ca5010076fc0000ffffffff0e000000024e040000027a07000002000600001dffffffff0e00000007ed03000000009f0006000002990111591d0000ffffffff0d000000029a011100000000006b00000004000000000004059a1901001c00580b0100f7a5010076fc0000ffffffff59000000024e040000022f03000002f80200000220f300001dffffffff5900000004ed00029f20f3000001f3011fc64f01006829000001f4011117884f010080290000039401000000000000003a00000004000000000004129a1901001c002fd900008ba6010076fc0000024e040000022f03000002f302000019414e000016f3000001eb0101000000003a00000004000000000004129a1901001c00e7c20000baa6010076fc0000024e040000022f03000002f80200001909ac000020f3000001eb0101000000001301000004000000000004059a1901001c0002020100e9a6010076fc0000ffffffff3a010000024e04000002dd080000029a0a00001dffffffff3a01000007ed03000000009f9a0a000003f3011fab5101009829000003f401112072510100b8290000041d01142e510100ffffffff170000000220191120510100ffffffff170000000175041200142e510100ffffffff0a000000023c101120510100ffffffff0a0000000175041200144e510100ffffffff060000000249091140510100ffffffff0600000001d1041200142e510100ffffffff0400000002550d1120510100ffffffff040000000175041200144e510100ffffffff0800000002570a1140510100ffffffff0800000001d1041200000000000000009100000004000000000004129a1901001c00bc020100c3a8010076fc000002c20a0000023103010002bd02000002b403000006c677000019030100016e0401000658300000b40300000146040102bc03000006600f00002703010001ca04010006454b0000bc03000001a00401000000024e04000002dd080000027e070000029a0a000007ee1400009a0a0000021d0100000000003400000004000000000004129a1901001c009d0e010052a9010076fc0000024e04000002dd080000193d9900009a0a000001ea01010000007701000004000000000004059a1901001c0082ed000081a9010076fc0000eb02010041010000024e040000027a07000002c60200001deb0201004101000007ed03000000009fc60200000199011e661d0000f602010031010000019a011114a41c0000f602010031010000061a09149e1d0000040301000500000002673111911d000004030100050000000772051b0014b51c00000a0301003500000002680915711e00000a03010005000000021f1d15fd1d00002e0301000700000002231715711e000035030100010000000222190014c11c0000650301005800000002720d157e1e0000b3030100010000000252250014cd1c0000c30301002c00000002700d158b1e0000da03010007000000023023158b1e0000e103010001000000022f250015fd1d0000f20301000700000002751315fd1d0000500301000d000000026a1314b51c0000080401001f00000002780515fd1d0000180401000700000002231715711e00001f040100010000000222190000000000000000ed00000004000000000004059a1901001c005be30000cdab010076fc0000ffffffff66000000024e04000002ae03000002ee02000002710900001dffffffff6600000007ed03000000009f7109000001f3011eac540100ffffffff5200000001f401111461540100ffffffff07000000037b381154540100ffffffff0700000005f10513001427550100ffffffff40000000037b1815ea540100ffffffff03000000031f131403550100ffffffff0900000003201311f6540100ffffffff09000000069205160000148d540100ffffffff01000000037b09117f540100ffffffff0100000004d1041200000000000000009200000004000000000004129a1901001c005cc00000faac010076fc000002c20a0000021407000002d1010000065c4300003e05000001d6050106332400004b05000001f005010000023103010002bd02000002bc03000006600f00002703010003ca04010006454b0000bc03000003a00401000000024e04000002ae03000002ee02000019809400007109000002ea0101000000007700000004000000000004129a1901001c0016c1000089ad010076fc000002c20a00000214070000023f000000078d3400003504000001940106ebaf00000908000001aa0301060a0e0000fc070000018e0501000000024e04000002ae03000002ee02000002a703000007295f000008040000021e0100000000008900000004000000000004059a1901001c0046da000013ae010076fc0000ffffffffbd010000024e040000027a07000002adc400001dffffffffbd01000007ed03000000009fadc40000010d021ef9550100ffffffffb5010000010e021114ed550100ffffffffb501000002a909171c560100d829000002634f171c560100002a0000025d4f000000000000006500000004000000000004129a1901001c003bf20000e3af010076fc0000024e040000027a070000070d3c0000f5b900000155011946ac0000adc4000002050201000002c20a00000266050000026005000002bd02000006caa00000a2b9000003ab030100000000007600000004000000000004059a1901001c008ed1000079b0010076fc0000ffffffff76000000024e040000022f03000002350400000214fd00001dffffffff7600000007ed03000000009f14fd000001f3011ee1560100ffffffff6300000001f4011115d5560100ffffffff6300000002920d000000000000004600000004000000000004129a1901001c009c120100f7b0010076fc0000024e040000022f0300000235040000075d9500004d030000010701197512000014fd000001eb010100000000e300000004000000000004059a1901001c0079c8000026b1010076fc0000ffffffff3d000000024e040000022f030000021e0c0000024c0600001dffffffff3d00000007ed03000000009f4c06000002f3011fa5580100202a000002f401112098580100402a00000346092086580100602a0000032b132074580100782a0000031c1d2051580100902a000003051b1706580100a82a000005c30d00145d580100ffffffff070000000306121513580100ffffffff0700000005ab0d0000001531580100ffffffff01000000032c0f1531580100ffffffff0d000000032c270000000000000000d900000004000000000004129a1901001c00cc0c01005fb2010076fc000002c20a00000214070000023f0000000638970000990b000001f0050106eb450000a90b000001a4040100000201060000026004000002c400000006489e00006603000005ed050100000000024e040000022f030000027100000007741a0000990b000002c2010715140000a90b000002aa0100021e0c000002520c000007e00e00009ab800000304010002530c0000073a9b0000dbb80000031b0100025d060000074b160000bbb80000032a010019f92b00004c06000004ea0101000000005f00000004000000000004059a1901001c00a2bf00004fb3010076fc0000ffffffff0c000000024e04000002dd08000002d80200001dffffffff0c00000007ed03000000009fd802000002f3011141590100ffffffff0b00000002f4011100000000003400000004000000000004129a1901001c009d0e0100a3b3010076fc0000024e04000002dd08000019003d0000d802000001ea01010000008e01000004000000000004059a1901001c00f9120100d2b3010076fc0000fffffffff4010000024e040000022f03000002d807000002240600001dfffffffff401000004ed00059f2406000001f3011e1c5b0100ffffffffac01000001f4011114105b0100ffffffffac010000028409142e5b0100ffffffff1901000002501c15415b0100ffffffff0300000002231017415b0100c02a000002232514535b0100ffffffff2c00000002252015905b0100ffffffff2c00000003af0d0020715b0100d82a0000022d1e219d5b0100f82a0000035401220020715b0100182b0000022e1e219d5b0100382b00000354012200145f5b0100ffffffff06000000022f2015aa5b0100ffffffff0600000003c30d0020715b0100582b000002271e219d5b0100782b0000035401220020715b0100982b000002281e219d5b0100b82b00000354012200145f5b0100ffffffff0600000002292015aa5b0100ffffffff0600000003c30d0014715b0100ffffffff2500000002331e119d5b0100ffffffff250000000354012200000000000000000000d400000004000000000004129a1901001c00b81701004eb5010076fc0000024e040000022f03000002d8070000072c12000092070000013e0119986800002406000002ea01010235060000077e5f00005fb8000001220100000271000000073baf00000b06000003a2010002a80200000783a60000cf07000003ae01077b9b0000990b000003c2010002bd010000063c360000880700000353010100000002c20a0000021407000002a802000006a6490000cf07000004e4040106a6490000cf07000004e4040106c06e0000990b000004f00501000000007000000004000000000004059a1901001c009e0a0100f0b5010076fc0000ffffffffd7000000024e040000027a07000002b0fd00001dffffffffd700000007ed03000000009fb0fd0000020d021e635c0100ffffffffd6000000020e021115575c0100ffffffffd600000001b6090000000000004000000004000000000004129a1901001c003bf2000086b6010076fc0000024e040000027a070000079b4d00001db90000016c0119216a0000b0fd000002050201000000a100000004000000000004059a1901001c00eb000100c7b6010076fc0000ffffffff50000000024e04000002ae03000002ee020000024b0a00001dffffffff5000000007ed03000000009f4b0a000002f3011fa65d0100d82b000002f40111204a5d0100f02b0000015c1815695d0100ffffffff05000000012c130014d85d0100ffffffff01000000015c0911ca5d0100ffffffff0100000004cf041200000000000000005d00000004000000000004129a1901001c0016c10000c3b7010076fc0000024e04000002ae03000002ee02000002a703000007af870000d70300000128010000000002c20a00000214070000023f000000078d34000035040000029401000000006c00000004000000000004129a1901001c005cc000004db8010076fc0000024e04000002ae03000002ee02000019247d00004b0a000001ea010100000002c20a0000020aec000002bd02000002bc03000006328f000000ec000002c804010006ef9f0000bc03000002990401000000006f00000004000000000004059a1901001c00a6f60000cbb8010076fc0000ffffffff5b000000024e040000022f03000002f80200000233f300001dffffffff5b00000004ed00029f33f3000001f3011f895e0100082c000001f4011115c75e0100ffffffff0d000000029d01000000000000003a00000004000000000004129a1901001c00e7c2000053b9010076fc0000024e040000022f03000002f8020000195b78000033f3000001eb0101000000003a00000004000000000004129a1901001c002fd9000082b9010076fc0000024e040000022f03000002f302000019b97d000029f3000001eb010100000000da00000004000000000004019a1901001c0064190100b1b90100ee0b000000000000882c000002c20a000002f508000026ca2f00000900000007ed03000000009f0c170000e00b000001890233030000275c530000ca0a00000159010028277700000900000007ed03000000009f6d600000330300000156030b500000002777000009000000017a090000024603000029387200000900000007ed03000000009fb7520000790b0000027006030002f10a000002bd02000002e70a000003cb0100000900000007ed03000000009f4d7f0000ea07000003490e000000000000be590d2e64656275675f72616e6765733b0200004f02000080020000890200009f020000ac02000000000000000000003b0200004f02000080020000890200009f020000ac02000000000000000000003b0200004f02000087020000890200009f020000ac0200000000000000000000900400009d040000a2040000a80400000000000000000000740300007e03000084030000860300000000000000000000740300007e03000084030000860300000000000000000000740300007e030000840300008603000000000000000000000506000011060000500600005c0600007406000080060000b6060000c206000000000000000000000506000011060000500600005c0600007406000080060000b6060000c206000000000000000000000506000011060000500600005c0600007406000080060000b6060000c2060000000000000000000002060000050600004d060000500600006a06000074060000ab060000b1060000000000000000000002060000050600004d060000500600006a06000074060000ab060000b1060000000000000000000002060000050600004d060000500600006a06000074060000000000000000000002060000050600004d060000500600006a0600007406000000000000000000008a0700008c070000a8070000c007000000000000000000008a0700008c070000a8070000c007000000000000000000008a0700008c070000a8070000c007000000000000000000008a0700008c070000ad070000af070000b9070000c007000000000000000000003008000032080000b9080000d708000000000000000000003008000032080000b9080000d708000000000000000000003008000032080000c8080000d70800000000000000000000b9080000c0080000c3080000c8080000000000000000000095080000970800009f080000a808000000000000000000000a0b0000120b0000400b00006d0b0000a10b0000b60b0000bd0b0000cd0b000000000000000000000a0b0000120b0000400b00006d0b0000a10b0000b60b0000bd0b0000cd0b000000000000000000000a0b0000120b0000400b00006d0b0000a10b0000b60b0000bd0b0000cd0b000000000000000000000a0b0000120b0000440b00006d0b0000c40b0000cd0b00000000000000000000a10b0000b60b0000bd0b0000c40b00000000000000000000930c0000990c0000a00c0000a20c00000000000000000000930c0000990c0000a00c0000a20c00000000000000000000930c0000990c0000a00c0000a20c00000000000000000000bf0c0000c60c0000c90c0000dc0c00000000000000000000e50c0000220d0000300d0000580d0000830d00009a0d00000000000000000000e50c0000220d0000300d0000580d0000830d00009a0d00000000000000000000e50c0000220d0000300d0000580d0000830d00009a0d00000000000000000000e50c0000190d0000300d0000580d0000910d00009a0d00000000000000000000b20d0000ef0d0000fd0d0000250e0000500e0000650e00000000000000000000b20d0000ef0d0000fd0d0000250e0000500e0000650e00000000000000000000b20d0000ef0d0000fd0d0000250e0000500e0000650e00000000000000000000b20d0000e60d0000fd0d0000250e00005e0e0000650e00000000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000d101000097040000af040000b4040000000000000000000082060000870600008c060000e50600000000000000000000090000004e000000550000007f0000000000000000000000090000005c000000670000008500000000000000000000000700000046000000510000006d0000000000000000000000070000005e000000690000008a00000000000000000000000900000034000000360000005700000000000000000000000900000042000000480000005d00000000000000000000000700000032000000380000004b00000000000000000000000700000040000000460000005e0000000000000000000000000000000c000000100000001900000028000000390000000000000000000000000000000c000000100000001900000028000000390000000000000000000000000000000c000000100000001900000024000000350000000000000000000000000000000c00000010000000190000002400000035000000000000000000000009000000440000004d00000064000000000000000000000009000000440000004d000000640000000000000000000000170000001c000000270000002a00000000000000000000001c0000001d000000380000003b00000000000000000000001c0000001d000000380000003b00000000000000000000001c0000001d000000380000003b00000000000000000000002200000027000000400000004400000000000000000000004d00000057000000620000006400000000000000000000000700000040000000480000006f00000000000000000000000700000040000000480000006f000000000000000000000000000000fd0000000201000007010000000000000000000000000000fd0000000201000007010000000000000000000009000000350000003a00000044000000000000000000000009000000350000003a000000440000000000000000000000280000002c00000031000000350000000000000000000000000000005c00000074000000a9010000ab010000bc010000ca010000d00100000000000000000000000000005c00000074000000a9010000ab010000bc010000ca010000d00100000000000000000000000000000a0000000f0000001f00000024000000330000000000000000000000000000000a0000000f0000001f00000024000000330000000000000000000000000000000a0000000f0000001f0000000000000000000000000000000a0000000f0000001f0000000000000000000000000000000a000000160000001b0000000000000000000000000000000a000000160000001b0000000000000000000000690000004a0100004b01000066010000000000000000000070010000db010000dc010000e201000000000000000000008d000000920000001c010000210100000000000000000000c1000000d5000000e8000000f4000000120100001b0100000000000000000000c1000000d5000000e8000000f4000000120100001b0100000000000000000000d5000000e8000000f4000000fb000000010100000f0100000000000000000000d5000000e8000000f4000000fb000000010100000f010000000000000000000023010000360100004901000054010000720100007b010000000000000000000023010000360100004901000054010000720100007b01000000000000000000003601000049010000540100005b010000610100006f01000000000000000000003601000049010000540100005b010000610100006f01000000000000000000000000000058000000680000006b0000006f000000d9000000e60000007a01000000000000000000000000000058000000680000006b0000006f000000d9000000e60000007a0100000000000000000000030100000a0100005001000073010000000000000000000000000000740000007e000000840000008d0000000e010000000000000000000000000000740000007e000000840000008d0000000e01000000000000000000001a0000006a00000086000000ce00000000000000000000003a0000006a00000086000000cb000000000000000000000040000000470000005a0000005f0000006a0000006f0000007a0000007f000000000000000000000000000000a1000000aa000000e8000000f200000002010000070100001f010000000000000000000000000000a1000000aa000000e8000000f200000002010000070100001f0100000000000000000000000000003e0000004a000000b1000000be0000005e010000640100009e010000af010000220200000000000000000000000000003e0000004a000000b1000000be0000005e010000640100009e010000af010000220200000000000000000000140000005700000064000000720000000000000000000000140000001f00000033000000490000000000000000000000000000003900000045000000a6000000af000000350100003b0100006e0100007b010000e10100000000000000000000000000003900000045000000a6000000af000000350100003b0100006e0100007b010000e101000000000000000000007000000092000000240100005401000075020000c70300000000000000000000b7000000eb000000550100006d02000000000000000000000000000062010000690100006d01000074010000770100007e010000dc010000e6010000eb010000f4010000f6010000ff010000010200000b0200000d0200000f02000012020000140200002e0200003a0200004b02000000000000000000000000000062010000690100006d01000074010000770100007e010000dc010000e6010000eb010000f4010000f6010000ff010000010200000b0200000d0200000f02000012020000140200002e0200003a0200004b0200000000000000000000f1000000f600000004010000080100000000000000000000150100001d0100001e0100002001000000000000000000002001000025010000330100003c0100000000000000000000b2010000bb010000bc010000bd010000c2010000c501000000000000000000002d0200002e020000480200004b02000000000000000000002d0200002e020000480200004b02000000000000000000002d0200002e020000480200004b020000000000000000000009000000410000004c00000051000000000000000000000009000000410000004c0000005100000000000000000000001c0000001d000000340000003d00000000000000000000001c0000001d000000340000003d00000000000000000000001c0000001d000000340000003d000000000000000000000033000000340000003d00000041000000000000000000000000000000a5000000a7000000ae000000000000000000000000000000a5000000a7000000ae0000000000000000000000000000000a000000150000002500000030000000420000000000000000000000000000000a000000150000002500000030000000420000000000000000000000000000000a00000015000000250000000000000000000000000000000a00000015000000250000000000000000000000000000000a0000001d000000250000000000000000000000000000000a0000001e000000230000000000000000000000000000000a0000001e0000002300000000000000000000001a00000005010000110100001c01000000000000000000001a00000005010000110100001c0100000000000000000000000000000b0000001f00000054000000000000000000000040000000470000005a0000005f0000006a0000006f0000007a0000007f000000000000000000000018000000dd000000e9000000f4000000000000000000000018000000dd000000e9000000f400000000000000000000000a0000004b0000004d00000075000000810000009d00000000000000000000000a0000004b0000004d00000075000000810000009d00000000000000000000000700000040000000480000006f00000000000000000000000700000040000000480000006f0000000000000000000000000000000d000000240000003b000000000000000000000039000000400000004c000000510000005c000000610000006c000000710000000000000000000000e7000000ee000000200100002c01000040010000450100005001000055010000000000000000000040000000470000005a0000005f0000006a0000006f0000007a0000007f00000000000000000000000e000000a8000000bb000000ef000000fc000000fe0000000401000007010000170100002a010000300100008d0100009a010000b0010000b2010000bc010000d00100000c040000150400001c04000024040000350400003e04000047040000510400005404000056040000590400006a040000ba040000c3040000ca040000d8040000080500001105000018050000260500002106000030060000c406000000000000000000000e000000a8000000bb000000ef000000fc000000fe0000000401000007010000170100002a010000300100008d0100009a010000b0010000b2010000bc010000d00100000c040000150400001c04000024040000350400003e04000047040000510400005404000056040000590400006a040000ba040000c3040000ca040000d8040000080500001105000018050000260500002106000030060000c406000000000000000000004702000048020000590200006202000000000000000000004702000048020000590200006202000000000000000000004702000048020000590200006202000000000000000000000e0000006400000066000000920000009e000000be00000000000000000000000e0000006400000066000000920000009e000000be0000000000000000000000160000004b000000560000008900000098000000bd000000ca000000010100000e010000470200000000000000000000160000004b000000560000008900000098000000bd000000ca000000010100000e010000470200000000000000000000ae000000bd000000ec000000f40000000000000000000000180000007f0000008c000000950000000000000000000000160000004a000000610000009c0000000000000000000000160000004a000000610000009b0000000000000000000000000000000c00000014000000350000000000000000000000000000000c0000001400000035000000000000000000000000000000190000001b0000003300000039000000b6000000c8000000cb000000da000000f3000000f500000040010000420100004501000053010000550100006201000076010000000000000000000000000000190000001b0000003300000039000000b6000000c8000000cb000000da000000f3000000f500000040010000420100004501000053010000550100006201000076010000000000000000000000000000080000000d0000001b000000000000000000000000000000080000000d0000001b000000000000000000000000000000080000000d0000001b00000000000000000000000000000008000000140000001900000000000000000000000000000008000000140000001900000000000000000000001a000000be000000c5000000cd00000000000000000000001a01000023010000290100002c01000000000000000000003e010000470100004b0100005001000000000000000000007a010000800100008c010000a601000000000000000000007a010000800100008c010000a60100000000000000000000380200004102000043020000440200004c0200004f0200000000000000000000e5020000ea020000080300000d0300000000000000000000e5020000ea020000080300000d0300000000000000000000e5020000ea020000080300000d030000000000000000000009000000430000004c00000053000000000000000000000009000000430000004c0000005300000000000000000000001e0000001f000000370000003a00000000000000000000001e0000001f000000370000003a00000000000000000000001e0000001f000000370000003a000000000000000000000024000000290000003f000000430000000000000000000000140000006500000071000000740000008b00000048010000620100007601000086010000260200000000000000000000140000006500000071000000740000008b0000004801000062010000760100008601000026020000000000000000000014000000400000004d0000005b0000000000000000000000140000001f00000033000000400000000000000000000000b7000000b8000000ec000000ed000000010100000201000016010000170100002b0100002c0100000000000000000000b7000000b8000000ec000000ed000000010100000201000016010000170100002b0100002c0100000000000000000000b8000000c8000000ed000000fd000000020100001201000017010000270100002c0100003c0100000000000000000000c9000000d0000000fe000000010100001301000016010000280100002b0100003d0100004401000000000000000000007100000052010000530100006e010000000000000000000072020000770200007c020000be02000000000000000000001d0400002204000027040000690400000000000000000000100000004f0000005b0000005e0000007100000006010000180100002801000034010000910100000000000000000000100000004f0000005b0000005e000000710000000601000018010000280100003401000091010000000000000000000009000000350000003e00000051000000000000000000000009000000350000003e0000005100000000000000000000001e00000026000000310000003500000000000000000000003e0000004a0000004f00000051000000000000000000000007000000160000001c000000fd0000000000000000000000070000000d0000001c000000f500000000000000000000005b0000005c000000a0000000a10000000000000000000000000000000d000000210000005b00000000000000000000008300000084000000b0000000b1000000c5000000c6000000da000000db000000ef000000f000000000000000000000008300000084000000b0000000b1000000c5000000c6000000da000000db000000ef000000f000000000000000000000008400000094000000b1000000c1000000c6000000d6000000db000000eb000000f0000000000100000000000000000000950000009c000000c2000000c5000000d7000000da000000ec000000ef00000001010000080100000000000000000000000000000a00000015000000250000000000000000000000000000000a00000015000000250000000000000000000000000000000a00000015000000250000000000000000000000000000000a0000001d000000250000000000000000000000000000000a0000001e000000230000000000000000000000000000000a0000001e00000023000000000000000000000000000000780000008500000093030000a503000061090000000000000000000000000000660000006e00000078000000850000008b030000a50300004c0900005f0900006109000000000000000000002b02000030020000350200008e0200000000000000000000150000002801000063020000a90200000000000000000000370000004000000041000000760000000000000000000000370000004000000041000000460000000000000000000000fa00000028010000630200006902000000000000000000001a0000006a00000081000000ca00000000000000000000003a0000006a00000081000000bf00000000000000000000003000000037000000430000004800000053000000580000006300000068000000000000000000000009000000580000005c00000083000000000000000000000009000000580000005c0000008300000000000000000000004b00000052000000650000006a000000750000007a000000850000008a00000000000000000000006d010000720100007d010000820100008d0100009201000000000000000000001e0000003f0000004c0000005700000000000000000000001a0000001c0000002e0000003700000000000000000000001a0000001c0000002e0000003700000000000000000000001b0000001c0000002e000000370000000000000000000000000000001e020000240200004a0200005d0200006f0200007b0200007d02000086020000880200008a0200008d020000970200009a020000a4020000a6020000b0020000b20200000000000000000000000000001e020000240200004a0200005d0200006f0200007b0200007d02000086020000880200008a0200008d020000970200009a020000a4020000a6020000b0020000b20200000000000000000000ab000000ac0000005d0200005e0200000000000000000000e7000000f1000000fa000000fe00000000000000000000008a01000092010000980100009e0100000000000000000000ab000000b2000000b8000000c10000000000000000000000ed000000ee000000f5000000f800000018030000190300006a0300006d03000000000000000000000e010000170100001d010000200100000000000000000000320100003b0100003f0100004201000000000000000000007f010000840100009a010000a1010000b7010000be01000000000000000000008d01000092010000aa010000af010000c7010000cc0100000000000000000000280200002e02000041020000500200000000000000000000280200002e02000041020000500200000000000000000000160000004a000000660000009f0000000000000000000000160000004a000000660000009e00000000000000000000001800000077000000840000008d000000000000000000000009000000580000005c0000008b000000000000000000000009000000580000005c0000008b000000000000000000000000000000740000007e000000840000008d00000028010000000000000000000000000000740000007e000000840000008d0000002801000000000000000000000000000094000000a2000000e7000000f80000003b0100004501000055010000680100006a01000000000000000000000000000094000000a2000000e7000000f80000003b0100004501000055010000680100006a01000000000000000000004b00000052000000650000006a000000750000007a000000850000008a00000000000000000000006d010000720100007d010000820100008d010000920100000000000000000000000000005c00000074000000c2010000c4010000d5010000e3010000e90100000000000000000000000000005c00000074000000c2010000c4010000d5010000e3010000e90100000000000000000000000000000a00000015000000250000002a0000003c0000000000000000000000000000000a00000015000000250000002a0000003c0000000000000000000000000000000a00000015000000250000000000000000000000000000000a00000015000000250000000000000000000000000000000a0000001d000000250000000000000000000000000000000a0000001e000000230000000000000000000000000000000a0000001e00000023000000000000000000000012000000400000004c0000004f0000005f0000007400000080000000ac000000ba00000030010000000000000000000012000000400000004c0000004f0000005f0000007400000080000000ac000000ba0000003001000000000000000000001e000000560000006300000071000000000000000000000009000000350000003e00000044000000000000000000000009000000350000003e0000004400000000000000000000001e00000026000000310000003500000000000000000000000d0000003b000000400000006a00000000000000000000000d0000003b000000400000006a0000000000000000000000340000003b000000470000005e0000000000000000000000340000003b000000470000005e0000000000000000000000af000000b0000000dc000000dd000000f1000000f200000006010000070100001b0100001c0100000000000000000000af000000b0000000dc000000dd000000f1000000f200000006010000070100001b0100001c0100000000000000000000b0000000c0000000dd000000ed000000f20000000201000007010000170100001c0100002c0100000000000000000000c1000000c8000000ee000000f10000000301000006010000180100001b0100002d01000034010000000000000000000000000000aa000000b3000000e0000000000000000000000000000000aa000000b3000000e0000000000000000000000000000000710300007a030000bc040000c80400000c090000000000000000000000000000690300007a030000b6040000b9040000bc040000c8040000f70800000a0900000c090000000000000000000072000000db00000017040000ac0400000000000000000000190200001e02000023020000650200000000000000000000e8020000510300007a03000011040000000000000000000000000000070100001d010000cc010000e10100008e02000098020000b1020000cc020000ce020000000000000000000000000000070100001d010000cc010000e10100008e02000098020000b1020000cc020000ce02000000000000000000000000000009000000170000002d00000000000000000000000000000009000000170000002c000000000000000000000013000000170000005600000057000000000000000000000013000000170000005600000057000000000000000000000030000000360000004100000045000000000000000000000045000000460000005200000056000000000000000000000045000000460000005200000056000000000000000000000020000000210000002c0000003000000000000000000000001e00000023000000ad000000b2000000000000000000000052000000660000007900000085000000a3000000ac000000000000000000000052000000660000007900000085000000a3000000ac00000000000000000000006600000079000000850000008c00000092000000a000000000000000000000006600000079000000850000008c00000092000000a00000000000000000000000b4000000c7000000da000000e5000000030100000c0100000000000000000000b4000000c7000000da000000e5000000030100000c0100000000000000000000c7000000da000000e5000000ec000000f2000000000100000000000000000000c7000000da000000e5000000ec000000f2000000000100000000000000000000a9020000b0020000b9020000be0200000000000000000000be03000030040000cf040000e80400000000000000000000000000001b0000001d000000410000004700000074000000a3000000e7000000f600000012010000140100006a0100006c0100006f010000850100008701000098010000ac010000ba010000bd0100000000000000000000000000001b0000001d000000410000004700000074000000a3000000e7000000f600000012010000140100006a0100006c0100006f010000850100008701000098010000ac010000ba010000bd0100000000000000000000000000000900000010000000440000000000000000000000000000000900000010000000430000000000000000000000750000005601000057010000720100000000000000000000250200002a0200002f0200007102000000000000000000005700000058000000a2000000a3000000000000000000000000000000e3010000ee010000140200001e020000370200004702000052020000000000000000000000000000e3010000ee010000140200001e020000370200004702000052020000000000000000000014000000400000004d000000580000000000000000000000140000001f0000003300000040000000000000000000000000000000740000007e000000840000008d00000039010000000000000000000000000000740000007e000000840000008d0000003901000000000000000000004b00000052000000650000006a000000750000007a000000850000008a00000000000000000000006d010000720100007d010000820100008d010000920100000000000000000000000000000a0000000f0000001f0000002a000000390000000000000000000000000000000a0000000f0000001f0000002a000000390000000000000000000000000000000a0000000f0000001f0000000000000000000000000000000a0000000f0000001f0000000000000000000000000000000a000000160000001b0000000000000000000000000000000a000000160000001b00000000000000000000008d000000920000001c010000210100000000000000000000c1000000d5000000e8000000f4000000120100001b0100000000000000000000c1000000d5000000e8000000f4000000120100001b0100000000000000000000d5000000e8000000f4000000fb000000010100000f0100000000000000000000d5000000e8000000f4000000fb000000010100000f010000000000000000000023010000360100004901000054010000720100007b010000000000000000000023010000360100004901000054010000720100007b01000000000000000000003601000049010000540100005b010000610100006f01000000000000000000003601000049010000540100005b010000610100006f0100000000000000000000000000000b000000160000004f0000000000000000000000000000000b000000160000004e00000000000000000000001e0000003f0000004c0000005a0000000000000000000000147400001d740000950201009e0201000000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000ca2f0000d32f000038720000417200002777000030770000cb010000d4010000000000000000000000e6b3040a2e64656275675f7374727b696d706c233239397d007b696d706c2338397d007b696d706c2337397d007b696d706c2335397d007b696d706c23313333397d007b696d706c2331397d007b696d706c23397d007b696d706c2338387d007b696d706c2333387d007b696d706c2331387d007b696d706c233130387d007b696d706c23387d007b696d706c233238377d007b696d706c23313737377d007b696d706c23313437377d007b696d706c2333377d007b696d706c2332377d007b696d706c2331377d007b696d706c23377d007b696d706c2337367d007b696d706c23313336367d007b696d706c233133367d007b696d706c2332367d007b696d706c2331367d007b696d706c23367d007b696d706c23313336357d007b696d706c233336357d007b696d706c233333357d007b696d706c233133357d007b696d706c2332357d007b696d706c2331357d007b696d706c23357d007b696d706c2338347d007b696d706c2337347d007b696d706c233336347d007b696d706c2336347d007b696d706c2335347d007b696d706c2332347d007b696d706c2331347d007b696d706c23347d007b696d706c2338337d007b696d706c233836337d007b696d706c23313735337d007b696d706c2332337d007b696d706c2331337d007b696d706c23337d007b696d706c2338327d007b696d706c2337327d007b696d706c2336327d007b696d706c2333327d007b696d706c2332327d007b696d706c23327d007b696d706c2334317d007b696d706c233133317d007b696d706c2333317d007b696d706c2332317d007b696d706c233931317d007b696d706c2331317d007b696d706c23313530317d007b696d706c23317d007b696d706c2339307d007b696d706c2336307d007b696d706c23313334307d007b696d706c233133307d007b696d706c2333307d007b696d706c233132307d007b696d706c2331307d007b696d706c233330307d007b696d706c23307d006d656d63707900696e64657800666d617800706f770063617061636974795f6f766572666c6f7700636f6e760075646976007364697600636865636b65645f646976007265760063617374007371727400636f6e766572740063627274006879706f74006e6f740072696e740070616e69635f6e6f756e77696e645f666d7400726573756c74007573697a655f6c656164696e675f7a65726f735f64656661756c7400626974006774007536345f6e6f726d616c697a6174696f6e5f7368696674007533325f6e6f726d616c697a6174696f6e5f7368696674006d656d73657400696e745f746f5f666c6f617400746f5f626974730066726f6d5f6269747300753132385f746f5f6636345f62697473007536345f746f5f6636345f62697473007533325f746f5f6636345f6269747300753132385f746f5f6633325f62697473007536345f746f5f6633325f62697473007533325f746f5f6633325f62697473006164617074657273006f7073006c656164696e675f7a65726f730061636f73006b5f636f7300636f6d70696c65725f6275696c74696e7300696d706c73007365745f6279746573007365745f62797465735f627974657300636f6d706172655f627974657300636f70795f666f72776172645f627974657300636f70795f6261636b776172645f6279746573007365745f62797465735f776f72647300636f70795f666f72776172645f6d6973616c69676e65645f776f72647300636f70795f6261636b776172645f6d6973616c69676e65645f776f72647300636f70795f666f72776172645f616c69676e65645f776f72647300636f70795f6261636b776172645f616c69676e65645f776f7264730066616273007772617070696e675f61627300756e7369676e65645f616273006d75745f70747200636f6e73745f7074720066726f6d5f7265707200626974786f72006269746f7200666c6f6f72006c6f676963616c5f736872007772617070696e675f73687200756e636865636b65645f736872004c73687200417368720069746572005f5f616c6c6f635f6572726f725f68616e646c657200636f6d705f72006c67616d6d61665f72006c67616d6d615f72007371006571006c64657870006d656d636d700062636d70006c6f6731700069735f7a65726f005f5f727573745f753132385f6d756c6f005f5f727573745f693132385f6d756c6f00554d756c6f005f5f727573745f753132385f6164646f005f5f727573745f693132385f6164646f004164646f005f5f727573745f753132385f7375626f005f5f727573745f693132385f7375626f005375626f006173696e006b5f73696e00666d696e00636f70797369676e006269746f725f61737369676e007368725f61737369676e006d756c5f61737369676e0073686c5f61737369676e00626974616e645f61737369676e006164645f61737369676e007374726c656e007a65726f5f776964656e007363616c626e006174616e006b5f74616e0069735f6e616e006e756d006d656469756d0066726f6d005f5f72646c5f6f6f6d006664696d007370656369616c697a65645f6469765f72656d00753132385f6469765f72656d007536345f62795f7536345f6469765f72656d007533325f62795f7533325f6469765f72656d006d656d006c69626d007a65726f5f776964656e5f6d756c00693132385f6f766572666c6f77696e675f6d756c006936345f6f766572666c6f77696e675f6d756c006933325f6f766572666c6f77696e675f6d756c007772617070696e675f6d756c004d756c0066726f6d5f626f6f6c006c656e5f6d69736d617463685f6661696c007772617070696e675f73686c00756e636865636b65645f73686c004173686c005f5f66697873667469005f5f666978756e7373667469005f5f66697864667469005f5f666978756e7364667469005f5f66697873667369005f5f666978756e7373667369005f5f66697864667369005f5f666978756e73646673690073696e70690073696e5f70690066726f6d5f6c6f5f686900776964656e5f6869005f5f66697873666469005f5f666978756e7373666469005f5f66697864666469005f5f666978756e736466646900617269746800635f737472696e675f6c656e677468006d61746800636f73680073696e680074616e68006c6f670070616e69636b696e67007772617070696e675f6e656700666d61786600706f7766007371727466006362727466006879706f74660072696e74660061636f7366006b5f636f7366005f5f666c6f617474697366005f5f666c6f6174756e74697366005f5f666c6f617473697366005f5f666c6f6174756e73697366005f5f666c6f617464697366005f5f666c6f6174756e6469736600666162736600666c6f6f7266006c6465787066006c6f67317066006173696e66006b5f73696e6600666d696e6600636f70797369676e66007363616c626e66006174616e66006b5f74616e66006664696d6600636f7368660073696e68660074616e6866006c6f6766006162735f6469666600666d6f646600726f756e6466005f5f666c6f617474696466005f5f666c6f6174756e74696466005f5f666c6f617473696466005f5f666c6f6174756e73696466005f5f666c6f617464696466005f5f666c6f6174756e64696466007472756e6366007467616d6d616600666d6166006578703266006b5f6578706f32660072656d5f70696f3266006174616e3266006c6f673266006578706d3166006c6f67313066006e6f726d616c697a65006d656d6d6f76650052616e6765496e636c757369766500636f7265006e650072756e74696d650072656d5f70696f325f6c617267650072616e676500636f70795f66726f6d5f736c69636500776974685f7365745f6c6f775f776f7264006765745f6c6f775f776f7264007a65726f5f6c6f775f776f726400776974685f7365745f686967685f776f7264006765745f686967685f776f726400636f70795f666f727761726400636f70795f6261636b7761726400666d6f6400726f756e6400657874656e6400626974616e6400756e777261705f6661696c656400666f72776172645f756e636865636b6564006f766572666c6f77696e675f616464007772617070696e675f61646400756e636865636b65645f616464005f5f727573745f693132385f61646400616c6c6f63007472756e630070616e6963007261775f766563002f72757374632f3231636365323164386330313266313463663734643561666464643739356433323436303064616300616464737562006f766572666c6f77696e675f737562007772617070696e675f737562005f5f727573745f693132385f7375620055416464537562007467616d6d6100666d61005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693136244754243133756e636865636b65645f73686c3137686631666438643238306538623363666645005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431347a65726f5f776964656e5f6d756c3137683831376231343434353165363938666645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34315f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f323137683932643630313538663166366537666645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c31396933325f6f766572666c6f77696e675f6d756c3137686566366666353965646365626237666645005f5a4e34395f244c54247573697a65247532302461732475323024636f72652e2e697465722e2e72616e67652e2e53746570244754243137666f72776172645f756e636865636b65643137686431623131323732376233613739656645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f73686c3137683036393737376437626134653235646645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433706f77395f5f706f77696466323137686337616636613537363330663831646645005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137683739363331653761633033633565636645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562375541646453756234756164643137686639323734383731613535626535636645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c395f5f6d756c6f7369343137683231646161373531646361373364626645005f5a4e34636f72653366333232315f244c5424696d706c2475323024663332244754243966726f6d5f62697473313372745f7533325f746f5f6633323137683034303136303565303465633262626645005f5a4e34636f7265336e756d32335f244c5424696d706c24753230247573697a652447542431327772617070696e675f7375623137686332323663313864626236303361626645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356b5f73696e356b5f73696e3137686530323137613331356134623738626645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34666d616634666d61663137686632383834326437613834353734626645005f5a4e34636f7265337074723133726561645f766f6c6174696c653137686534326236323866313032363234626645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366879706f74663137686538616633663331303463643936616645005f5a4e35305f244c542454247532302461732475323024636f72652e2e636f6e766572742e2e496e746f244c542455244754242447542434696e746f3137686366393235396438393631346430396645005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424337375623137683439613435313834646137646266386645005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137686166646535373339393831363966386645005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137686437646533353664343264636165386645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c3230693132385f6f766572666c6f77696e675f6d756c3137683366353438316434313434303362386645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431336c656164696e675f7a65726f73385f5f636c7a7369323137683634306163383239646165646139386645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978736673693137686264393931363331646166623932386645005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137683134306535366533356365333661376645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7031305f5f756e6f72646466323137683230323337626366306231663937376645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433616464385f5f6164646466333137686339356433303765616634353266366645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3461636f733461636f733137683433396563663330306662613964366645005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6164643137686362303537336334653064663564366645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468377467616d6d61663137683430323536663032386530656332356645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f7368723137686164653339666366366435363266346645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366c6f67313066366c6f673130663137683635366266613863613863616263346645005f5a4e34355f244c5424753332247532302461732475323024636f72652e2e6f70732e2e61726974682e2e53756224475424337375623137686632353730653036616661393733336645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756236416464537562337375623137686133626236336437633438393632336645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347364697631315f5f6469766d6f647369343137683334333566616562633931303638326645005f5a4e34355f244c5424693136247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137686461373038303732626130323434326645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562344164646f346164646f3137683963633937386538353333633539316645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f73686c3137686163343564323462633136363233316645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c334d756c336d756c3137683035653137653439613061313331316645005f5a4e34636f72653970616e69636b696e673570616e69633137686132363034303436646637343566306645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562344164646f346164646f3137683862633130376131396231663466666545005f5a4e35616c6c6f63377261775f766563313763617061636974795f6f766572666c6f773137683865373138363039656564613362666545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d386c67616d6d615f72386c67616d6d615f723137683638653835633239376139323361666545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617436657874656e6431335f5f657874656e6473666466323137686339663262313464353534353737666545005f5a4e36375f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e43617374496e746f244c5424693332244754242447542434636173743137683036356233626535356562323931656545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356b5f74616e31337a65726f5f6c6f775f776f72643137683138386138633363633864366165646545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231355f5f727573745f693132385f6164643137683561333838313463653833383937646545005f5a4e35315f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137686364366235326565643839383264636545005f5a4e36305f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e53687241737369676e244c5424753332244754242447542431307368725f61737369676e3137683965383361316337393765653463636545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3472696e743472696e743137683834363862393038323930336539636545005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247531362447542431327772617070696e675f73686c3137683065343863343432313665646465626545005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431356f766572666c6f77696e675f6164643137686236316131643136326538323739616545005f5a4e34365f244c5424693332247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e642447542436626974616e643137686233336538373336346139313230616545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733132636f70795f666f72776172643239636f70795f666f72776172645f6d6973616c69676e65645f776f7264733137683963646234336366396331623834396545005f5a4e34355f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137683739393230623262333635316366386545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d347371727434737172743137686538626131376433376535656461386545005f5a4e3130375f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765496e636c7573697665244c54245424475424247532302461732475323024636f72652e2e697465722e2e72616e67652e2e52616e6765496e636c75736976654974657261746f72496d706c244754243134737065635f6e6578745f6261636b3137686463303030646138363264653634386545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756236416464537562336164643137686565623231653761383661653264376545005f5a4e34636f7265336e756d32325f244c5424696d706c247532302469313238244754243132756e7369676e65645f6162733137683636653136613935623734343632376545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d70375f5f65717366323137686534626264613361383936613731376545005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024693132382447542431327772617070696e675f6162733137686562366538373132346139643366366545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356c6f673170356c6f6731703137686634636133303336303634346335366545005f5a4e34636f726534697465723572616e67653130315f244c5424696d706c2475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f722475323024666f722475323024636f72652e2e6f70732e2e72616e67652e2e52616e6765244c5424412447542424475424346e6578743137686262653934316439386365363033366545005f5a4e35315f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e74244754243769735f7a65726f3137686638323938323562613265656331366545005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137686636623263633333386261353537356545005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424336164643137686531303636316130626165386535356545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e646973663137683535616539333465363764626366336545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c35554d756c6f346d756c6f3137683864653065313035323334393963316545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356c64657870356c646578703137683731366130363161306364356239306545005f5a4e34636f7265336e756d32325f244c5424696d706c247532302475313238244754243133756e636865636b65645f73686c3137686634663162393361613566356635306545005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f7368723137683638386564363035366135643536666445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6d6f646469333137683764613436646164623830656364656445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173686c346173686c3137683533376466636239353738303764656445005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137686661626135383136353033333335646445005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246931362447542431327772617070696e675f73686c3137683164653865366263396161323464636445005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137683532346665373466653165633561636445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346664696d3137683431663464363336646632613935636445005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431336c656164696e675f7a65726f733137686331303164623364616261323334636445005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431336c656164696e675f7a65726f733137686562643036366231353365326563626445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356664696d66356664696d663137683034366236373632663333356363626445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d636d703137683430396261373137316535306132626445005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137686563656662653864353830336335616445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f617368727469333137683831343665613830336132323064396445005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693634244754243132756e7369676e65645f6162733137686330663338633461393035626536396445005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f722475323024753332244754243265713137683662386133363666313961616634396445005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424337375623137683733346131353266316563376262386445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33326d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633137683837353232653764336633376461386445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756469767369333137683938613930663832346438653437386445005f5a4e34365f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974586f722447542436626974786f723137686435356332386636303761313334386445005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693332244754243133756e636865636b65645f73686c3137683537346130353331356266346438376445005f5a4e34636f726534697465723572616e67653131305f244c5424696d706c2475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f722475323024666f722475323024636f72652e2e6f70732e2e72616e67652e2e52616e6765496e636c7573697665244c5424412447542424475424346e6578743137683765313564383733663938326136366445005f5a4e35345f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e536872244c54247533322447542424475424337368723137683336623935316133323032323861356445005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137683738316466636234356561616365346445005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683439613565373265376532613463336445005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424326c6f3137686461303239336465323866653938336445005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137686365646634356533363665303664326445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174357472756e63357472756e633137683233353534663863313034356161326445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231365f5f727573745f693132385f7375626f3137683163303037306162373331356438326445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35666d61786635666d6178663137683637626665323061366637386530326445005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683561636f73663137686138376238373936396638323861306445005f5a4e34355f244c5424693634247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137686530643030653861623166323761306445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33636f7333636f733137683833386230343439613863633637666345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73646673693137683166623962633432363765373936666345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3474616e683474616e683137683165393331313864376232323636656345005f5a4e35315f244c5424663332247532302461732475323024636f72652e2e6f70732e2e61726974682e2e4d756c41737369676e2447542431306d756c5f61737369676e3137686636333365326263643234356366646345005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753332244754243131636865636b65645f6469763137683530613261363632633563313166646345005f5a4e34395f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e53687241737369676e2447542431307368725f61737369676e3137686563323139663139656635616238646345005f5a4e34355f244c5424753136247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137683331313262313435316361353065636345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231365f5f727573745f693132385f6164646f3137683966633664636337616537343937636345005f5a4e35355f244c5424663634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f617424475424396e6f726d616c697a653137686535316232323531383466353537636345005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f72247532302475333224475424326e653137683031366564343361343139366461626345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34666d617834666d61783137686132353733366164303230306664616345005f5a4e35315f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137686463306631346232303038313537616345005f5a4e35315f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6d756c3137683232326237623330663533613731616345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356b5f74616e356b5f74616e3137686262613062316362633061326430616345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6469767369333137683632646338343830636234613436396345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344c736872346c7368723137686638383538613564636230656532396345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e736973663137686338353039653763373462356338386345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34636f736834636f73683137683965636134613832356631653236376345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d386c67616d6d615f723673696e5f70693137683263353061623261303664303736366345005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137683565333235363365343365626533366345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c395f5f6d756c6f6469343137686233626438373838653263323830366345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231365f5f727573745f753132385f6164646f3137686634343030396638373436383766356345005f5a4e34636f72653366333232315f244c5424696d706c24753230246633322447542437746f5f626974733137686334376337643561646563326337356345005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424366f66667365743137686231393336356563343936363265346345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f313137686132386362663630613737646564346345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35636f73686635636f7368663137683736666466326562303630666463346345005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834666d6f643137686462333338653065396433306561346345005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834636272743137683739646437663432316139656461346345005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f722475323024693634244754243265713137683830306436343736333933363630346345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33706f7733706f773137683030323935373263656361386566336345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6469767469333137683530343963323338343030633662336345005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e74244754243268693137683332306330386563326634353838336345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433616464385f5f6164647366333137683561636164373633313131323937336345005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024693634244754243267653137683339626266366263316436613338326345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756469767469333137683338333762303838383762326466316345005f5a4e34365f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974586f722447542436626974786f723137683261346231353633323762616465316345005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753634244754243131636865636b65645f6469763137683337303930356130373738643331316345005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431336c656164696e675f7a65726f733137683932623966643037396662393230306345005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f7368723137683762333934316536313361376633666245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347564697631325f5f756469766d6f647369343137683332306165313362333934666264656245005f5a4e35315f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7241737369676e2447542431326269746f725f61737369676e3137686338383734656266376664353864656245005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753634244754243133756e636865636b65645f7368723137683238356462396139353039613465646245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433646976385f5f6469767366333137686536643066653139626165653232636245005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542439776964656e5f6d756c3137686239303530316439306663363766626245005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683473696e663137686137343837613563323138306435626245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356b5f636f73356b5f636f733137686534386463336461613865306636616245005f5a4e34636f7265336f70733572616e6765323552616e6765496e636c7573697665244c5424496478244754243869735f656d7074793137683364326564653862666535656465396245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356c6f673130356c6f6731303137686566613361373034353764666263396245005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683938376430316463356563316634396245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73736664693137683132353234396232356636623064386245005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431307a65726f5f776964656e3137683931633463376365653664393864376245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3373696e3373696e3137683436363537336562663964636262376245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f617368727369333137683865343030353030613161306237376245005f5a4e34355f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137683637373466633466303862383133376245005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f6162733137683662316661343831623662353535366245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d336c6f67336c6f673137686139366662616134313363633231366245005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683472696e743137686439316166316462393830366466356245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f6d706172655f62797465733137686264356662363737633834316365356245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347564697631325f5f756469766d6f646469343137683365313939313335613365306464356245005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431307a65726f5f776964656e3137683831656535663634346164306163356245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3872656d5f70696f323872656d5f70696f32366d656469756d3137686539383130623862356632393734356245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356174616e663137686465346565393664313262333164346245005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024753634244754243267743137683966346164663431666539306435346245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6c7368727469333137686236353430303435356162626231346245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33326d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633137686530396261653637353462393062336245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231365f5f727573745f753132385f7375626f3137683530383964323134636530376330326245005f5a4e35315f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137683536323736343633613066363931316245005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746833706f773137683836643462383038653464346662666145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e736964663137683738313039333135643666643539666145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356879706f74356879706f743137683330653966613264343561303430666145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433706f77395f5f706f77697366323137683566303637613034373965383665656145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f7375623137686232386164616333306162326336656145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356664696d663137683436653337613663323435353736656145005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431336c656164696e675f7a65726f733137683665626539613661336262333536656145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346173696e3137686363666163633238643130666334656145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366c6f67317066366c6f673170663137686638343463653365303132396238646145005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f722475323024753634244754243265713137686230393963363833663131343638646145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366174616e3266366174616e32663137683036303739633232353566663235646145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f6d756c3137686161316161356262663665333266636145005f5a4e35325f244c542469313238247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6164643137683562636538663239336639303834636145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33326d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633137683163393532323231386162326364626145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356879706f743137686239626566633863613239366133626145005f5a4e35355f244c5424663332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f617424475424396e6f726d616c697a653137686539373636663435383764613062616145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347364697631315f5f6469766d6f647469343137686161653836643932393965663861616145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356578706d31356578706d313137686334393365393963343630326237616145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f61743136753132385f746f5f6633325f626974733137686231623561633061616538336233616145005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683474616e683137683737316165323134636236346230616145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d31387533325f62795f7533325f6469765f72656d3137686430333766366236303861396264396145005f5a4e34365f244c5424693634247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e642447542436626974616e643137686234636333653634306634386565386145005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683565787032663137683661626130366563303638353765386145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f6162733137686439656334326538376630663339386145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34666d6f6434666d6f643137683836336535353032316465636333386145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174736973663137683738356534303261363838303533386145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3573717274663573717274663137683332626238663062323630613566376145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756236416464537562337375623137686338353864356237303766663463376145005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431336c656164696e675f7a65726f733137686561643332616463393465643431376145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3573696e68663573696e68663137686232613930633830333865333239366145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73646664693137683666386631393462613465656338366145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f70795f6261636b776172643330636f70795f6261636b776172645f6d6973616c69676e65645f776f7264733137686234353662386132386532376338366145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f6164643137686135343438613432653934643734366145005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424326c6f3137683637386265353062303633363031366145005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542439776964656e5f6d756c3137686633626636623962366664613638356145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f70795f6261636b776172643237636f70795f6261636b776172645f616c69676e65645f776f7264733137686136323262366534353066623835356145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33666d6133666d613137686663616565646335383464393134356145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c6f67323137683631303466613531643034646530356145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7031305f5f756e6f72647366323137683564303634313062366162633539346145005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753136244754243133756e636865636b65645f7368723137686130376130663839613265316666336145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356174616e32356174616e323137686431636161346135326538303862336145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468336578703137686162316436323630303737366235326145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431356f766572666c6f77696e675f7375623137686262343264383161343064626266316145005f5a4e34636f7265337074723133726561645f766f6c6174696c653137683461356139366164363765366437316145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346c6f6766346c6f67663137683133643232643435333639616432316145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d31336765745f686967685f776f72643137686530616661613334346531333132316145005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431327772617070696e675f6d756c3137683633633939343633306439343638306145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c385f5f6d756c7469333137683563396233353631623862323430306145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e746973663137683166646537333761353032383466663945005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753332244754243133756e636865636b65645f73686c3137686238396433396437376363653838663945005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693634244754243133756e636865636b65645f73686c3137686437343264636264353462646337663945005f5a4e34636f7265336e756d32335f244c5424696d706c24753230247573697a65244754243133756e636865636b65645f6164643137683533323733353938646563613036663945005f5a4e34636f72653366333232315f244c5424696d706c2475323024663332244754243966726f6d5f626974733137686161623466333339373631626133663945005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562345375626f347375626f3137683536353432643938336230333861653945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366b5f74616e66366b5f74616e663137686437333164636434353938623137653945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468396c67616d6d61665f723137683033636431316638666436663866643945005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024693634244754243267743137683661343839383665383439366539643945005f5a4e35315f244c5424753634247532302461732475323024636f72652e2e6f70732e2e61726974682e2e41646441737369676e2447542431306164645f61737369676e3137686534616434653633356566643737643945005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756d6f646469333137683734353331663232653737346534643945005f5a4e35325f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e6441737369676e244754243133626974616e645f61737369676e3137683834656166343765353963363466633945005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633137683463346439366536303431666163623945005f5a4e35355f244c5424663634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f61742447542434726570723137683835383036303139333163383832623945005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756d6f647369333137683762316337343765363561373766613945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835666d6f64663137686434346462373938613466326537613945005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d376d656d6d6f76653137683139393661336564663130656134613945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356c646578703137683461366130343765613936643633613945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835726f756e643137683537363834653137303932646461393945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d377467616d6d6166377467616d6d61663137683034356637656635326461653137393945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346c6f6732346c6f67323137683161656434303636626633613935393945005f5a4e35315f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137686463366538393937313435326630393945005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d70375f5f67657366323137683033393737353231363531316336383945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834666d61663137686534643732313339336664656465373945005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431376765745f756e636865636b65645f6d75743137686339306339333837363563653965373945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835666d6178663137683137626532666338643736313465373945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356578706d313137686664643637353533383438646662373945005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683337323166393133306331643837373945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3574616e68663574616e68663137683634363533323135633232363363363945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346174616e3137683235313661356137386136333432363945005f5a4e36375f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e43617374496e746f244c5424753634244754242447542434636173743137683831653339643439613666636465353945005f5a4e34636f726536726573756c743133756e777261705f6661696c65643137686562383039383263353535346432343945005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d70375f5f65716466323137683235383830376535623030616264333945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834636f73683137683364623635313561306435343535333945005f5a4e34636f72653970616e69636b696e67313870616e69635f6e6f756e77696e645f666d743772756e74696d653137683930343238343030393566306132333945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d386b5f6578706f3266386b5f6578706f32663137683062646530313161363930303765323945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346664696d346664696d3137683034303637333338353331356564323945005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753332244754243133756e636865636b65645f7368723137683262366165616138646437383439313945005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433737562385f5f7375626466333137683163303966353962346634623836313945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356174616e66356174616e663137683738613834386630313564396263303945005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f72247532302475333224475424326c743137683234383139633633363663663361303945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33666d61336d756c3137686439383635386432633934326339303945005f5a4e35315f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7241737369676e2447542431326269746f725f61737369676e3137683862623466313532316538333639303945005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431327772617070696e675f7375623137683364376239623335336565396132303945005f5a4e34335f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e53687224475424337368723137683566663735323235336131353432303945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3138776974685f7365745f686967685f776f72643137683566623439636237353336613130303945005f5a4e36305f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e53686c41737369676e244c54246933322447542424475424313073686c5f61737369676e3137683362623839333031666165613966663845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d36666c6f6f726636666c6f6f72663137683464393733323735323264383365663845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366578706d31663137686237656437333239326462616164663845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346174616e346174616e3137683461636530336265376464636635663845005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f7375623137683232343266393034646632393538653845005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693332244754243132756e7369676e65645f6162733137686361316365323866353833653636653845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d38636f70797369676e38636f70797369676e3137683638323361376564393564393434653845005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024693132382447542431327772617070696e675f6164643137683234386439643061653130343666643845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633137683433666436386335666236363236643845005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f722475323024693332244754243265713137683839333330653762386466386361633845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3473696e663473696e663137683762316163623066393763646634633845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d313472656d5f70696f325f6c61726765313472656d5f70696f325f6c617267653137683139336164383035616261616133633845005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f6d756c3137683665343237653837323335616530633845005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d70375f5f67656466323137683565633465356131343637323338623845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d32337533325f6e6f726d616c697a6174696f6e5f73686966743137683963303664616332383335306634623845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3561636f73663561636f73663137686333306261313633663164646664613845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d31326765745f6c6f775f776f72643137683664613738313130616430333435613845005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835636f7368663137686137613139623138363863383263393845005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024753332244754243267653137686566306333613662303433633262393845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d7365743137686436343361623236303534623735393845005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f61743136753132385f746f5f6636345f626974733137683063373164373061316437303832393845005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542439776964656e5f6d756c3137683634323236666635313462376336383845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f383137683861343134353530396461326139373845005f5a4e39385f244c5424636f72652e2e697465722e2e61646170746572732e2e7265762e2e526576244c54244924475424247532302461732475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f7224475424346e6578743137686664656439353934316535343933373845005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424366f66667365743137683935316534353333343964323133363845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c73397365745f62797465733137686463323438303266383065336135353845005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693332244754243133756e636865636b65645f7368723137686234376430373333383333333835353845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d32337536345f6e6f726d616c697a6174696f6e5f73686966743137683965623361313737623662663330353845005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f617431357536345f746f5f6633325f626974733137683866633738336161383231343761343845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c35554d756c6f346d756c6f3137683364623334636233346638393138343845005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f7368723137683835613064666361363734303531343845005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834636f73663137683137353135373737663934613636333845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d6370793137686134343566666431376366663436333845005f5a4e34636f72653970616e69636b696e67313870616e69635f6e6f756e77696e645f666d743137683665353038316137353038383037323845005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73736674693137686666303035663335353831623533323845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3474616e663474616e663137683332326564323934363031356132313845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344c736872346c7368723137686463626534646237323362646538303845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633137683063386437383334353261633137303845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562345375626f347375626f3137683766393534333132633138613033303845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c334d756c336d756c3137683830343239326366303336313430663745005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173686c346173686c3137683438613665353961353037323464653745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174646964663137683365346336636336646564313339653745005f5a4e34636f72653366363432315f244c5424696d706c2475323024663634244754243669735f6e616e3137686334333262326165666564656135653745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7033636d703137686639616364646130336561356632653745005f5a4e35325f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137683462303538336239656134373832653745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978646673693137683164333132396535656437366534643745005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137683565613036376265613231656463623745005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542435776964656e3137683439306463383830343230393062623745005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835666d696e663137683536613265373931343031363536623745005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366b5f73696e66366b5f73696e663137683463383837613164393037393532393745005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3566616273663566616273663137686231316539336665613934316562373745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7035756e6f72643137683435623936656662326462633039353745005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c6f67663137683066643664646665653533333966333745005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e74244754243268693137683235326436336536333737383663333745005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f72247532302475363424475424326e653137683738366537373034623832663135333745005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733132636f70795f666f72776172643138636f70795f666f72776172645f62797465733137683034636164353861666264656439323745005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683461636f733137686430613065323166633065373833313745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336d756c336d756c3137686339363430366164353966383532313745005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683572696e74663137686364613830653836623865303661303745005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c31365f5f727573745f753132385f6d756c6f3137686234343162313634303637653436303745005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683573696e68663137683139316333313639663961373333303745005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347364697631315f5f6469766d6f646469343137683736323437636230623436323663663645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356174616e323137686232396137633538646633663063653645005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024753634244754243267653137683763383164323861636663663635653645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c31365f5f727573745f693132385f6d756c6f3137683431346666613730306332366234653645005f5a4e3130375f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765496e636c7573697665244c54245424475424247532302461732475323024636f72652e2e697465722e2e72616e67652e2e52616e6765496e636c75736976654974657261746f72496d706c2447542439737065635f6e6578743137686132343538346338373137613464643645005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024693332244754243267743137683863383138623538323335383338643645005f5a4e35325f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e74244754243268693137686166313465666561343063393435643645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f323137683130633038373861616132333934643645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366174616e32663137686361656634646566346166363733643645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33326d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633137683033633335316664663961653039633645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978736664693137686637623634313739623963616234633645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d31387536345f62795f7536345f6469765f72656d3137683361333966613934326163646633633645005f5a4e34636f726533636d7035696d706c7335365f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f7224753230247531323824475424326c743137683531363063343239373663393966623645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356173696e663137683461303564616366383639353665393645005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424366f66667365743137686233623838303766396665616364393645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336469763564697636343137686232633764386564356630323439393645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d3462636d703137683261333435616461613065326334393645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3374616e3374616e3137686663396565363462643161393330383645005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6d756c3137686337316530383561303964656536373645005f5a4e34335f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e53686c244754243373686c3137683735333039366232646135653635373645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c73397365745f627974657331357365745f62797465735f62797465733137686464343935303935656539346137363645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d31317533325f6469765f72656d3137683631383233653362383562333966353645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f6164643137686138376362383137353162363563353645005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431356f766572666c6f77696e675f6164643137683632316335326330346534333263353645005f5a4e35355f244c5424663332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f61742447542434726570723137686135633161386131636166366236353645005f5a4e34636f72653366333232315f244c5424696d706c2475323024663332244754243669735f6e616e3137686461313563353631633762343934353645005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683474616e663137683061623962646330366562306564343645005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431376765745f756e636865636b65645f6d75743137686534663737653131616639636263333645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367467616d6d6131733137686261626664623836393766613938333645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733132636f70795f666f72776172643236636f70795f666f72776172645f616c69676e65645f776f7264733137683933616362313235396536363639323645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174746973663137683835363664643164376439363935323645005f5a4e34365f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e642447542436626974616e643137683830306433393632643566363831323645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468336c6f673137683161333538343665616661656561313645005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683374616e3137686534613461343166303639333532313645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f7375623137683365373566633737336437343263663545005f5a4e36305f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e53686c41737369676e244c54246933322447542424475424313073686c5f61737369676e3137683936373930363864646439623237663545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d39636f70797369676e6639636f70797369676e663137686363346337323061636636393237663545005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024753332244754243267743137683664383339306530326331363733663545005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424337375623137683337346633353063333235366334653545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6173686c7469333137683837366638336161623836613336643545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34706f776634706f77663137683033306633353961646335646438633545005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137686433393538376235643063653530633545005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431376765745f756e636865636b65645f6d75743137683865336439343164373535386239623545005f5a4e35315f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137683731343234653462323165633033613545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344c736872346c7368723137686566316333366133656132613161393545005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f6e65673137683839376362663539343830343139393545005f5a4e35315f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137686465643662323963356435643234393545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35666d6f646635666d6f64663137683662636336363439386336333632393545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231355f5f727573745f693132385f7375623137683066316363333830343366636365383545005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137686139336530333632623665363762373545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f323137683833666461623966333963663361373545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433706f7733706f773137683033316437666164656666653565363545005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431376765745f756e636865636b65645f6d75743137683434363738623235393635653065363545005f5a4e34636f72653366333232315f244c5424696d706c24753230246633322447542437746f5f62697473313372745f6633325f746f5f7533323137683963383764366331313161656634363545005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246931362447542431327772617070696e675f7368723137686465366163343061306231373334363545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6469766469333137683038653531383939346130323831363545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f617431357533325f746f5f6633325f626974733137683932626164663162393462393964353545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633137683339343965323062633539363839353545005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683563627274663137683637323035353561313239323639353545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366578706d3166366578706d31663137683332356534373766613731353635343545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c385f5f6d756c6469333137683864353338613838326132313335343545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f70795f6261636b776172643139636f70795f6261636b776172645f62797465733137686339363134363965323835666233343545005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137683762316534373830663565626539333545005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834657870323137686466653561336262623732326138333545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336d756c336d756c3137683830626138653739663062653138333545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d3132753132385f6469765f72656d3137683138646430633333333735343765323545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d367374726c656e3137683062373264363532313263393435323545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34636f736634636f73663137683133616538666165626534313466313545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173687234617368723137683834633234623233646235366461313545005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746836726f756e64663137683730323439366366316639313136313545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3972656d5f70696f32663972656d5f70696f32663137686466393239386462396563376437303545005f5a4e35315f244c5424663634247532302461732475323024636f72652e2e6f70732e2e61726974682e2e4d756c41737369676e2447542431306d756c5f61737369676e3137686330323539633635313832643535303545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336469763564697633323137686635663632636230613330383433303545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e646964663137683031373537633262643235633130303545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633137683962343062346563303930316239653445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756469766469333137683330333832663962373038666433653445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173686c346173686c3137683764386365323661653439633833653445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356173696e66356173696e663137683639646232313265333838376437643445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433706f7733706f773137683565333234366235393863636434643445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f313137683535383063346233386365643862633445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f70795f6261636b776172643137686266613735366537383564396666623445005f5a4e34636f726535736c69636532395f244c5424696d706c24753230242475356224542475356424244754243135636f70795f66726f6d5f736c69636531376c656e5f6d69736d617463685f6661696c3137686461313038636438343839366638623445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174357472756e6331325f5f7472756e6364667366323137686132313435646162373739346135623445005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683238316330666631636163376231623445005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137683338316563333439356330333861613445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433646976385f5f6469766466333137686664613461373363376666393232613445005f5a4e35315f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e7424475424386162735f646966663137686164366463393239326565306562393445005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f72247532302469333224475424326c743137686539306366623661393236363061393445005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746833666d613137683834663236303430626530663134393445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366c6f673170663137683633623839613465353734323764383445005f5a4e35315f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137683930356537323531663765303532373445005f5a4e34636f72653366363432315f244c5424696d706c24753230246636342447542437746f5f626974733137683031326165633062316231306266363445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34666d696e34666d696e3137686337653337383235306639626238363445005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424326c6f3137683935326666386264633930323032363445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6c7368726469333137683535303830633862363464656165353445005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424336164643137686634623161656262326330666235353445005f5a4e34636f726537636f6e76657274336e756d36345f244c5424696d706c2475323024636f72652e2e636f6e766572742e2e46726f6d244c5424693332244754242475323024666f722475323024663634244754243466726f6d3137683562623639656336636637663434353445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33657870336578703137686438313064656566626465386466343445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978646664693137686335366339623034333033313864343445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6c7368727369333137683663653761346561393635633564343445005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e74244754243966726f6d5f626f6f6c3137686632313338396461303733323162343445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367467616d6d613573696e70693137683939653265383930363162316636343445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d357472756e63357472756e633137686134646631306665313032356332343445005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f73686c3137683736386366356162376636336232343445005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746833636f733137683036393764323466643630363530333445005f5a4e34355f244c5424693332247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137686438376362663231623932633438323445005f5a4e35315f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137683466623338666431333762326637313445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d31317536345f6469765f72656d3137683238303764343733633337313930313445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3561636f736631723137683633643063373366303139643465303445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c35554d756c6f346d756c6f3137683632363566626261653863636563303445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f617431357536345f746f5f6636345f626974733137683034356533383934373236393663303445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f617368726469333137686530633736333935636361623237303445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35726f756e6435726f756e643137683937646433356361613062373434303445005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f72247532302475363424475424326c743137683539343162343339653431653833303445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633137686337353231363935373539336162663345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6d6f647469333137686132393265383630343331663661653345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f61743364697635646976363431306e65676174655f7536343137686665316233393566396164383338653345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733135635f737472696e675f6c656e6774683137686565656336623433663838623064633345005f5a4e35345f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e53686c244c542475333224475424244754243373686c3137686339333132373639653665303735633345005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247531362447542431327772617070696e675f7368723137683430343535333831643861386133633345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633137683431346632636562626332363333633345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7035756e6f72643137686435646137326330393436376232633345005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6164643137683762323438666663356234386563623345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33666d61396e6f726d616c697a653137683336393166663965336437366438623345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c395f5f6d756c6f7469343137683432656362656332616230653535623345005f5a4e35325f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137683664623964623636316635386362613345005f5a4e35315f244c5424753332247532302461732475323024636f72652e2e6f70732e2e61726974682e2e41646441737369676e2447542431306164645f61737369676e3137683866623662303566366631643331613345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433616464336164643137683433636435396336626433303731393345005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683373696e3137683136616637323431643161663431393345005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834666d61783137683164363631613938343336383362383345005f5a4e36375f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e43617374496e746f244c5424753634244754242447542434636173743137686437323365396130373536326139383345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34315f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f313137686234656133616638623261363939383345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d396c67616d6d61665f72396c67616d6d61665f723137686535383665346664343031393837383345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366c64657870663137683237373164643131613234346366373345005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424356c6f5f68693137686134613366393663353835376464373345005f5a4e34365f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e642447542436626974616e643137683634363531306665313261323461373345005f5a4e34636f72653366363432315f244c5424696d706c2475323024663634244754243966726f6d5f62697473313372745f7536345f746f5f6636343137686339356562376330353262613865363345005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137683531666336346532613266353461363345005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137686232656463313533316338626135363345005f5a4e35355f244c5424663634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f6174244754243966726f6d5f726570723137683065626639633933396265326431363345005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431356f766572666c6f77696e675f6164643137686539333662366336323631653964353345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3565787032663565787032663137683666396430303236363237313233353345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336d756c385f5f6d756c6466333137683732396662313432303566663565343345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617436657874656e6436657874656e643137683137626564343762646233373539333345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34315f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f343137683365656231333632303732336436323345005f5a4e34636f726533636d7035696d706c7335375f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f7224753230247573697a6524475424326c743137686665363531306461303930376233323345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346362727434636272743137683435373330316132653537623865313345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346173696e36636f6d705f723137683436356634636635303136396431313345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3563627274663563627274663137686535333161373165653330326566303345005f5a4e35315f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137686333646434343665646432393465303345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356173696e6631723137686464396530643066653839666463303345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468367467616d6d613137683337353965633238366637623864653245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3461636f7331723137683037366436623363383939343363653245005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683574616e68663137683166643361373136616363353337653245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174646973663137683239323263373338383539353965643245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d377363616c626e66377363616c626e663137686662383564653564363636383363643245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f617431357533325f746f5f6636345f626974733137686437343735633365376663643261643245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431336c656164696e675f7a65726f7332377573697a655f6c656164696e675f7a65726f735f64656661756c743137686162646365663935373662643137643245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756d6f647469333137686339633630386537363137303236643245005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424336164643137683464646538356537333139623834643245005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e74244754243268693137686639386464313161666632366230643245005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7375623137683761653134633934383938356361633245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3137776974685f7365745f6c6f775f776f72643137686632396465386564656561656335633245005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431356f766572666c6f77696e675f6164643137683033373334336435313737363963623245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733132636f70795f666f72776172643137683334316336323630373534616337613245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366b5f636f7366366b5f636f73663137683935333462613761313334316464393245005f5a4e35325f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137683830393161363965356133356662393245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367467616d6d61367467616d6d613137686432376566666462346632666639393245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562375541646453756238756164645f6f6e653137683435646363643335336539386131393245005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683034323364313763613738656138373245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366c6f673130663137686265656133333163363230363265363245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c73397365745f627974657331357365745f62797465735f776f7264733137683165353638666135396232666463363245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174736964663137683563613234386330666132333732363245005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137686230623630393030356465333866353245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468386c67616d6d615f723137683233363866633966353963333664353245005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f7375623137683365623530376336343030666262353245005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137686333643938393131316363626237353245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756236416464537562336164643137686638633061333366646235303935353245005f5a4e35325f244c542475313238247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431356f766572666c6f77696e675f6164643137686238386365383337313764373166343245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633137683737363464386363666365633061343245005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431327772617070696e675f73686c3137683736346539366163643463306131343245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d36726f756e646636726f756e64663137683266343137643538386138306133333245005f5a4e34636f726534697465723572616e67653132355f244c5424696d706c2475323024636f72652e2e697465722e2e7472616974732e2e646f75626c655f656e6465642e2e446f75626c65456e6465644974657261746f722475323024666f722475323024636f72652e2e6f70732e2e72616e67652e2e52616e6765496e636c7573697665244c5424412447542424475424396e6578745f6261636b3137683762663363643363646562353335323245005f5a4e35325f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431307a65726f5f776964656e3137686366613438363565336131396634323245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347564697631325f5f756469766d6f647469343137683833666534653634613566386166313245005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f73686c3137686630613137643532333163626466303245005f5a4e34636f726533636d7035696d706c7335365f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f7224753230246931323824475424326c743137683936376265633666666532633737303245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367472756e6366367472756e63663137683633343336656361383435613536303245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978736674693137683862616166653565636232626135303245005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834706f77663137686331646637303437646639353034303245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366879706f7466366879706f74663137683238343632376538373031373332303245005f5a4e34636f7265336e756d32335f244c5424696d706c24753230247573697a652447542431327772617070696e675f6e65673137686237333639663963393938303762663145005f5a4e34636f72653366363432315f244c5424696d706c2475323024663634244754243966726f6d5f626974733137686232343566383864376337396237633145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356879706f743273713137683432313830363930353866386335633145005f5a4e35315f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137683366386536396536336564623132633145005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683330633661623363343665623032633145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7033636d703137686130366665326533363864613966623145005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137686434653566613937653937663739623145005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e74244754243769735f7a65726f3137683634623264623364343164656137623145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e746964663137683165633262663764373538346636623145005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834657870663137683433626636333364326333356133623145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73736673693137683562363963303364383166636537613145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174746964663137683335323763383931656262346263393145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356c6f673266356c6f6732663137683965336163643738333438613738393145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c31396936345f6f766572666c6f77696e675f6d756c3137686133346461653337323238653834393145005f5a4e35315f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137686239376138633461613338373564383145005f5a4e38395f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765244c54245424475424247532302461732475323024636f72652e2e697465722e2e72616e67652e2e52616e67654974657261746f72496d706c2447542439737065635f6e6578743137683438333034393235613162306262383145005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7375623137686463656266363730333662663739373145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356c6f6731303137683230636235623266666163343036373145005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024693332244754243267653137683233633237616164323236653536363145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978646674693137683436373263313334303830653363353145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35666d696e6635666d696e663137683562616336383638616431333932353145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f343137686638643234353064393537633532353145005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683473696e683137683161353232303632653565396535343145005f5a4e35325f244c542475313238247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6d756c3137683036646132396139306333393633343145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367363616c626e367363616c626e3137686362303336353861353930386364333145005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431307a65726f5f776964656e3137686137393361643761633233303936333145005f5a4e35325f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424326c6f3137686664366432386135663438396334333145005f5a4e34355f244c5424753634247532302461732475323024636f72652e2e6f70732e2e61726974682e2e53756224475424337375623137683538383561306337653563643031333145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6173686c7369333137686430323563336165623533656666323145005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431347a65726f5f776964656e5f6d756c3137686335613664313330313362633061323145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346578703234657870323137683561393731626535326664396331323145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f6164643137686532303639336436643262336666313145005f5a4e36375f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e43617374496e746f244c5424753332244754242447542434636173743137686261333531366333643236303564313145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f343137686537396237356137623766623362313145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173687234617368723137686165356565323561323361393038313145005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693634244754243133756e636865636b65645f7368723137686130306332316161626633373835313145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346578706634657870663137683632636264306361313130636632313145005f5a4e34636f72653366363432315f244c5424696d706c24753230246636342447542437746f5f62697473313372745f6636345f746f5f7536343137683466396431613331623238323130313145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356578706f32356578706f323137686565333034383538373064623666303145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3473696e683473696e683137683630323066366431313661353435303145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356c6f6732663137683933356232373138643839626433303145005f5a4e34345f244c542475313238247532302461732475323024636f72652e2e6f70732e2e6269742e2e4e6f7424475424336e6f743137683039363933363466643766346231303145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6d6f647369333137683261323666633663613433383665663045005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34315f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f383137683932396664616139343336636163663045005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173687234617368723137683532303564656536636333626361663045005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137686339353430323062366535353039663045005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431356f766572666c6f77696e675f6164643137683530306339373639346563666238663045005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6d756c3137683030326636343162383434306537663045005f5a4e35325f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e6441737369676e244754243133626974616e645f61737369676e3137686630663536336261323338353832663045005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137683865323931643863353939643566653045005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f72247532302469363424475424326c743137686161356263663637363565663264653045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366c6465787066366c64657870663137683732336437356430346537373962643045005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e74244754243769735f7a65726f3137686133633236396538343639633662643045005f5a4e35355f244c5424663332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f6174244754243966726f6d5f726570723137683263363661656566303037336262623045005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753634244754243133756e636865636b65645f73686c3137683861343836636336663634393462623045005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f383137683764316539353438326630393839623045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356c6f6731703137683939633539353934663636323738623045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3572696e74663572696e74663137686636333466353634306438666230613045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3872656d5f70696f323872656d5f70696f323137683634653963363537643238386237393045005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6173686c6469333137686532636437316562663466383530393045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d396c67616d6d61665f723673696e5f70693137683064323333653130623666313266383045005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562375541646453756234757375623137683831636537656337383231376262383045005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542435776964656e3137686330336132643566346133383835383045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346661627334666162733137686635373031336338326133383530383045005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834666d696e3137683864623337326338343633626332363045005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f6d756c3137686534303664623331623837633362353045005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424336164643137683333663164306536363337323837343045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d376b5f6578706f32376b5f6578706f323137686263363836666566353234313330343045005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693136244754243133756e636865636b65645f7368723137683935386539346364353731346365333045005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433737562385f5f7375627366333137683265363463356435616563383034333045005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137683737333833396236356139333530333045005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73646674693137683531353266343063373239376564313045005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753136244754243133756e636865636b65645f73686c3137686331383932306563313731646364313045005f5a4e35335f244c542469313238247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137683136663837363737393264333938313045005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433616464336164643137683133323066663765323166313832313045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35666c6f6f7235666c6f6f723137686531633834323631636664666663303045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346173696e346173696e3137686135633331343431363034363633303045005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336d756c385f5f6d756c73663331376864336335333535313965343163303030450069735f656d7074793c7573697a653e00737065635f6e6578743c7573697a653e006f66667365743c7573697a653e00737065635f6e6578745f6261636b3c7573697a653e006765745f756e636865636b65643c7573697a653e006164643c7573697a653e007375623c7573697a653e006765745f756e636865636b65643c7573697a652c207573697a653e006765745f756e636865636b65643c7536342c207573697a653e006765745f756e636865636b65645f6d75743c6636342c207573697a653e006765745f756e636865636b65643c6636342c207573697a653e006765745f756e636865636b65645f6d75743c6933322c207573697a653e006765745f756e636865636b65643c6933322c207573697a653e006765745f756e636865636b65643c6633322c207573697a653e006e6578743c636f72653a3a6f70733a3a72616e67653a3a52616e6765496e636c75736976653c7573697a653e3e006f66667365743c75383e006164643c75383e006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e007375623c75383e006c7368723c753132383e006d756c6f3c753132383e006164646f3c753132383e007375626f3c753132383e006173686c3c753132383e00756164645f6f6e653c753132383e00756164643c753132383e00757375623c753132383e00617368723c693132383e006164646f3c693132383e007375626f3c693132383e006d756c3c693132383e006164643c693132383e007375623c693132383e006164643c7531363e006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e006c7368723c7536343e006d756c6f3c7536343e006d756c3c7536343e006173686c3c7536343e006765745f756e636865636b65643c7536343e006164643c7536343e006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e00617368723c6936343e00706f773c6636343e006765745f756e636865636b65645f6d75743c6636343e00636d703c6636343e006d756c3c6636343e00726561645f766f6c6174696c653c6636343e00756e6f72643c6636343e006765745f756e636865636b65643c6636343e006164643c6636343e0064697636343c6636343e00696e746f3c6933322c206636343e00657874656e643c6633322c206636343e006c7368723c7533323e006d756c6f3c7533323e006173686c3c7533323e006164643c7533323e006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e006765745f756e636865636b65645f6d75743c6933323e00617368723c6933323e006765745f756e636865636b65643c6933323e006164643c6933323e00706f773c6633323e00636d703c6633323e006d756c3c6633323e00726561645f766f6c6174696c653c6633323e00756e6f72643c6633323e006765745f756e636865636b65643c6633323e006164643c6633323e0064697633323c6633323e007472756e633c6636342c206633323e002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313939002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303939002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313839002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303839002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313739002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303739002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313639002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303639002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313539002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303539002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323439002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313439002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303439002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323339002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303339002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323239002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313239002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303239002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313139002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303139002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323039002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313039002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303039005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f38005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f38005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f38002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313938002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303938002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313838002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303838002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313738002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303738002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313638002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303638002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313538002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303538002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323438002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313438002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303438002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323338002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313338002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303338002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323238002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313238002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303238002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323138002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313138002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303138002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323038002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313038002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303038002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313937002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303937002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313837002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303837002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313737002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303737002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313637002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303637002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313537002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303537002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323437002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313437002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303437002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323337002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313337002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303337002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313237002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303237002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323137002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313137002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303137002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323037002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313037002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303037002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313936002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303936002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313836002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303836002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313736002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303736002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313636002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303636002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313536002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303536002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323436002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313436002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303436002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323336002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313336002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303336002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323236002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313236002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303236002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323136002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313136002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303136002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323036002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313036002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303036002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313935002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303935002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313835002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303835002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313735002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303735002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313635002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303635002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313535002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303535002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323435002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313435002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303435002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323335002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313335002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303335002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323235002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313235002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303235002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323135002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313135002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303135002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323035002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313035002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303035005f5f6d756c6f746934005f5f756469766d6f64746934005f5f6469766d6f64746934005f5f6d756c6f736934005f5f756469766d6f64736934005f5f6469766d6f64736934005f5f6d756c6f646934005f5f756469766d6f64646934005f5f6469766d6f64646934005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f34005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f34005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f34002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313934002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303934002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313834002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303834002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313734002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e3037340064697636340072745f6636345f746f5f753634006e65676174655f7536340072745f7536345f746f5f663634002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313634002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303634002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313534002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303534002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323434002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303434002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323334002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313334002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303334002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323234002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313234002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303234002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323134002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313134002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303134002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323034002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313034002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303034005f5f75646976746933005f5f646976746933005f5f6c736872746933005f5f61736872746933005f5f6d756c746933005f5f6173686c746933005f5f756d6f64746933005f5f6d6f64746933005f5f75646976736933005f5f646976736933005f5f6c736872736933005f5f61736872736933005f5f6173686c736933005f5f756d6f64736933005f5f6d6f64736933005f5f75646976646933005f5f646976646933005f5f6c736872646933005f5f61736872646933005f5f6d756c646933005f5f6173686c646933005f5f756d6f64646933005f5f6d6f64646933005f5f646976736633005f5f6d756c736633005f5f616464736633005f5f737562736633005f5f646976646633005f5f6d756c646633005f5f616464646633005f5f737562646633002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313933002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303933002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313833002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303833002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313733002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303733002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313633002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303633002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323533002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313533002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303533002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323433002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313433002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303433002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323333002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313333002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303333002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323233002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313233002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303233002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313133002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303133002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323033002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313033002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e313033002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e3030330065787032006b5f6578706f320072656d5f70696f32006174616e32005f5f636c7a736932006c6f6732005f5f6571736632005f5f706f7769736632005f5f7472756e636466736632005f5f6765736632005f5f756e6f7264736632005f5f6571646632005f5f706f7769646632005f5f657874656e647366646632005f5f6765646632005f5f756e6f7264646632005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f32005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f32005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f32002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313932002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303932002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313832002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303832002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313732002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303732002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313632002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303632002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323532002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313532002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303532002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323432002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313432002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e3034320072745f6633325f746f5f7533320072745f7533325f746f5f663332002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323332002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313332002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303332002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323232002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313232002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303232002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323132002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313132002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303132002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323032002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313032002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303032006578706d31005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f31005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f31005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f31002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313931002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303931002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303831002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313731002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303731002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313631002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303631002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323531002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303531002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323431002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313431002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303431002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323331002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303331002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323231002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313231002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303231002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323131002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303131002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323031002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313031002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303031002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313930002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303930002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313830002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303830002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313730002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303730002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313630002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303630002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323530002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313530002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303530002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323430002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303430002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323330002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313330002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303330002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323230002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313230002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303230006c6f673130002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323130002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313130002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303130002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323030002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313030002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303030006c6962726172792f616c6c6f632f7372632f6c69622e72732f402f616c6c6f632e383366333562383232323065373039662d6367752e30006c6962726172792f636f72652f7372632f6c69622e72732f402f636f72652e373332383136633463663665623964342d6367752e3000636c616e67204c4c564d202872757374632076657273696f6e20312e37362e302d6e696768746c79202832316363653231643820323032332d31322d313129290000e1a0030f2e64656275675f7075626e616d657362000000020000000000740000002b0000007261775f766563003000000063617061636974795f6f766572666c6f77004d000000616c6c6f6300520000005f5f616c6c6f635f6572726f725f68616e646c657200570000005f5f72646c5f6f6f6d0000000000bc030000020074000000320b000026000000636f7265002b0000007074720030000000636f6e73745f707472003a0000006164643c7573697a653e00470000006164643c6636343e00630000006d75745f707472007a0000006164643c6933323e008a000000736c696365008f000000696e64657800940000007b696d706c23327d00990000006765745f756e636865636b65643c7573697a653e00a50000006765745f756e636865636b65645f6d75743c6636343e00b10000006765745f756e636865636b65643c6636343e00bd0000006765745f756e636865636b65643c6933323e00c90000006765745f756e636865636b65645f6d75743c6933323e00dc0000006765745f756e636865636b65643c7573697a652c207573697a653e00e90000006765745f756e636865636b65645f6d75743c6636342c207573697a653e00f60000006765745f756e636865636b65643c6636342c207573697a653e00030100006765745f756e636865636b65643c6933322c207573697a653e00100100006765745f756e636865636b65645f6d75743c6933322c207573697a653e001f0100006f7073002901000052616e6765496e636c7573697665003b01000069735f656d7074793c7573697a653e004b01000069746572005001000072616e676500550100007b696d706c2331347d0067010000737065635f6e6578745f6261636b3c7573697a653e00750100007b696d706c2331357d00880100007b696d706c2331367d008d0100006e6578745f6261636b3c7573697a653e009b0100007b696d706c2334317d00a0010000666f72776172645f756e636865636b656400ad0100007b696d706c23357d00b2010000737065635f6e6578743c7573697a653e00c00100007b696d706c23367d00c50100006e6578743c7573697a653e00d4010000616461707465727300d901000072657600de0100007b696d706c23317d00e30100006e6578743c636f72653a3a6f70733a3a72616e67653a3a52616e6765496e636c75736976653c7573697a653e3e00f3010000636d7000f8010000696d706c7300fd0100007b696d706c2335347d00020200006c7400120200006e756d00170200007b696d706c2331317d001c020000756e636865636b65645f616464002b02000066363400300200007b696d706c23307d003a02000072745f7536345f746f5f663634004802000066726f6d5f626974730058020000636f6d70696c65725f6275696c74696e73005d0200006d61746800620200006c69626d006c0200007363616c626e007e02000072656d5f70696f325f6c617267650000000000400000000200a60b0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666c6f6f720000000000690300000200e90b0000fe0e000026000000636f7265002b000000663332003a00000072745f6633325f746f5f753332005a00000072745f7533325f746f5f66333200770000006f7073007c00000062697400810000007b696d706c2333317d00930000007b696d706c2338337d00a60000007b696d706c233133357d00b90000007b696d706c233836337d00cc0000007b696d706c233238377d00df0000007b696d706c23313437377d00f20000007b696d706c23313336357d00050100007b696d706c2333327d000a010000626974616e6400170100007b696d706c2338347d001c0100006269746f72002a0100007b696d706c233133367d002f010000626974786f72003d0100007b696d706c233931317d004201000073687200500100007b696d706c233333357d005501000073686c00630100007b696d706c23313530317d006801000073686c5f61737369676e00760100007b696d706c23313336367d007b0100006269746f725f61737369676e008a0100006172697468008f0100007b696d706c233239397d00a20100007b696d706c233330307d00a70100006164645f61737369676e00b7010000636d7000bc010000696d706c7300c10100007b696d706c2336307d00ee0100007b696d706c2332347d000e0200007b696d706c2336327d0013020000676500200200006774002d0200006c74003b0200007b696d706c2332357d00400200006571004d0200006e65005d0200006e756d00750200007b696d706c23397d0089020000663634008e0200007b696d706c23307d009802000072745f6636345f746f5f75363400a6020000746f5f6269747300b802000072745f7536345f746f5f66363400c602000066726f6d5f6269747300d6020000636f6d70696c65725f6275696c74696e7300db020000666c6f617400fe02000061646400030300006164643c6633323e000f0300005f5f61646473663300780800006164643c6636343e00840800005f5f61646464663300810e00007b696d706c23317d00860e00007265707200920e000066726f6d5f7265707200a00e0000696e7400a50e00007b696d706c23367d00b70e00007b696d706c233133317d00ca0e00007b696d706c23387d00cf0e00007772617070696e675f73756200db0e000066726f6d5f626f6f6c00e80e00007b696d706c233132307d00ed0e0000636173740000000000b10000000200e71a0000b90000001e000000636f726500230000006e756d00280000007b696d706c23387d00540000007b696d706c23327d00660000007772617070696e675f73756200740000007b696d706c23397d00790000006c656164696e675f7a65726f730088000000636f6d70696c65725f6275696c74696e73008d000000666c6f617400920000007b696d706c23307d00a40000007b696d706c23317d00a90000006e6f726d616c697a650000000000760000000200a01b00007f0000001e000000636f726500230000006e756d003a0000007b696d706c23397d004e000000636f6d70696c65725f6275696c74696e730053000000696e7400580000007b696d706c23367d006a0000007b696d706c23387d006f0000006c656164696e675f7a65726f7300000000007002000002001f1c0000a502000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d0030000000696d706c730035000000636f6d706172655f62797465730042000000635f737472696e675f6c656e677468005b000000636f70795f6261636b776172640060000000636f70795f6261636b776172645f6279746573006c000000636f70795f6261636b776172645f6d6973616c69676e65645f776f7264730078000000636f70795f6261636b776172645f616c69676e65645f776f7264730091000000636f70795f666f72776172640096000000636f70795f666f72776172645f627974657300a2000000636f70795f666f72776172645f6d6973616c69676e65645f776f72647300ae000000636f70795f666f72776172645f616c69676e65645f776f72647300c70000007365745f627974657300cc0000007365745f62797465735f627974657300d80000007365745f62797465735f776f72647300e60000006d656d636d7000130100007374726c656e00200100006d656d6d6f7665002d0100006d656d736574003a01000062636d7000470100006d656d6370790056010000636f7265005b0100006e756d00600100007b696d706c2331317d008c0100007772617070696e675f73756200990100007772617070696e675f6e656700a801000070747200ad010000636f6e73745f70747200c40100006f66667365743c75383e00d10100007375623c75383e00ed0100006d75745f70747200f20100007b696d706c23307d00380200006f66667365743c7573697a653e00450200007375623c7573697a653e00860200006164643c75383e00930200006164643c7573697a653e00000000005d0100000200c41e0000e105000026000000636f7265002b000000663634003a00000072745f6636345f746f5f7536340048000000746f5f62697473006700000072745f7536345f746f5f663634008200000066726f6d5f6269747300910000007074720096000000636f6e73745f70747200a00000006164643c6636343e00b0000000736c69636500b5000000696e64657800ba0000007b696d706c23327d00bf0000006765745f756e636865636b65643c6636343e00cd0000007b696d706c23307d00d20000006765745f756e636865636b65643c6636342c207573697a653e00e2000000636f6d70696c65725f6275696c74696e7300e70000006d61746800ec0000006c69626d00f1000000776974685f7365745f686967685f776f726400fe000000776974685f7365745f6c6f775f776f7264000b0100006765745f686967685f776f7264001d010000706f77009e0500007363616c626e00000000003f0000000200a5240000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007371727400000000003f0000000200e8240000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666162730000000000ca00000002002b2500007501000026000000636f7265002b00000066333200300000007b696d706c23307d004700000072745f6633325f746f5f753332006700000072745f7533325f746f5f663332007500000066726f6d5f626974730082000000746f5f626974730092000000636f6d70696c65725f6275696c74696e7300970000006d617468009c0000006c69626d00220100006c6f676600340100006c67616d6d61665f72004001000073696e5f706900520100006b5f73696e6600640100006b5f636f736600000000007b0100000200a0260000d104000026000000636f7265002b0000006e756d00300000007b696d706c23397d005c0000007b696d706c2331307d006f0000007b696d706c23387d00740000006c656164696e675f7a65726f730080000000636865636b65645f646976008d0000007772617070696e675f737562009a000000756e636865636b65645f73686c00a70000007772617070696e675f73686c00b40000007772617070696e675f61646400c4000000636f6d70696c65725f6275696c74696e7300c9000000696e7400ce0000007370656369616c697a65645f6469765f72656d00d30000007536345f6e6f726d616c697a6174696f6e5f736869667400df0000007536345f62795f7536345f6469765f72656d00eb000000753132385f6469765f72656d007c0200007533325f6e6f726d616c697a6174696f6e5f736869667400880200007533325f62795f7533325f6469765f72656d00940200007536345f6469765f72656d00280400007533325f6469765f72656d0000000000310100000200712b00001102000026000000636f7265002b000000663634003a00000072745f6636345f746f5f7536340048000000746f5f626974730057000000707472005c000000636f6e73745f70747200660000006164643c6636343e0075000000726561645f766f6c6174696c653c6633323e0083000000736c6963650088000000696e646578008d0000007b696d706c23327d00920000006765745f756e636865636b65643c6636343e00a00000007b696d706c23307d00a50000006765745f756e636865636b65643c6636342c207573697a653e00b5000000636f6d70696c65725f6275696c74696e7300ba0000006d61746800bf0000006c69626d00c90000007300d500000073696e706900e10000007467616d6d6100ee0100006b5f73696e00000200006b5f636f730000000000400000000200822d0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666c6f6f720000000000aa0000000200c52d00006e02000026000000636f7265002b00000066363400300000007b696d706c23307d004700000072745f6636345f746f5f753634006700000072745f7536345f746f5f663634007500000066726f6d5f626974730082000000746f5f626974730092000000636f6d70696c65725f6275696c74696e7300970000006d617468009c0000006c69626d00ab0000006d656469756d00b800000072656d5f70696f32000000000017010000020033300000ac01000026000000636f7265002b000000663332003a00000072745f6633325f746f5f7533320048000000746f5f62697473005500000069735f6e616e00640000007074720069000000726561645f766f6c6174696c653c6633323e0076000000636f6e73745f70747200800000006164643c6633323e0090000000736c6963650095000000696e646578009a0000007b696d706c23327d009f0000006765745f756e636865636b65643c6633323e00ad0000007b696d706c23307d00b20000006765745f756e636865636b65643c6633322c207573697a653e00c2000000636f6d70696c65725f6275696c74696e7300c70000006d61746800cc0000006c69626d00d60000006174616e660000000000400000000200df310000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000066616273660000000000c60000000200223200005001000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f62697473005500000069735f6e616e006700000072745f7536345f746f5f663634007500000066726f6d5f6269747300840000007074720089000000726561645f766f6c6174696c653c6636343e0098000000636f6d70696c65725f6275696c74696e73009d0000006d61746800a20000006c69626d00ac0000006578706d310000000000bc0000000200723300003301000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f62697473005a00000072745f7533325f746f5f663332006800000066726f6d5f626974730077000000707472007c000000726561645f766f6c6174696c653c6633323e008b000000636f6d70696c65725f6275696c74696e7300900000006d61746800950000006c69626d009f0000006578706d31660000000000570100000200a5340000eb01000026000000636f7265002b000000663634003a00000072745f6636345f746f5f7536340048000000746f5f62697473005500000069735f6e616e006700000072745f7536345f746f5f663634007500000066726f6d5f6269747300840000007074720089000000726561645f766f6c6174696c653c6633323e0096000000636f6e73745f70747200a00000006164643c6636343e00af000000726561645f766f6c6174696c653c6636343e00bd000000736c69636500c2000000696e64657800c70000007b696d706c23327d00cc0000006765745f756e636865636b65643c6636343e00da0000007b696d706c23307d00df0000006765745f756e636865636b65643c6636342c207573697a653e00ef000000636f6d70696c65725f6275696c74696e7300f40000006d61746800f90000006c69626d00030100007363616c626e0015010000657870000000000016010000020090360000ac01000026000000636f7265002b000000663634003a00000072745f6636345f746f5f7536340048000000746f5f62697473005500000069735f6e616e00640000007074720069000000726561645f766f6c6174696c653c6633323e0076000000636f6e73745f70747200800000006164643c6636343e0090000000736c6963650095000000696e646578009a0000007b696d706c23327d009f0000006765745f756e636865636b65643c6636343e00ad0000007b696d706c23307d00b20000006765745f756e636865636b65643c6636342c207573697a653e00c2000000636f6d70696c65725f6275696c74696e7300c70000006d61746800cc0000006c69626d00d60000006174616e00000000003f00000002003c380000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006661627300000000003701000002007f380000c101000026000000636f7265002b000000663332003a00000072745f6633325f746f5f7533320048000000746f5f62697473005a00000072745f7533325f746f5f663332006800000066726f6d5f626974730077000000707472007c000000726561645f766f6c6174696c653c6633323e0089000000636f6e73745f70747200930000006164643c6633323e00a3000000736c69636500a8000000696e64657800ad0000007b696d706c23327d00b20000006765745f756e636865636b65643c6633323e00c00000007b696d706c23307d00c50000006765745f756e636865636b65643c6633322c207573697a653e00d5000000636f6d70696c65725f6275696c74696e7300da0000006d61746800df0000006c69626d00e90000007363616c626e6600fb0000006578706600000000009a0000000200403a00001301000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f62697473005a00000072745f7536345f746f5f663634006800000066726f6d5f626974730078000000636f6d70696c65725f6275696c74696e73007d0000006d61746800820000006c69626d008c0000006c6f670000000000810000000200533b0000c900000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f6669787366746900000000008100000002001c3c0000c800000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978736664690000000000810000000200e43c0000c900000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978646674690000000000810000000200ad3d0000c800000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978646673690000000000810000000200753e0000c700000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f6669787366736900000000008100000002003c3f0000c800000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f66697864666469000000000084000000020004400000c700000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e73736664690000000000840000000200cb400000c700000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e7364667369000000000084000000020092410000c800000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e736466746900000000008400000002005a420000c800000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e7373667469000000000084000000020022430000c700000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e73736673690000000000840000000200e9430000c700000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e73646664690000000000680000000200b0440000d100000026000000636f7265002b00000066363400300000007b696d706c23307d003500000069735f6e616e0045000000636f6d70696c65725f6275696c74696e73004a0000006d617468004f0000006c69626d00790000006664696d000000000069000000020081450000d100000026000000636f7265002b00000066333200300000007b696d706c23307d003500000069735f6e616e0045000000636f6d70696c65725f6275696c74696e73004a0000006d617468004f0000006c69626d00790000006664696d66000000000069000000020052460000c900000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800300000006c69626d005a000000666d61786600a9000000636f726500ae00000066333200b30000007b696d706c23307d00b800000069735f6e616e00000000006900000002001b470000c900000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800300000006c69626d005a000000666d696e6600a9000000636f726500ae00000066333200b30000007b696d706c23307d00b800000069735f6e616e0000000000680000000200e4470000c900000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800300000006c69626d005a000000666d696e00a9000000636f726500ae00000066363400b30000007b696d706c23307d00b800000069735f6e616e0000000000680000000200ad480000c900000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800300000006c69626d005a000000666d617800a9000000636f726500ae00000066363400b30000007b696d706c23307d00b800000069735f6e616e000000000037000000020076490000a800000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6465787000000000008900000002001e4a0000870000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007363616c626e00440000006c646578700054000000636f72650059000000663634005e0000007b696d706c23307d006800000072745f7536345f746f5f663634007600000066726f6d5f626974730000000000370000000200a54a0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c646578700000000000440000000200dd4a0000cd01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f617368727369330000000000660100000200aa4c00004c0100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d000000417368720032000000617368723c6933323e003f0000005f5f61736872736933004d0000007b696d706c2331377d00520000006869005f00000066726f6d5f6c6f5f6869006c0000006c6f007a0000007b696d706c23357d007f0000006c6f676963616c5f736872008b0000007772617070696e675f73687200970000007772617070696e675f73686c00a40000007b696d706c2332357d00a9000000776964656e5f686900b60000007a65726f5f776964656e00c6000000636f726500cb0000006e756d00d00000007b696d706c23377d00f00000007b696d706c23317d00f5000000756e636865636b65645f736872000f010000756e636865636b65645f73686c002b0100006f7073003001000062697400350100007b696d706c2338387d003a0100006269746f720000000000420000000200f64d00002501000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f657173663200000000003301000002001b4f0000300100001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333317d006b0000007b696d706c2338337d00700000006269746f72007e0000007b696d706c2333377d0083000000626974616e640092000000636d700097000000696d706c73009c0000007b696d706c2336307d00af0000007b696d706c2337327d00b4000000676500c1000000677400ce0000006c7400dc0000007b696d706c2333307d00e1000000657100f2000000636f6d70696c65725f6275696c74696e7300f7000000666c6f617400fc0000007b696d706c23307d0001010000726570720013010000636d703c6633323e001f0100005f5f657173663200000000003600000002004b5000001701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006362727400000000009b000000020062510000a20000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d009200000063627274000000000044000000020004520000ce01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173686c64693300000000006a0100000200d25300003a0100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004173686c00320000006173686c3c7536343e003f0000005f5f6173686c646933004d0000007b696d706c2331347d00520000006869005f0000006c6f006c00000066726f6d5f6c6f5f6869007a0000007b696d706c23367d007f0000007772617070696e675f73686c008b0000006c6f676963616c5f73687200980000007b696d706c2332327d00aa0000007a65726f5f776964656e00b7000000776964656e5f686900c7000000636f726500cc0000006e756d00d10000007b696d706c23387d00d6000000756e636865636b65645f73686c00f00000007772617070696e675f73756200fd000000756e636865636b65645f736872000a0100007772617070696e675f73687200190100006f7073001e01000062697400230100007b696d706c2338337d00280100006269746f7200000000003600000002000c5500003901000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f67320000000000e6000000020045560000c60000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f000000636f6e7665727400740000006e756d00790000007b696d706c2337397d007e00000066726f6d008c0000007b696d706c23337d0091000000696e746f3c6933322c206636343e00a1000000636f6d70696c65725f6275696c74696e7300a60000006d61746800ab0000006c69626d00b50000006c6f673200000000003600000002000b570000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f673200000000004c000000020043570000d700000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f753132385f6164646f00000000000f01000002001a580000dd0000001e000000636f726500230000006e756d00280000007b696d706c23397d0049000000636d70004e000000696d706c7300530000007b696d706c2336347d00580000006c740069000000636f6d70696c65725f6275696c74696e73006e000000696e7400730000007b696d706c23387d00780000006f766572666c6f77696e675f61646400840000007772617070696e675f6164640091000000616464737562009600000055416464537562009b000000756164643c753132383e00a800000041646453756200ad0000006164643c753132383e00ba0000004164646f00bf0000006164646f3c753132383e00cc0000005f5f727573745f753132385f6164646f0000000000360000000200f75800002f01000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000074616e660000000000a50000000200265a00009a0000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000074616e6600440000006b5f74616e660054000000636f72650059000000663332005e0000007b696d706c23307d006800000072745f6633325f746f5f7533320076000000746f5f626974730085000000707472008a000000726561645f766f6c6174696c653c6633323e0000000000360000000200c05a0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000074616e660000000000820000000200f85a0000750000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000072656d5f70696f32660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f7533325f746f5f663332006400000066726f6d5f6269747300000000004200000002006d5b00009201000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c6f7469340000000000ed0000000200ff5c0000d80000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006d756c002d000000693132385f6f766572666c6f77696e675f6d756c00390000005f5f6d756c6f7469340046000000554d756c6f004b0000006d756c6f3c753132383e00590000007b696d706c23387d005e00000069735f7a65726f006b0000007b696d706c2331307d007c0000006f766572666c6f77696e675f61646400890000007b696d706c2332337d008e000000776964656e5f6d756c009e000000636f726500a30000006e756d00ba0000007772617070696e675f6d756c0000000000370000000200d75d0000ff00000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006879706f740000000000a30000000200d65e0000a10000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006879706f74009000000073710000000000370000000200775f0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006879706f7400000000003f0000000200af5f0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000737172740000000000360000000200f25f0000d300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f676600000000009b0000000200c5600000a20000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00920000006c6f6766000000000047000000020067610000e600000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174746964660000000000bc00000002004d620000960000001e000000636f726500230000006e756d00280000007b696d706c23347d002d0000007772617070696e675f616273003a000000756e7369676e65645f6162730049000000663634004e0000007b696d706c23307d005800000072745f7536345f746f5f663634006600000066726f6d5f626974730076000000636f6d70696c65725f6275696c74696e73007b000000666c6f61740080000000636f6e7600850000005f5f666c6f6174746964660000000000b10000000200e36200007b0000001e000000636f726500230000006e756d00280000007b696d706c2331307d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a000000753132385f746f5f6636345f6269747300000000005900000002005e6300008100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f380000000000bb0000000200df630000690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e00340000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f380043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7536343e000000000037000000020048640000cf00000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006173696e66000000000082000000020017650000810000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d00640000006173696e66007000000072000000000037000000020098650000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006173696e660000000000400000000200d0650000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666162736600000000003f000000020013660000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000737172740000000000350000000200566600006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f670000000000350000000200b9660000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f670000000000380000000200f1660000da00000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000726f756e64660000000000ab0000000200cb670000a70000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d0084000000636f70797369676e660096000000726f756e6466000000000038000000020072680000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000726f756e64660000000000410000000200aa680000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007472756e63660000000000360000000200ed680000d100000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000666d6f640000000000c10000000200be690000ae0000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f0000006e756d00740000007b696d706c23397d00790000007772617070696e675f7375620089000000636f6d70696c65725f6275696c74696e73008e0000006d61746800930000006c69626d009d000000666d6f6400000000003600000002006c6a0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000666d6f640000000000450000000200a46a00006f00000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469766d6f647369340000000000460000000200136b00003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f647369340000000000450000000200516b00003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6469766d6f6473693400000000003700000002008f6b0000d100000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000666d6f64660000000000c20000000200606c0000ae0000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f62697473006f0000006e756d00740000007b696d706c23387d00790000007772617070696e675f7375620089000000636f6d70696c65725f6275696c74696e73008e0000006d61746800930000006c69626d009d000000666d6f646600000000003700000002000e6d0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000666d6f64660000000000350000000200466d00008901000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000074616e0000000000d50000000200cf6e0000e00000001e000000636f7265002300000066363400280000007b696d706c23307d003f00000072745f6636345f746f5f753634005a000000746f5f62697473006c00000072745f7536345f746f5f663634007a00000066726f6d5f626974730089000000707472008e000000726561645f766f6c6174696c653c6636343e009d000000636f6d70696c65725f6275696c74696e7300a20000006d61746800a70000006c69626d00b100000074616e00c30000006b5f74616e00cf0000007a65726f5f6c6f775f776f72640000000000350000000200af6f0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000074616e0000000000430000000200e76f0000fe05000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f617400300000006d756c003a0000005f5f6d756c7366330000000000530400000200e5750000980400001e000000636f72650023000000663332003200000072745f6633325f746f5f753332005200000072745f7533325f746f5f663332006f0000006f7073007400000062697400790000007b696d706c2333317d008b0000007b696d706c233133357d009e0000007b696d706c233836337d00b10000007b696d706c233238377d00c40000007b696d706c23313336357d00d70000007b696d706c2338337d00ea0000007b696d706c23313437377d00fd0000007b696d706c23313333397d00100100007b696d706c23313735337d00230100007b696d706c2333327d0028010000626974616e6400350100007b696d706c233133367d003a010000626974786f7200480100007b696d706c233931317d004d010000736872005b0100007b696d706c233333357d006001000073686c006e0100007b696d706c23313336367d00730100006269746f725f61737369676e00810100007b696d706c2338347d00860100006269746f7200940100007b696d706c23313530317d009901000073686c5f61737369676e00a70100007b696d706c23313334307d00ac010000626974616e645f61737369676e00ba0100007b696d706c23313737377d00bf0100007368725f61737369676e00ce010000617269746800d30100007b696d706c233239397d00e60100007b696d706c233330307d00eb0100006164645f61737369676e00fb010000636d700000020000696d706c7300050200007b696d706c2336307d00320200007b696d706c2332347d00450200007b696d706c2336327d004a02000067650057020000677400640200006c7400720200007b696d706c2332357d0077020000657100840200006e6500940200006e756d00990200007b696d706c23397d00b90200007b696d706c23327d00d80200007772617070696e675f61646400060300007b696d706c2331307d000b0300007772617070696e675f6d756c001a030000663634001f0300007b696d706c23307d002903000072745f6636345f746f5f7536340037030000746f5f62697473004903000072745f7536345f746f5f663634005703000066726f6d5f626974730067030000636f6d70696c65725f6275696c74696e73006c030000666c6f6174008f0300006d756c00940300006d756c3c6633323e00a00300005f5f6d756c73663300ad0300006d756c3c6636343e00b90300005f5f6d756c64663300c70300007b696d706c23317d00cc0300007265707200d803000066726f6d5f7265707200e6030000696e7400eb0300007b696d706c2332327d00f0030000776964656e000b0400007b696d706c2331347d00100400006c6f001d0400006c6f5f6869002a040000686900380400007b696d706c23367d004a0400007b696d706c2332337d004f040000776964656e5f6d756c005d0400007b696d706c233133317d00700400007b696d706c233132307d00750400006361737400830400007b696d706c23387d00880400007772617070696e675f7375620000000000b100000002007d7a0000b90000001e000000636f726500230000006e756d00280000007b696d706c23387d00540000007b696d706c23327d00660000007772617070696e675f73756200740000007b696d706c23397d00790000006c656164696e675f7a65726f730088000000636f6d70696c65725f6275696c74696e73008d000000666c6f617400920000007b696d706c23307d00a40000007b696d706c23317d00a90000006e6f726d616c697a650000000000440000000200367b0000a201000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173686c7369330000000000590100000200d87c00002d0100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004173686c00320000006173686c3c7533323e003f0000005f5f6173686c736933004d0000007b696d706c2331337d00520000006869005f0000006c6f006c00000066726f6d5f6c6f5f6869007a0000007b696d706c23347d007f0000007772617070696e675f73686c008b0000006c6f676963616c5f73687200980000007b696d706c2332317d00aa0000007a65726f5f776964656e00b7000000776964656e5f686900c7000000636f726500cc0000006e756d00d10000007b696d706c23377d00d6000000756e636865636b65645f73686c00f0000000756e636865636b65645f73687200fd0000007772617070696e675f736872000c0100006f7073001101000062697400160100007b696d706c2338327d001b0100006269746f720000000000370000000200057e0000d300000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636272746600000000009c0000000200d87e0000a20000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d0092000000636272746600000000004c00000002007a7f00005701000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f693132385f7375626f0000000000560100000200d1800000130100001e000000636f726500230000006e756d00280000007b696d706c23397d00490000006f7073004e00000062697400530000007b696d706c23377d00580000006e6f740067000000636d70006c000000696d706c7300710000007b696d706c2337367d00760000006c740087000000636f6d70696c65725f6275696c74696e73008c000000696e7400910000007b696d706c23387d00960000006f766572666c6f77696e675f61646400a20000007772617070696e675f61646400af00000061646473756200b40000005541646453756200b9000000756164643c753132383e00c5000000757375623c753132383e00d1000000756164645f6f6e653c753132383e00de00000041646453756200e30000007375623c693132383e00f00000005375626f00f50000007375626f3c693132383e00020100005f5f727573745f693132385f7375626f0000000000430000000200e48100006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f7564697674693300000000004300000002004a8200003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f75646976746933000000000036000000020088820000be00000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000074616e680000000000ba000000020046830000a80000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f7536345f746f5f663634004000000066726f6d5f62697473005200000072745f6636345f746f5f7536340060000000746f5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d009700000074616e680000000000360000000200ee830000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000074616e68000000000047000000020026840000cb00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f61747369736600000000008c0000000200f1840000610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007533325f746f5f6633325f626974730042000000636f726500470000006e756d004c0000007b696d706c23387d00510000006c656164696e675f7a65726f730000000000bc000000020052850000960000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f617473697366003d000000636f726500420000006e756d00470000007b696d706c23327d004c0000007772617070696e675f6162730059000000756e7369676e65645f6162730068000000663332006d0000007b696d706c23307d007700000072745f7533325f746f5f663332008500000066726f6d5f626974730000000000590000000200e88500008100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f340000000000bb000000020069860000690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e00340000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f340043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7533323e0000000000370000000200d2860000be00000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000074616e68660000000000bb000000020090870000a80000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f7533325f746f5f663332004000000066726f6d5f62697473005200000072745f6633325f746f5f7533320060000000746f5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d009700000074616e6866000000000037000000020038880000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000074616e68660000000000350000000200708800000401000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000073696e0000000000ad000000020074890000ac0000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000007074720054000000726561645f766f6c6174696c653c6636343e0063000000636f6d70696c65725f6275696c74696e7300680000006d617468006d0000006c69626d007700000073696e00890000006b5f636f73009b0000006b5f73696e0000000000350000000200208a0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000073696e0000000000370000000200588a0000c100000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000073696e686600000000009c0000000200198b0000950000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073696e68660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f7533325f746f5f663332006400000066726f6d5f62697473007600000072745f6633325f746f5f7533320084000000746f5f626974730000000000370000000200ae8b0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000073696e68660000000000430000000200e68b0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006b5f6578706f32660000000000450000000200298c00001101000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f756e6f72646466320000000000ee00000002003a8d0000cb0000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333327d005e000000626974616e64006d000000636d700072000000696d706c7300770000007b696d706c2336327d007c0000006774008d000000636f6d70696c65725f6275696c74696e730092000000666c6f617400970000007b696d706c23317d009c0000007265707200ae000000756e6f72643c6636343e00ba0000005f5f756e6f72646466320000000000420000000200058e00002501000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f676573663200000000003301000002002a8f0000300100001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333317d006b0000007b696d706c2338337d00700000006269746f72007e0000007b696d706c2333377d0083000000626974616e640092000000636d700097000000696d706c73009c0000007b696d706c2336307d00af0000007b696d706c2337327d00b4000000676500c1000000677400ce0000006c7400dc0000007b696d706c2333307d00e1000000657100f2000000636f6d70696c65725f6275696c74696e7300f7000000666c6f617400fc0000007b696d706c23307d0001010000726570720013010000636d703c6633323e001f0100005f5f676573663200000000003700000002005a9000006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006174616e660000000000370000000200bd900000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006174616e660000000000390000000200f59000007400000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000007467616d6d6166000000000042000000020069910000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007467616d6d61660000000000390000000200ac910000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000007467616d6d61660000000000350000000200e4910000e400000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636f7300000000008e0000000200c8920000990000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d0064000000636f7300760000006b5f636f7300880000006b5f73696e000000000035000000020061930000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000636f73000000000047000000020099930000cb00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f61747369646600000000008c000000020064940000610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007533325f746f5f6636345f626974730042000000636f726500470000006e756d004c0000007b696d706c23387d00510000006c656164696e675f7a65726f730000000000bc0000000200c5940000960000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f617473696466003d000000636f726500420000006e756d00470000007b696d706c23327d004c0000007772617070696e675f6162730059000000756e7369676e65645f6162730068000000663634006d0000007b696d706c23307d007700000072745f7536345f746f5f663634008500000066726f6d5f6269747300000000005a00000002005b9500009d00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f310000000000c70000000200f8950000820000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e00340000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f310043000000636f72650048000000707472004d0000006d75745f7074720066000000636f6e73745f707472006b0000007b696d706c23307d00700000006164643c75383e00000000005900000002007a9600008100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f320000000000bb0000000200fb960000690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e00340000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f320043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7531363e0000000000590000000200649700007400000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f380000000000820000000200d8970000440000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e00340000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f3800000000004300000002001c9800006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469766469330000000000430000000200829800003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766469330000000000360000000200c09800000304000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000706f77660000000000200100000200c39c0000110100001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473005f00000072745f7533325f746f5f663332007a00000066726f6d5f626974730089000000707472008e000000636f6e73745f70747200980000006164643c6633323e00a8000000736c69636500ad000000696e64657800b20000007b696d706c23327d00b70000006765745f756e636865636b65643c6633323e00c50000007b696d706c23307d00ca0000006765745f756e636865636b65643c6633322c207573697a653e00da000000636f6d70696c65725f6275696c74696e7300df0000006d61746800e40000006c69626d00ee000000706f776600000100007363616c626e660000000000360000000200d49d0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000706f776600000000004000000002000c9e0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666162736600000000004000000002004f9e0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073717274660000000000430000000200929e00005700000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000616464003a0000005f5f6164646466330000000000360000000200e99e0000c100000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000073696e6800000000009b0000000200aa9f0000950000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073696e680042000000636f72650047000000663634004c0000007b696d706c23307d005600000072745f7536345f746f5f663634006400000066726f6d5f62697473007600000072745f6636345f746f5f7536340084000000746f5f6269747300000000003600000002003fa00000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000073696e68000000000040000000020077a00000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006578706f320000000000360000000200baa000006701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006578703200000000005c010000020021a200001e0100001e000000636f72650023000000663634003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0081000000636f6e73745f707472008b0000006164643c7536343e009b0000006e756d00a00000007b696d706c23387d00a50000007772617070696e675f61646400b4000000736c69636500b9000000696e64657800be0000007b696d706c23327d00c30000006765745f756e636865636b65643c7536343e00d10000007b696d706c23307d00d60000006765745f756e636865636b65643c7536342c207573697a653e00e6000000636f6d70696c65725f6275696c74696e7300eb0000006d61746800f00000006c69626d00fa00000065787032000d0100007363616c626e00000000003600000002003fa30000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006578703200000000004b000000020077a30000bf02000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000657874656e64003a0000005f5f657874656e64736664663200000000003d020000020036a60000de0100001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333317d005e000000626974616e64006b0000007b696d706c23313336367d00700000006269746f725f61737369676e007e0000007b696d706c233133367d0083000000626974786f7200910000007b696d706c2338347d00960000006269746f7200a5000000617269746800aa0000007b696d706c233330307d00af0000006164645f61737369676e00bf0000006e756d00d70000007b696d706c23397d00dc000000756e636865636b65645f73686c00f8000000636d7000fd000000696d706c7300020100007b696d706c2336307d00070100006c7400140100006765002401000066363400290100007b696d706c23307d003301000072745f7536345f746f5f663634004101000066726f6d5f626974730051010000636f6d70696c65725f6275696c74696e730056010000666c6f6174006001000072657072006d010000657874656e640072010000657874656e643c6633322c206636343e007e0100005f5f657874656e647366646632008c0100007b696d706c23317d009101000066726f6d5f72657072009f010000696e7400a40100007b696d706c23367d00a90100007772617070696e675f73756200b60100007b696d706c233130387d00bb0100006361737400c90100007b696d706c23387d00ce0100007772617070696e675f73686c000000000069000000020014a800005b0000001e000000636f726500230000006e756d00280000007b696d706c23387d003c000000636f6d70696c65725f6275696c74696e730041000000696e7400460000007b696d706c23367d004b0000006c656164696e675f7a65726f7300000000003600000002006fa80000b900000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000666d616600000000009b000000020028a90000a20000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0040000000666d6166004f000000636f7265005400000066363400590000007b696d706c23307d006300000072745f6636345f746f5f7536340071000000746f5f62697473008300000072745f7536345f746f5f663634009100000066726f6d5f626974730000000000420000000200caa900007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f64697674693300000000004200000002003daa00003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f64697674693300000000004300000002007baa00003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469767469330000000000490000000200b9aa0000c400000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e746973660000000000b100000002007dab00007b0000001e000000636f726500230000006e756d00280000007b696d706c2331307d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a000000753132385f746f5f6633325f626974730000000000870000000200f8ab0000700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e74697366003d000000636f7265004200000066333200470000007b696d706c23307d005100000072745f7533325f746f5f663332005f00000066726f6d5f62697473000000000037000000020068ac00006c00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000007374726c656e0000000000440000000200d4ac0000ac00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000706f77003a0000005f5f706f77697366320000000000d2000000020080ad0000a00000001e000000636f726500230000006e756d00280000007b696d706c23327d002d0000007772617070696e675f616273003c0000006f70730041000000617269746800460000007b696d706c233336347d004b0000006d756c5f61737369676e005c000000636f6d70696c65725f6275696c74696e730061000000696e7400660000007b696d706c23377d006b0000006162735f646966660079000000666c6f6174007e000000706f770083000000706f773c6633323e008f0000005f5f706f7769736632000000000038000000020020ae0000c100000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006174616e326600000000007d0000000200e1ae0000750000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006174616e32660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f6633325f746f5f7533320064000000746f5f62697473000000000038000000020056af0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006174616e326600000000004000000002008eaf0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000066616273660000000000370000000200d1af0000da00000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000726f756e640000000000a90000000200abb00000a70000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d0084000000636f70797369676e0096000000726f756e64000000000037000000020052b10000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000726f756e6400000000004000000002008ab10000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007472756e630000000000380000000200cdb100006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000007467616d6d61000000000038000000020030b20000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000007467616d6d61000000000036000000020068b20000d600000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636f73680000000000ba00000002003eb30000a80000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f7536345f746f5f663634004000000066726f6d5f62697473005200000072745f6636345f746f5f7536340060000000746f5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6636343e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d0097000000636f73680000000000360000000200e6b30000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000636f736800000000004200000002001eb40000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006b5f6578706f32000000000046000000020061b400006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469766d6f646469340000000000460000000200c7b400003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f6464693400000000004b000000020005b50000ba00000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f693132385f6164640000000000cf0000000200bfb50000ac0000001e000000636f726500230000006e756d00280000007b696d706c23397d004a000000636f6d70696c65725f6275696c74696e73004f000000696e7400540000007b696d706c23387d00590000006f766572666c6f77696e675f61646400650000007772617070696e675f6164640072000000616464737562007700000055416464537562007c000000756164643c753132383e0089000000416464537562008e0000006164643c693132383e009b0000005f5f727573745f693132385f61646400000000004600000002006bb600006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469766d6f647469340000000000460000000200d1b600003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f6474693400000000004500000002000fb700007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469766d6f64746934000000000045000000020082b700003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6469766d6f647469340000000000460000000200c0b700003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f647469340000000000430000000200feb700001a06000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f617400300000006d756c003a0000005f5f6d756c646633000000000045000000020018be00001101000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f756e6f72647366320000000000e1000000020029bf0000cb0000001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333317d005e000000626974616e64006d000000636d700072000000696d706c7300770000007b696d706c2336307d007c0000006774008d000000636f6d70696c65725f6275696c74696e730092000000666c6f617400970000007b696d706c23307d009c0000007265707200ae000000756e6f72643c6633323e00ba0000005f5f756e6f72647366320000000000440000000200f4bf0000a201000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6c736872736933000000000059010000020096c10000200100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004c73687200320000006c7368723c7533323e003f0000005f5f6c736872736933004d0000007b696d706c2331337d00520000006869005f00000066726f6d5f6c6f5f6869006c0000006c6f007a0000007b696d706c23347d007f0000006c6f676963616c5f736872008b0000007772617070696e675f73686c00980000007b696d706c2332317d009d000000776964656e5f686900aa0000007a65726f5f776964656e00ba000000636f726500bf0000006e756d00c40000007b696d706c23377d00c9000000756e636865636b65645f73687200d60000007772617070696e675f73687200e3000000756e636865636b65645f73686c00ff0000006f7073000401000062697400090100007b696d706c2338327d000e0100006269746f720000000000370000000200b6c20000e000000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f6731700000000000bb000000020096c30000a80000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d00970000006c6f67317000000000003700000002003ec40000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f673170000000000042000000020076c400006f00000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469767369330000000000430000000200e5c400003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f75646976736933000000000042000000020023c500003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f646976736933000000000046000000020061c500000401000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469766d6f647369340000000000e5000000020065c600009b0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007370656369616c697a65645f6469765f72656d002d0000007533325f6469765f72656d00390000007533325f6e6f726d616c697a6174696f6e5f73686966740048000000636f7265004d0000006e756d00520000007b696d706c23387d00570000006c656164696e675f7a65726f7300630000007772617070696e675f7375620070000000756e636865636b65645f73686c007d0000007772617070696e675f73686c008a0000007772617070696e675f616464000000000046000000020000c700003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f6473693400000000003600000002003ec700007b01000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000073696e660000000000b00000000200b9c80000ac0000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073696e6600440000006b5f636f736600560000006b5f73696e660066000000636f7265006b00000066333200700000007b696d706c23307d007a00000072745f6633325f746f5f7533320088000000746f5f626974730097000000707472009c000000726561645f766f6c6174696c653c6633323e000000000036000000020065c90000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000073696e6600000000008200000002009dc90000750000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000072656d5f70696f32660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f7533325f746f5f663332006400000066726f6d5f62697473000000000038000000020012ca0000e000000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f673170660000000000bc0000000200f2ca0000a80000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d00970000006c6f6731706600000000003800000002009acb0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f673170660000000000440000000200d2cb0000ed01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f617368726469330000000000770100000200bfcd0000590100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d000000417368720032000000617368723c6936343e003f0000005f5f61736872646933004d0000007b696d706c2331387d00520000006869005f00000066726f6d5f6c6f5f6869006c0000006c6f007a0000007b696d706c23377d008b0000007772617070696e675f73686c00970000006c6f676963616c5f73687200a40000007b696d706c2332367d00a9000000776964656e5f686900b60000007a65726f5f776964656e00c6000000636f726500cb0000006e756d00d00000007b696d706c23327d00ef000000756e636865636b65645f73686c000a0100007b696d706c23387d000f0100007772617070696e675f737562001c010000756e636865636b65645f73687200290100007772617070696e675f73687200380100006f7073003d01000062697400420100007b696d706c2338397d00470100006269746f72000000000042000000020018cf0000ef01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c6f73693400000000000e010000020007d10000f20000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006d756c002d0000006933325f6f766572666c6f77696e675f6d756c00390000005f5f6d756c6f7369340046000000554d756c6f004b0000006d756c6f3c7533323e00590000007b696d706c23347d005e00000069735f7a65726f006b0000007b696d706c23367d007c0000006f766572666c6f77696e675f61646400890000007b696d706c2332317d008e000000776964656e009b000000776964656e5f6d756c00a8000000776964656e5f686900b8000000636f726500bd0000006e756d00c20000007b696d706c23387d00d40000007772617070696e675f6d756c0000000000470000000200f9d10000cb00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f61746469646600000000008c0000000200c4d20000610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007536345f746f5f6636345f626974730042000000636f726500470000006e756d004c0000007b696d706c23397d00510000006c656164696e675f7a65726f730000000000bc000000020025d30000960000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f617464696466003d000000636f726500420000006e756d00470000007b696d706c23337d004c0000007772617070696e675f6162730059000000756e7369676e65645f6162730068000000663634006d0000007b696d706c23307d007700000072745f7536345f746f5f663634008500000066726f6d5f626974730000000000350000000200bbd300006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000065787000000000003500000002001ed40000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000657870000000000043000000020056d400000401000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756d6f647369330000000000e500000002005ad500009b0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007370656369616c697a65645f6469765f72656d002d0000007533325f6469765f72656d00390000007533325f6e6f726d616c697a6174696f6e5f73686966740048000000636f7265004d0000006e756d00520000007b696d706c23387d00570000006c656164696e675f7a65726f7300630000007772617070696e675f7375620070000000756e636865636b65645f73686c007d0000007772617070696e675f73686c008a0000007772617070696e675f6164640000000000430000000200f5d500003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f64736933000000000043000000020033d600005700000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000616464003a0000005f5f61646473663300000000004b00000002008ad600002a01000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f693132385f7375620000000000160100000200b4d70000e20000001e000000636f726500230000006e756d00280000007b696d706c23397d00490000006f7073004e00000062697400530000007b696d706c23377d00580000006e6f740068000000636f6d70696c65725f6275696c74696e73006d000000696e7400720000007b696d706c23387d00770000006f766572666c6f77696e675f61646400830000007772617070696e675f6164640090000000616464737562009500000055416464537562009a000000756164643c753132383e00a6000000757375623c753132383e00b2000000756164645f6f6e653c753132383e00bf00000041646453756200c40000007375623c693132383e00d10000005f5f727573745f693132385f73756200000000003a000000020096d80000ec00000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c67616d6d615f7200000000009e000000020082d90000a50000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d00640000006c67616d6d615f72007000000073696e5f706900820000006b5f73696e00940000006b5f636f7300000000003a000000020027da0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c67616d6d615f7200000000004000000002005fda0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666c6f6f720000000000380000000200a2da0000bc02000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000006d656d6d6f766500000000003800000002005edd00006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006578706d31660000000000380000000200c1dd0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006578706d31660000000000470000000200f9dd0000e600000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174746973660000000000bc0000000200dfde0000960000001e000000636f726500230000006e756d00280000007b696d706c23347d002d0000007772617070696e675f616273003a000000756e7369676e65645f6162730049000000663332004e0000007b696d706c23307d005800000072745f7533325f746f5f663332006600000066726f6d5f626974730076000000636f6d70696c65725f6275696c74696e73007b000000666c6f61740080000000636f6e7600850000005f5f666c6f6174746973660000000000b1000000020075df00007b0000001e000000636f726500230000006e756d00280000007b696d706c2331307d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a000000753132385f746f5f6633325f626974730000000000590000000200f0df00009100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f310000000000c5000000020081e00000820000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e00340000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f310043000000636f72650048000000707472004d0000006d75745f7074720066000000636f6e73745f707472006b0000007b696d706c23307d00700000006164643c75383e000000000042000000020003e100003501000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f676564663200000000004e010000020038e20000430100001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333327d006b0000007b696d706c2338347d00700000006269746f72007e0000007b696d706c2333387d0083000000626974616e640092000000636d700097000000696d706c73009c0000007b696d706c2336327d00af0000007b696d706c2332357d00c20000007b696d706c2337347d00c7000000676500d4000000677400e10000006c7400ef0000007b696d706c2333317d00f400000065710005010000636f6d70696c65725f6275696c74696e73000a010000666c6f6174000f0100007b696d706c23317d0014010000726570720026010000636d703c6636343e00320100005f5f676564663200000000005a00000002007be300008d00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f340000000000bd000000020008e40000690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e00340000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f340043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7533323e000000000037000000020071e400006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006578706d310000000000370000000200d4e40000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006578706d3100000000004400000002000ce50000ac00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000706f77003a0000005f5f706f77696466320000000000d20000000200b8e50000a00000001e000000636f726500230000006e756d00280000007b696d706c23327d002d0000007772617070696e675f616273003c0000006f70730041000000617269746800460000007b696d706c233336357d004b0000006d756c5f61737369676e005c000000636f6d70696c65725f6275696c74696e730061000000696e7400660000007b696d706c23377d006b0000006162735f646966660079000000666c6f6174007e000000706f770083000000706f773c6636343e008f0000005f5f706f7769646632000000000043000000020058e600009d00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000737562003a0000005f5f73756264663300000000009c0000000200f5e60000820000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f7536345f746f5f663634004000000066726f6d5f626974730050000000636f6d70696c65725f6275696c74696e730055000000666c6f6174005a0000007b696d706c23317d005f00000066726f6d5f72657072006c00000073756200710000005f5f737562646633000000000042000000020077e700007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6d6f646469330000000000420000000200eae700003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6d6f64646933000000000043000000020028e800003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f64646933000000000036000000020066e800006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006174616e0000000000360000000200c9e80000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006174616e000000000044000000020001e900005b01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173686c74693300000000001601000002005cea0000e60000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004173686c00320000006173686c3c753132383e003f0000005f5f6173686c74693300520000007772617070696e675f73686c005e0000006c6f676963616c5f736872006d000000636f726500720000006e756d00770000007b696d706c23397d0089000000756e636865636b65645f73686c00960000007772617070696e675f73687200a3000000756e636865636b65645f73687200b10000007b696d706c23387d00b60000007772617070696e675f73756200c50000006f707300ca00000062697400cf0000007b696d706c2338347d00d40000006269746f72000000000043000000020042eb00000207000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000646976003a0000005f5f646976736633000000000091040000020044f200009b0500001e000000636f72650023000000663332003200000072745f6633325f746f5f753332005200000072745f7533325f746f5f663332006f0000006f7073007400000062697400790000007b696d706c2333317d008b0000007b696d706c233133357d009e0000007b696d706c233836337d00b10000007b696d706c23313336357d00c40000007b696d706c233238377d00d70000007b696d706c23313735337d00ea0000007b696d706c23313437377d00fd0000007b696d706c2338337d00100100007b696d706c2333327d0015010000626974616e6400220100007b696d706c233133367d0027010000626974786f7200350100007b696d706c233931317d003a01000073687200480100007b696d706c23313336367d004d0100006269746f725f61737369676e005b0100007b696d706c233333357d006001000073686c006e0100007b696d706c23313737377d00730100007368725f61737369676e00810100007b696d706c23313530317d008601000073686c5f61737369676e00940100007b696d706c2338347d00990100006269746f7200a8010000617269746800ad0100007b696d706c2335397d00bf0100007b696d706c233239397d00d20100007b696d706c2336307d00d701000073756200e40100007b696d706c233330307d00e90100006164645f61737369676e00f9010000636d7000fe010000696d706c7300300200007b696d706c2332347d00430200007b696d706c2336327d004802000067650055020000677400620200006c7400700200007b696d706c2332357d0075020000657100850200006e756d00110300007772617070696e675f616464001f0300007b696d706c23397d0065030000756e636865636b65645f73686c007f030000756e636865636b65645f73687200990300007772617070696e675f73756200a70300007b696d706c23327d00ba0300007b696d706c23337d00cc0300007772617070696e675f6e656700da0300007b696d706c2331307d00df0300007772617070696e675f6d756c00ee03000066363400f30300007b696d706c23307d00fd03000072745f6636345f746f5f753634000b040000746f5f62697473001d04000072745f7536345f746f5f663634002b04000066726f6d5f62697473003b040000636f6d70696c65725f6275696c74696e730040040000666c6f61740063040000646976006804000064697633323c6633323e00740400005f5f646976736633008104000064697636343c6636343e008e0400005f5f646976646633009b040000646976363400a00400006e65676174655f75363400af0400007b696d706c23317d00b40400007265707200c004000066726f6d5f7265707200ce040000696e7400d30400007b696d706c23367d00090500007b696d706c2332327d000e050000776964656e00290500007b696d706c2331347d002e0500006869003c0500007b696d706c2332337d0041050000776964656e5f6d756c004f0500007b696d706c23387d006c0500007772617070696e675f73686c00780500007772617070696e675f73687200850500007b696d706c233132307d008a050000636173740000000000b10000000200dff70000b90000001e000000636f726500230000006e756d00280000007b696d706c23387d00540000007b696d706c23327d00660000007772617070696e675f73756200740000007b696d706c23397d00790000006c656164696e675f7a65726f730088000000636f6d70696c65725f6275696c74696e73008d000000666c6f617400920000007b696d706c23307d00a40000007b696d706c23317d00a90000006e6f726d616c697a65000000000049000000020098f800005203000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f617400300000007472756e63003a0000005f5f7472756e6364667366320000000000800200000200eafb0000370200001e000000636f72650023000000663634003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333327d006b0000007b696d706c233931317d0070000000736872007e0000007b696d706c2338347d00910000007b696d706c233333357d009600000073686c00a40000007b696d706c2333317d00a9000000626974616e6400b60000007b696d706c23313336357d00bb0000006269746f725f61737369676e00c90000007b696d706c2338337d00ce0000006269746f7200dd000000617269746800e20000007b696d706c233239397d00e70000006164645f61737369676e00f70000006e756d00fc0000007b696d706c23397d000e010000756e636865636b65645f736872002a010000636d70002f010000696d706c7300340100007b696d706c2336327d00390100006c74004601000067740053010000676500610100007b696d706c2332357d00660100006e65007301000065710083010000663332009201000072745f7533325f746f5f66333200a001000066726f6d5f6269747300b0010000636f6d70696c65725f6275696c74696e7300b5010000666c6f617400ba0100007b696d706c23317d00bf0100007265707200cc0100007472756e6300d10100007472756e633c6636342c206633323e00dd0100005f5f7472756e63646673663200eb0100007b696d706c23307d00f001000066726f6d5f7265707200fe010000696e7400030200007b696d706c23387d00080200007772617070696e675f73756200140200007772617070696e675f73687200210200007b696d706c233133307d002602000063617374000000000043000000020021fe00008107000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000646976003a0000005f5f6469766466330000000000490000000200a2050100c400000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e746964660000000000b10000000200660601007b0000001e000000636f726500230000006e756d00280000007b696d706c2331307d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a000000753132385f746f5f6636345f626974730000000000870000000200e1060100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e74696466003d000000636f7265004200000066363400470000007b696d706c23307d005100000072745f7536345f746f5f663634005f00000066726f6d5f626974730000000000420000000200510701007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6d6f647469330000000000420000000200c40701003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6d6f647469330000000000430000000200020801003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f647469330000000000420000000200400801003501000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f657164663200000000004e010000020075090100430100001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333327d006b0000007b696d706c2338347d00700000006269746f72007e0000007b696d706c2333387d0083000000626974616e640092000000636d700097000000696d706c73009c0000007b696d706c2336327d00af0000007b696d706c2332357d00c20000007b696d706c2337347d00c7000000676500d4000000677400e10000006c7400ef0000007b696d706c2333317d00f400000065710005010000636f6d70696c65725f6275696c74696e73000a010000666c6f6174000f0100007b696d706c23317d0014010000726570720026010000636d703c6636343e00320100005f5f65716466320000000000440000000200b80a01008901000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173687274693300000000005b0100000200410c0100380100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d000000417368720032000000617368723c693132383e003f0000005f5f61736872746933004d0000007b696d706c2332377d0052000000776964656e5f686900600000007b696d706c2331397d006500000066726f6d5f6c6f5f686900840000007772617070696e675f73686c00900000006c6f676963616c5f736872009f000000636f726500a40000006e756d00a90000007b696d706c23337d00d5000000756e636865636b65645f73686c00e30000007b696d706c23387d00e80000007772617070696e675f73756200f60000007b696d706c23397d00fb0000007772617070696e675f7368720008010000756e636865636b65645f73687200170100006f7073001c01000062697400210100007b696d706c2339307d00260100006269746f720000000000370000000200790d01001e01000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000006d656d7365740000000000370000000200970e01001701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f67326600000000009c0000000200ae0f0100950000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006c6f673266000000000037000000020043100100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f67326600000000003800000002007b100100a800000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c646578706600000000008b000000020023110100870000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007363616c626e6600440000006c64657870660054000000636f72650059000000663332005e0000007b696d706c23307d006800000072745f7533325f746f5f663332007600000066726f6d5f626974730000000000380000000200aa110100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c64657870660000000000370000000200e21101002301000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000061636f73660000000000a2000000020005130100a10000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d008400000061636f73660090000000720000000000370000000200a6130100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000061636f73660000000000400000000200de130100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073717274660000000000430000000200211401006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756d6f647469330000000000430000000200871401003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f647469330000000000360000000200c51401009700000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000072696e7400000000007b00000002005c150100820000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d007200000072696e740000000000590000000200de1501008500000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f310000000000b7000000020063160100690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e00340000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f310043000000636f72650048000000707472004d0000006d75745f70747200520000007b696d706c23307d00570000006164643c75383e0000000000490000000200cc160100cf00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e646973660000000000af00000002009b1701007b0000001e000000636f726500230000006e756d00280000007b696d706c23397d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a0000007536345f746f5f6633325f62697473000000000087000000020016180100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e64697366003d000000636f7265004200000066333200470000007b696d706c23307d005100000072745f7533325f746f5f663332005f00000066726f6d5f6269747300000000005a0000000200861801008d00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f320000000000bd000000020013190100690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e00340000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f320043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7531363e00000000003700000002007c1901001701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f67313000000000009c0000000200931a0100950000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006c6f6731300000000000370000000200281b0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f6731300000000000370000000200601b0100d600000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636f7368660000000000bb0000000200361c0100a80000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f7533325f746f5f663332004000000066726f6d5f62697473005200000072745f6633325f746f5f7533320060000000746f5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d0097000000636f7368660000000000370000000200de1c0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000636f7368660000000000430000000200161d0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006b5f6578706f326600000000004c0000000200591d01004701000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f753132385f7375626f0000000000560100000200a01e0100130100001e000000636f726500230000006e756d00280000007b696d706c23397d00490000006f7073004e00000062697400530000007b696d706c23377d00580000006e6f740067000000636d70006c000000696d706c7300710000007b696d706c2336347d00760000006c740087000000636f6d70696c65725f6275696c74696e73008c000000696e7400910000007b696d706c23387d00960000006f766572666c6f77696e675f61646400a20000007772617070696e675f61646400af00000061646473756200b40000005541646453756200b9000000756164643c753132383e00c5000000757375623c753132383e00d1000000756164645f6f6e653c753132383e00de00000041646453756200e30000007375623c753132383e00f00000005375626f00f50000007375626f3c753132383e00020100005f5f727573745f753132385f7375626f0000000000370000000200b31f01009700000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000072696e746600000000007c00000002004a200100820000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d007200000072696e74660000000000370000000200cc2001001301000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000065787032660000000000340100000200df210100fe0000001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000007074720054000000726561645f766f6c6174696c653c6633323e0061000000636f6e73745f707472006b0000006164643c7536343e007b000000736c6963650080000000696e64657800850000007b696d706c23327d008a0000006765745f756e636865636b65643c7536343e009d0000006765745f756e636865636b65643c7536342c207573697a653e00ac00000066363400b10000007b696d706c23307d00bb00000072745f7536345f746f5f66363400c900000066726f6d5f6269747300d9000000636f6d70696c65725f6275696c74696e7300de0000006d61746800e30000006c69626d00ed00000065787032660000000000370000000200dd220100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000065787032660000000000450000000200152301007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469766d6f646469340000000000450000000200882301003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6469766d6f646469340000000000460000000200c62301003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f64646934000000000044000000020004240100ce01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6c73687264693300000000006a0100000200d22501003a0100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004c73687200320000006c7368723c7536343e003f0000005f5f6c736872646933004d0000007b696d706c2331347d00520000006869005f00000066726f6d5f6c6f5f6869006c0000006c6f007a0000007b696d706c23367d007f0000006c6f676963616c5f736872008b0000007772617070696e675f73686c00980000007b696d706c2332327d009d000000776964656e5f686900b70000007a65726f5f776964656e00c7000000636f726500cc0000006e756d00d10000007b696d706c23387d00d6000000756e636865636b65645f73687200e30000007772617070696e675f73687200f00000007772617070696e675f73756200fd000000756e636865636b65645f73686c00190100006f7073001e01000062697400230100007b696d706c2338337d00280100006269746f7200000000004300000002000c2701006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756d6f646469330000000000430000000200722701003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f646469330000000000410000000200b0270100b901000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c746933000000000004010000020069290100e60000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007b696d706c2332367d002d0000007a65726f5f776964656e003a0000007a65726f5f776964656e5f6d756c00480000006d756c004d0000004d756c00520000006d756c3c693132383e005f0000005f5f6d756c746933006d0000007b696d706c2331387d0072000000686900800000007b696d706c2331317d00850000007772617070696e675f61646400920000007b696d706c23397d00970000007772617070696e675f6d756c00a6000000636f726500ab0000006e756d00b00000007b696d706c23337d00d00000007b696d706c23347d00000000004300000002004f2a01000401000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469767369330000000000e50000000200532b01009b0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007370656369616c697a65645f6469765f72656d002d0000007533325f6469765f72656d00390000007533325f6e6f726d616c697a6174696f6e5f73686966740048000000636f7265004d0000006e756d00520000007b696d706c23387d00570000006c656164696e675f7a65726f7300630000007772617070696e675f7375620070000000756e636865636b65645f73686c007d0000007772617070696e675f73686c008a0000007772617070696e675f6164640000000000430000000200ee2b01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f7564697673693300000000003800000002002c2c0100e300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006879706f746600000000009d00000002000f2d0100950000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006879706f74660000000000380000000200a42d0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006879706f74660000000000400000000200dc2d0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000737172746600000000003b00000002001f2e0100d201000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c67616d6d61665f7200000000003b0000000200f12f0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c67616d6d61665f72000000000041000000020029300100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666c6f6f726600000000003600000002006c3001002301000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000061636f730000000000a100000002008f310100a10000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d008400000061636f73009000000072000000000036000000020030320100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000061636f7300000000003f000000020068320100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000737172740000000000490000000200ab320100a500000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e7369646600000000008c000000020050330100610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007533325f746f5f6636345f626974730042000000636f726500470000006e756d004c0000007b696d706c23387d00510000006c656164696e675f7a65726f730000000000870000000200b1330100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e73696466003d000000636f7265004200000066363400470000007b696d706c23307d005100000072745f7536345f746f5f663634005f00000066726f6d5f626974730000000000410000000200213401004402000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c646933000000000034010000020065360100400100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007b696d706c2331347d003a00000066726f6d5f6c6f5f686900480000006d756c004d0000004d756c00520000006d756c3c7536343e005f0000005f5f6d756c646933006d0000007b696d706c23367d007f0000007b696d706c23387d00840000007772617070696e675f61646400910000007b696d706c2331337d00960000006c6f00a3000000686900b10000007b696d706c2332317d00c30000007a65726f5f776964656e5f6d756c00d10000007b696d706c2332327d00e3000000776964656e5f686900f00000007a65726f5f776964656e0000010000636f726500050100006e756d001c0100007772617070696e675f6d756c002a0100007b696d706c23397d0000000000490000000200a53701008101000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f727573745f753132385f6d756c6f0000000000db000000020026390100cc0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007b696d706c23387d002d00000069735f7a65726f003a0000006d756c003f000000554d756c6f00440000006d756c6f3c753132383e00510000005f5f727573745f753132385f6d756c6f005f0000007b696d706c2331307d00700000006f766572666c6f77696e675f616464007d0000007b696d706c2332337d0082000000776964656e5f6d756c0092000000636f726500970000006e756d00ae0000007772617070696e675f6d756c0000000000590000000200f23901007400000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f340000000000820000000200663a0100440000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e00340000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f340000000000350000000200aa3a01003f02000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000666d610000000000550100000200e93c0100310100001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f0000006e756d00740000007b696d706c2331307d00790000007772617070696e675f6d756c00870000007b696d706c23397d008c0000007772617070696e675f61646400990000006f766572666c6f77696e675f73756200b30000006c656164696e675f7a65726f7300c00000007b696d706c23337d00c50000007772617070696e675f73756200d20000007772617070696e675f6e656700e2000000636f6d70696c65725f6275696c74696e7300e70000006d61746800ec0000006c69626d00f60000006e6f726d616c697a650002010000666d61000e0100006d756c00200100007363616c626e00000000003500000002001a3e0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000666d610000000000360000000200523e01006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000657870660000000000360000000200b53e0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000657870660000000000370000000200ed3e0100d100000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006174616e320000000000a20000000200be3f01008e0000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006174616e320042000000636f72650047000000663634004c0000007b696d706c23307d005600000072745f6636345f746f5f7536340064000000746f5f6269747300730000006e756d00780000007b696d706c23387d007d0000007772617070696e675f73756200000000003700000002004c400100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006174616e3200000000003f000000020084400100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666162730000000000440000000200c74001006701000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6c73687274693300000000001601000002002e420100e60000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004c73687200320000006c7368723c753132383e003f0000005f5f6c736872746933004d0000007b696d706c23387d00520000007772617070696e675f73686c005e0000006c6f676963616c5f736872006d000000636f726500720000006e756d007c0000007772617070696e675f737562008a0000007b696d706c23397d009c000000756e636865636b65645f73686c00a90000007772617070696e675f73687200b6000000756e636865636b65645f73687200c50000006f707300ca00000062697400cf0000007b696d706c2338347d00d40000006269746f72000000000049000000020014430100a500000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e7369736600000000008c0000000200b9430100610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007533325f746f5f6633325f626974730042000000636f726500470000006e756d004c0000007b696d706c23387d00510000006c656164696e675f7a65726f7300000000008700000002001a440100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e73697366003d000000636f7265004200000066333200470000007b696d706c23307d005100000072745f7533325f746f5f663332005f00000066726f6d5f6269747300000000003600000002008a4401007f01000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636f73660000000000b0000000020009460100ac0000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000636f736600440000006b5f73696e6600560000006b5f636f73660066000000636f7265006b00000066333200700000007b696d706c23307d007a00000072745f6633325f746f5f7533320088000000746f5f626974730097000000707472009c000000726561645f766f6c6174696c653c6633323e0000000000360000000200b5460100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000636f73660000000000820000000200ed460100750000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000072656d5f70696f32660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f7533325f746f5f663332006400000066726f6d5f626974730000000000370000000200624701005100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000006d656d636d700000000000420000000200b3470100f701000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c6f64693400000000000e0100000200aa490100f20000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006d756c002d0000006936345f6f766572666c6f77696e675f6d756c00390000005f5f6d756c6f6469340046000000554d756c6f004b0000006d756c6f3c7536343e00590000007b696d706c23367d005e00000069735f7a65726f006b0000007b696d706c23387d007c0000006f766572666c6f77696e675f61646400890000007b696d706c2332327d008e000000776964656e009b000000776964656e5f6d756c00a8000000776964656e5f686900b8000000636f726500bd0000006e756d00c20000007b696d706c23397d00d40000007772617070696e675f6d756c00000000003600000002009c4a01004801000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006173696e0000000000df0000000200e44b0100c80000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d007f0000006765745f686967685f776f726400910000006173696e009d000000636f6d705f7200aa000000776974685f7365745f6c6f775f776f726400b70000006765745f6c6f775f776f72640000000000360000000200ac4c0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006173696e00000000003f0000000200e44c0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006661627300000000003f0000000200274d0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007371727400000000004300000002006a4d01009d00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000737562003a0000005f5f73756273663300000000008f0000000200074e0100820000001e000000636f72650023000000663332003200000072745f7533325f746f5f663332004000000066726f6d5f626974730050000000636f6d70696c65725f6275696c74696e730055000000666c6f6174005a0000007b696d706c23307d005f00000066726f6d5f72657072006c00000073756200710000005f5f7375627366330000000000350000000200894e01006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d003500000062636d700000000000420000000200ec4e01006f00000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6d6f6473693300000000004300000002005b4f01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f647369330000000000420000000200994f01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6d6f647369330000000000380000000200d74f01001701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f6731306600000000009d0000000200ee500100950000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006c6f67313066000000000038000000020083510100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f673130660000000000370000000200bb5101007b01000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000006d656d637079000000000047000000020036530100f100000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174646973660000000000bc000000020027540100960000001e000000636f726500230000006e756d00280000007b696d706c23337d002d0000007772617070696e675f616273003a000000756e7369676e65645f6162730049000000663332004e0000007b696d706c23307d005800000072745f7533325f746f5f663332006600000066726f6d5f626974730076000000636f6d70696c65725f6275696c74696e73007b000000666c6f61740080000000636f6e7600850000005f5f666c6f6174646973660000000000af0000000200bd5401007b0000001e000000636f726500230000006e756d00280000007b696d706c23397d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a0000007536345f746f5f6633325f6269747300000000005a0000000200385501008d00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f380000000000bd0000000200c5550100690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e00340000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f380043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7536343e00000000004b00000002002e5601007a00000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006c656164696e675f7a65726f73003a0000005f5f636c7a73693200000000006b0000000200a85601004a0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006c656164696e675f7a65726f73002d0000007573697a655f6c656164696e675f7a65726f735f64656661756c7400390000005f5f636c7a73693200000000004c0000000200f2560100e700000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f693132385f6164646f00000000000f0100000200d9570100dd0000001e000000636f726500230000006e756d00280000007b696d706c23397d0049000000636d70004e000000696d706c7300530000007b696d706c2337367d00580000006c740069000000636f6d70696c65725f6275696c74696e73006e000000696e7400730000007b696d706c23387d00780000006f766572666c6f77696e675f61646400840000007772617070696e675f6164640091000000616464737562009600000055416464537562009b000000756164643c753132383e00a800000041646453756200ad0000006164643c693132383e00ba0000004164646f00bf0000006164646f3c693132383e00cc0000005f5f727573745f693132385f6164646f0000000000350000000200b65801006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000706f77000000000035000000020019590100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000706f770000000000490000000200515901009201000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f727573745f693132385f6d756c6f0000000000f40000000200e35a0100d80000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006d756c002d000000693132385f6f766572666c6f77696e675f6d756c00390000005f5f727573745f693132385f6d756c6f0046000000554d756c6f004b0000006d756c6f3c753132383e00590000007b696d706c23387d005e00000069735f7a65726f006b0000007b696d706c2331307d007c0000006f766572666c6f77696e675f61646400890000007b696d706c2332337d008e000000776964656e5f6d756c009e000000636f726500a30000006e756d00ba0000007772617070696e675f6d756c0000000000590000000200bb5b01007400000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f3200000000008200000002002f5c0100440000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e00340000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f320000000000490000000200735c0100a500000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e6469646600000000008c0000000200185d0100610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007536345f746f5f6636345f626974730042000000636f726500470000006e756d004c0000007b696d706c23397d00510000006c656164696e675f7a65726f730000000000870000000200795d0100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e64696466003d000000636f7265004200000066363400470000007b696d706c23307d005100000072745f7536345f746f5f663634005f00000066726f6d5f626974730000000000420000000200e95d01007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f64697664693300000000004200000002005c5e01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f64697664693300000000004300000002009a5e01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766469330000000000b00000000200d85e0100de00000026000000636f7265002b00000070616e69636b696e67003000000070616e6963005000000072756e74696d65005d00000070616e69635f6e6f756e77696e645f666d74008b000000726573756c740090000000756e777261705f6661696c656400ae000000736c69636500b30000007b696d706c23307d00b8000000636f70795f66726f6d5f736c69636500bd0000006c656e5f6d69736d617463685f6661696c000000000000ae390f2e64656275675f70756274797065730e00000002000000000074000000000000000e000000020074000000320b0000000000000e0000000200a60b000043000000000000000e0000000200e90b0000fe0e0000000000000e0000000200e71a0000b9000000000000000e0000000200a01b00007f000000000000000e00000002001f1c0000a5020000000000000e0000000200c41e0000e1050000000000000e0000000200a524000043000000000000000e0000000200e824000043000000000000000e00000002002b25000075010000000000000e0000000200a0260000d1040000000000000e0000000200712b000011020000000000000e0000000200822d000043000000000000000e0000000200c52d00006e020000000000000e000000020033300000ac010000000000000e0000000200df31000043000000000000000e00000002002232000050010000000000000e00000002007233000033010000000000000e0000000200a5340000eb010000000000000e000000020090360000ac010000000000000e00000002003c38000043000000000000000e00000002007f380000c1010000000000000e0000000200403a000013010000000000000e0000000200533b0000c9000000000000000e00000002001c3c0000c8000000000000000e0000000200e43c0000c9000000000000000e0000000200ad3d0000c8000000000000000e0000000200753e0000c7000000000000000e00000002003c3f0000c8000000000000000e000000020004400000c7000000000000000e0000000200cb400000c7000000000000000e000000020092410000c8000000000000000e00000002005a420000c8000000000000000e000000020022430000c7000000000000000e0000000200e9430000c7000000000000000e0000000200b0440000d1000000000000000e000000020081450000d1000000000000000e000000020052460000c9000000000000000e00000002001b470000c9000000000000000e0000000200e4470000c9000000000000000e0000000200ad480000c9000000000000000e000000020076490000a8000000000000000e00000002001e4a000087000000000000000e0000000200a54a000038000000000000000e0000000200dd4a0000cd010000000000000e0000000200aa4c00004c010000000000000e0000000200f64d000025010000000000000e00000002001b4f000030010000000000000e00000002004b50000017010000000000000e000000020062510000a2000000000000000e000000020004520000ce010000000000000e0000000200d25300003a010000000000000e00000002000c55000039010000000000000e000000020045560000c6000000000000000e00000002000b57000038000000000000000e000000020043570000d7000000000000000e00000002001a580000dd000000000000000e0000000200f75800002f010000000000000e0000000200265a00009a000000000000000e0000000200c05a000038000000000000000e0000000200f85a000075000000000000000e00000002006d5b000092010000000000000e0000000200ff5c0000d8000000000000000e0000000200d75d0000ff000000000000000e0000000200d65e0000a1000000000000000e0000000200775f000038000000000000000e0000000200af5f000043000000000000000e0000000200f25f0000d3000000000000000e0000000200c5600000a2000000000000000e000000020067610000e6000000000000000e00000002004d62000096000000000000000e0000000200e36200007b000000000000000e00000002005e63000081000000000000000e0000000200df63000069000000000000000e000000020048640000cf000000000000000e00000002001765000081000000000000000e00000002009865000038000000000000000e0000000200d065000043000000000000000e00000002001366000043000000000000000e00000002005666000063000000000000000e0000000200b966000038000000000000000e0000000200f1660000da000000000000000e0000000200cb670000a7000000000000000e00000002007268000038000000000000000e0000000200aa68000043000000000000000e0000000200ed680000d1000000000000000e0000000200be690000ae000000000000000e00000002006c6a000038000000000000000e0000000200a46a00006f000000000000000e0000000200136b00003e000000000000000e0000000200516b00003e000000000000000e00000002008f6b0000d1000000000000000e0000000200606c0000ae000000000000000e00000002000e6d000038000000000000000e0000000200466d000089010000000000000e0000000200cf6e0000e0000000000000000e0000000200af6f000038000000000000000e0000000200e76f0000fe050000000000000e0000000200e575000098040000000000000e00000002007d7a0000b9000000000000000e0000000200367b0000a2010000000000000e0000000200d87c00002d010000000000000e0000000200057e0000d3000000000000000e0000000200d87e0000a2000000000000000e00000002007a7f000057010000000000000e0000000200d180000013010000000000000e0000000200e481000066000000000000000e00000002004a8200003e000000000000000e000000020088820000be000000000000000e000000020046830000a8000000000000000e0000000200ee83000038000000000000000e000000020026840000cb000000000000000e0000000200f184000061000000000000000e00000002005285000096000000000000000e0000000200e885000081000000000000000e00000002006986000069000000000000000e0000000200d2860000be000000000000000e000000020090870000a8000000000000000e00000002003888000038000000000000000e00000002007088000004010000000000000e000000020074890000ac000000000000000e0000000200208a000038000000000000000e0000000200588a0000c1000000000000000e0000000200198b000095000000000000000e0000000200ae8b000038000000000000000e0000000200e68b000043000000000000000e0000000200298c000011010000000000000e00000002003a8d0000cb000000000000000e0000000200058e000025010000000000000e00000002002a8f000030010000000000000e00000002005a90000063000000000000000e0000000200bd90000038000000000000000e0000000200f590000074000000000000000e00000002006991000043000000000000000e0000000200ac91000038000000000000000e0000000200e4910000e4000000000000000e0000000200c892000099000000000000000e00000002006193000038000000000000000e000000020099930000cb000000000000000e00000002006494000061000000000000000e0000000200c594000096000000000000000e00000002005b9500009d000000000000000e0000000200f895000082000000000000000e00000002007a96000081000000000000000e0000000200fb96000069000000000000000e00000002006497000074000000000000000e0000000200d897000044000000000000000e00000002001c98000066000000000000000e0000000200829800003e000000000000000e0000000200c098000003040000000000000e0000000200c39c000011010000000000000e0000000200d49d000038000000000000000e00000002000c9e000043000000000000000e00000002004f9e000043000000000000000e0000000200929e000057000000000000000e0000000200e99e0000c1000000000000000e0000000200aa9f000095000000000000000e00000002003fa0000038000000000000000e000000020077a0000043000000000000000e0000000200baa0000067010000000000000e000000020021a200001e010000000000000e00000002003fa3000038000000000000000e000000020077a30000bf020000000000000e000000020036a60000de010000000000000e000000020014a800005b000000000000000e00000002006fa80000b9000000000000000e000000020028a90000a2000000000000000e0000000200caa9000073000000000000000e00000002003daa00003e000000000000000e00000002007baa00003e000000000000000e0000000200b9aa0000c4000000000000000e00000002007dab00007b000000000000000e0000000200f8ab000070000000000000000e000000020068ac00006c000000000000000e0000000200d4ac0000ac000000000000000e000000020080ad0000a0000000000000000e000000020020ae0000c1000000000000000e0000000200e1ae000075000000000000000e000000020056af000038000000000000000e00000002008eaf000043000000000000000e0000000200d1af0000da000000000000000e0000000200abb00000a7000000000000000e000000020052b1000038000000000000000e00000002008ab1000043000000000000000e0000000200cdb1000063000000000000000e000000020030b2000038000000000000000e000000020068b20000d6000000000000000e00000002003eb30000a8000000000000000e0000000200e6b3000038000000000000000e00000002001eb4000043000000000000000e000000020061b4000066000000000000000e0000000200c7b400003e000000000000000e000000020005b50000ba000000000000000e0000000200bfb50000ac000000000000000e00000002006bb6000066000000000000000e0000000200d1b600003e000000000000000e00000002000fb7000073000000000000000e000000020082b700003e000000000000000e0000000200c0b700003e000000000000000e0000000200feb700001a060000000000000e000000020018be000011010000000000000e000000020029bf0000cb000000000000000e0000000200f4bf0000a2010000000000000e000000020096c1000020010000000000000e0000000200b6c20000e0000000000000000e000000020096c30000a8000000000000000e00000002003ec4000038000000000000000e000000020076c400006f000000000000000e0000000200e5c400003e000000000000000e000000020023c500003e000000000000000e000000020061c5000004010000000000000e000000020065c600009b000000000000000e000000020000c700003e000000000000000e00000002003ec700007b010000000000000e0000000200b9c80000ac000000000000000e000000020065c9000038000000000000000e00000002009dc9000075000000000000000e000000020012ca0000e0000000000000000e0000000200f2ca0000a8000000000000000e00000002009acb000038000000000000000e0000000200d2cb0000ed010000000000000e0000000200bfcd000059010000000000000e000000020018cf0000ef010000000000000e000000020007d10000f2000000000000000e0000000200f9d10000cb000000000000000e0000000200c4d2000061000000000000000e000000020025d3000096000000000000000e0000000200bbd3000063000000000000000e00000002001ed4000038000000000000000e000000020056d4000004010000000000000e00000002005ad500009b000000000000000e0000000200f5d500003e000000000000000e000000020033d6000057000000000000000e00000002008ad600002a010000000000000e0000000200b4d70000e2000000000000000e000000020096d80000ec000000000000000e000000020082d90000a5000000000000000e000000020027da000038000000000000000e00000002005fda000043000000000000000e0000000200a2da0000bc020000000000000e00000002005edd000063000000000000000e0000000200c1dd000038000000000000000e0000000200f9dd0000e6000000000000000e0000000200dfde000096000000000000000e000000020075df00007b000000000000000e0000000200f0df000091000000000000000e000000020081e0000082000000000000000e000000020003e1000035010000000000000e000000020038e2000043010000000000000e00000002007be300008d000000000000000e000000020008e4000069000000000000000e000000020071e4000063000000000000000e0000000200d4e4000038000000000000000e00000002000ce50000ac000000000000000e0000000200b8e50000a0000000000000000e000000020058e600009d000000000000000e0000000200f5e6000082000000000000000e000000020077e7000073000000000000000e0000000200eae700003e000000000000000e000000020028e800003e000000000000000e000000020066e8000063000000000000000e0000000200c9e8000038000000000000000e000000020001e900005b010000000000000e00000002005cea0000e6000000000000000e000000020042eb000002070000000000000e000000020044f200009b050000000000000e0000000200dff70000b9000000000000000e000000020098f8000052030000000000000e0000000200eafb000037020000000000000e000000020021fe000081070000000000000e0000000200a2050100c4000000000000000e0000000200660601007b000000000000000e0000000200e106010070000000000000000e00000002005107010073000000000000000e0000000200c40701003e000000000000000e0000000200020801003e000000000000000e00000002004008010035010000000000000e00000002007509010043010000000000000e0000000200b80a010089010000000000000e0000000200410c010038010000000000000e0000000200790d01001e010000000000000e0000000200970e010017010000000000000e0000000200ae0f010095000000000000000e00000002004310010038000000000000000e00000002007b100100a8000000000000000e00000002002311010087000000000000000e0000000200aa11010038000000000000000e0000000200e211010023010000000000000e000000020005130100a1000000000000000e0000000200a613010038000000000000000e0000000200de13010043000000000000000e00000002002114010066000000000000000e0000000200871401003e000000000000000e0000000200c514010097000000000000000e00000002005c15010082000000000000000e0000000200de15010085000000000000000e00000002006316010069000000000000000e0000000200cc160100cf000000000000000e00000002009b1701007b000000000000000e00000002001618010070000000000000000e0000000200861801008d000000000000000e00000002001319010069000000000000000e00000002007c19010017010000000000000e0000000200931a010095000000000000000e0000000200281b010038000000000000000e0000000200601b0100d6000000000000000e0000000200361c0100a8000000000000000e0000000200de1c010038000000000000000e0000000200161d010043000000000000000e0000000200591d010047010000000000000e0000000200a01e010013010000000000000e0000000200b31f010097000000000000000e00000002004a20010082000000000000000e0000000200cc20010013010000000000000e0000000200df210100fe000000000000000e0000000200dd22010038000000000000000e00000002001523010073000000000000000e0000000200882301003e000000000000000e0000000200c62301003e000000000000000e000000020004240100ce010000000000000e0000000200d22501003a010000000000000e00000002000c27010066000000000000000e0000000200722701003e000000000000000e0000000200b0270100b9010000000000000e000000020069290100e6000000000000000e00000002004f2a010004010000000000000e0000000200532b01009b000000000000000e0000000200ee2b01003e000000000000000e00000002002c2c0100e3000000000000000e00000002000f2d010095000000000000000e0000000200a42d010038000000000000000e0000000200dc2d010043000000000000000e00000002001f2e0100d2010000000000000e0000000200f12f010038000000000000000e00000002002930010043000000000000000e00000002006c30010023010000000000000e00000002008f310100a1000000000000000e00000002003032010038000000000000000e00000002006832010043000000000000000e0000000200ab320100a5000000000000000e00000002005033010061000000000000000e0000000200b133010070000000000000000e00000002002134010044020000000000000e00000002006536010040010000000000000e0000000200a537010081010000000000000e000000020026390100cc000000000000000e0000000200f239010074000000000000000e0000000200663a010044000000000000000e0000000200aa3a01003f020000000000000e0000000200e93c010031010000000000000e00000002001a3e010038000000000000000e0000000200523e010063000000000000000e0000000200b53e010038000000000000000e0000000200ed3e0100d1000000000000000e0000000200be3f01008e000000000000000e00000002004c40010038000000000000000e00000002008440010043000000000000000e0000000200c740010067010000000000000e00000002002e420100e6000000000000000e000000020014430100a5000000000000000e0000000200b943010061000000000000000e00000002001a44010070000000000000000e00000002008a4401007f010000000000000e000000020009460100ac000000000000000e0000000200b546010038000000000000000e0000000200ed46010075000000000000000e00000002006247010051000000000000000e0000000200b3470100f7010000000000000e0000000200aa490100f2000000000000000e00000002009c4a010048010000000000000e0000000200e44b0100c8000000000000000e0000000200ac4c010038000000000000000e0000000200e44c010043000000000000000e0000000200274d010043000000000000000e00000002006a4d01009d000000000000000e0000000200074e010082000000000000000e0000000200894e010063000000000000000e0000000200ec4e01006f000000000000000e00000002005b4f01003e000000000000000e0000000200994f01003e000000000000000e0000000200d74f010017010000000000000e0000000200ee50010095000000000000000e00000002008351010038000000000000000e0000000200bb5101007b010000000000000e000000020036530100f1000000000000000e00000002002754010096000000000000000e0000000200bd5401007b000000000000000e0000000200385501008d000000000000000e0000000200c555010069000000000000000e00000002002e5601007a000000000000000e0000000200a85601004a000000000000000e0000000200f2560100e7000000000000000e0000000200d9570100dd000000000000000e0000000200b658010063000000000000000e00000002001959010038000000000000000e00000002005159010092010000000000000e0000000200e35a0100d8000000000000000e0000000200bb5b010074000000000000000e00000002002f5c010044000000000000000e0000000200735c0100a5000000000000000e0000000200185d010061000000000000000e0000000200795d010070000000000000000e0000000200e95d010073000000000000000e00000002005c5e01003e000000000000000e00000002009a5e01003e000000000000000e0000000200d85e0100de0000000000000000faf4060b2e64656275675f6c696e656e000000040040000000010101fb0e0d0001010101000000010000016c6962726172792f616c6c6f632f73726300007261775f7665632e727300010000616c6c6f632e7273000100000005050a0005021574000003a0040102080001010402050d0a0005029602010003a103010208000101550b00000400d3020000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f69746572002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c696365002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f697465722f6164617074657273000072656d5f70696f325f6c617267652e727300010000636f6e73745f7074722e72730002000072616e67652e7273000300006d75745f7074722e727300020000636d702e72730004000072616e67652e7273000500007363616c626e2e727300010000666c6f6f722e7273000100006d6f642e7273000600006636342e727300060000696e6465782e7273000700006d6f642e7273000700007265762e72730008000075696e745f6d6163726f732e7273000600006d6f642e72730001000000000502ffffffff03e10101051d0a031002f103010402051203be0508580401050e03c57a8294050d030a2005170377900512063c050806910511350403050903a002ac0603de7b083c04010518060385029e0603fb7d3c050d06038802d6065803f87d3c0404051206039508740401050903f0792e0405053403e809580403050903b578740603de7b2e03a204085803de7b7403a2042003de7b58040205120603b0070224010401051303e17a2e0524063c0402051206039f05900401051e03e17a2e0513063c050d20040505340603dc093c040605000603937474040305090603a204820603de7b7404040512060395082e0401050903fe79ba0405053403da0958040605000603937490040305090603a204820603de7b74040106039c026605170362084a05120602251204020603b205ba040105000603d0789e0402051203b007660401050d0603eb7a2e0603e57dba051206039d0208820603e37d022c01039d022003e37d58039d02082e050d0858052806bb05230620050dba03e27d08c8039e022003e27d82039e02082e040205120603920508820401051103ef7a0812050d063c040505340603ce09900403050903b578200603de7b4a03a2044a0406050003de7b580403050903a20458040705050603fe7b660401051a03850208200408051d03eb7d200401050e0395029e0509062006bb0603da7d08c803a6022003da7d8203a602082e050e0608590509063c050c0608920513500603d17d6605190603b0024a0402051203800520040103807b9e050d065803d07d5805130603b102083c0603cf7d6605180603ab025804020512038505200401051103fb7a9e050d067405200676050d06580667720603d47d74050c0603b502580603cb7d3c05140603bc02d60603c47d3c05190603bb02820603c57d9e05140603bc02ba0603c47d0820040905050603dc09660402051203d47d3c04010519038b7bba0514084b0603c47dba040905050603dc09089e0402051203d47d3c04010519038b7bba0603c57d90040905050603dc09580402051203d47d9e04010519038b7bba05185a0603c37d4a0406050c0603d9050222010401051403e37c660402051203f4045804010519038b7bba0514d70603c47d5805180603bd02ba0603c37d5805100603c502f20603bb7d74040405120603950808e4040105000603eb779e05100603d102089e0603af7d3c05110603d202f20514d70603ad7d9e050c0603da02d60603a67d3c051c0603dc02820403050903c6014a0603de7b2e040205120603b0074a0401051603ad7bf20511063c0405053406039009580403050903b57858040605000603de7b2e0403050903a2049e040105100603bd7e74050f031c580603857d084a03fb02f2ac05100603649e0603a17d9e05170603e20266063cac052506940403050903bc019e0603de7b2e0401051a0603e6024a051b3e0404051203ad05c80401053003d37a2e0402051203c804740401052603b87b820515063c03987d082e040205120603b007ba0401051f03bb7b2e0530063c040205120603c504900401052a03bb7b2e051f063c05192004050534060382093c0403050903b57858040605000603de7b2e0403050903a20482040405120603f303900401051503d87aba04050534038009580406051103807d74040505340380033c0403050903b578580603de7b2e03a2044a0401050c0603b87e900407051903c67dba0518063c040a05160603ac094a0407050503d476200401050c03e202ba0603fe7c3c05120603830308580603fd7c022a010383032003fd7c82038303082e050d0858052006bb051b0620050dba03fc7c08c80384032003fc7c820404051206039508200401050d03ef7a08ac08bb0603fb7c3c0404051206039508023401040105000603eb7708ac040705080603090229010603773c050f060313f206036d3c050c060318580603683c06030c089e0603743c051006031b08e4060365084a06030fac060371082e05190603208205180620040a05160603ac094a0407050503d4762004030509038204ac0603de7b820404051206039508740401051a03fb7aba0509065806e504060511038906740603e6763c040305090603a204200603de7b7403a2044a03de7b08c8040106039103e4051b1f051a0674050920051be4051a4a050920040505340603dd08820401050903a477084a0405053403dc08740403050903b578740401050f03f67e900603e87c0820050e060395030812050f850603e87c4a039803085803e87c022201051306039903ba0521064a05139e050d2005139005218205134a050d20050f0673050d92050f1e0603e87cac040205120603b007740401051303e97b82040205120397043c0401052703e97b6604020512039704740401052103e97b2e0513063c050d2003e77c3c0404051206039508200401050903877bba0403038601900406051103f804740403050903887b3c0603de7b082e03a2049003de7b5803a204082003de7b08ba0406051106039a096604010517038a7a3c05110674040305090603fe00740603de7bba03a2048203de7b3c03a2044a03de7bc8040105170603a403820511064a05175805114a05175805114a051720051158040505340603c908740403050903b578d60401051c03847f90050d069e03da7c58040305090603a204900603de7b5803a204082003de7b08ba0406051106039a09660401051703917a3c05110674040305090603f700740603de7bba03a2048203de7b3c03a2044a03de7bc8040105170603ab03820511064a05175805114a05175805114a051720051158040505340603c208740403050903b578d60603de7b740401051c0603af032e050d069e0512063d050d066603d07cba040205120603b0074a0401051703827cf20511063c040505340603bb083c040605000603937474040305090603a204820603de7b740401051c0603b4032e050d069e03cc7c3c05020603d603200505f105022102010001013b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666c6f6f722e727300010000001d090000040070010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400737263007372632f696e7400006633322e7273000100006269742e727300020000636d702e7273000300006164642e7273000400006d6163726f732e7273000500006d6f642e7273000100006d6f642e72730004000061726974682e72730002000075696e745f6d6163726f732e7273000100006d6f642e7273000600006636342e7273000100000005160a000502ffffffff03f108010402052e03b978ac0401051603c7073c0402052e03b978e40403053403c60a900404050803b1748206035e2e0322e4035e3c040305340603f30b08120404050c03b1742006035c2e040305340603f30b820404050c03b574200603582e040305340603990b820404050c039375200603542e040305340603990b820603e7743c0405050a0603ed032e0603937c200402052d06038f02820401051603bf07200405050a039f7a200603937c200402052d06038f02820401051603bf07200405050a039f7a200603937c20040205300603f302660403053403a608c804040510039575200405050a03bf03200603937c200404050c06033c20030a900603ba7f66051006033e580402052e03ed004a0401051603a308580603b2763c0405050a0603ed03200603937c3c040305340603f30b200404050803d974900402052e03df009e0404050803a17f3c04020511038004ac06c80404050806038e7c580603a67f4a040605050603f9082e03d6793c03aa06ac0407051503ab78200603dc7e3c040605050603f908082e03d6793c03aa06ac0407051503ab78200603dc7e3c040205300603f30220051103e300ac06c8040305340603c5073c0603e574ac0603ed0b083c0404050c038875200402051103d7032e0406050503ad04900402051103dd7a3c0403053403c5073c0402052d03f476200603f17d3c0403053406039b0b08e40404050803e275200408053303fa042e0402052e03b47bc80404050c0367200603ee7e3c040205110603cc044a052e03df7c58052d03e400200404050d03867f740603eb7e58040605050603f908200404050c038778740603807f4a0405050a0603ed03580603937c20040305340603ed0b820404050c039975200406050503f3072e04040511038f7874050d2204020511039206580603e478900404050806039a01660603e67e3c0402052d06038f02820401051603bf07200405050a039f7a200603937c200404050806039e01740603e27e3c05150603a1012e0406050503d807900402051103d37b74038a7f580403053403c507740402052d03f476200603f17d3c05110603cc0458052e03df7c82051103ab0258053503c002200620040405230603947bac0508030b580603cb7e3c0603b801660603c87e3c0402052e0603ab01660408053303cc04200603897a3c040105160603ce09200405050a039f7a3c0603937c20040805330603f705580401051603d703200405050a039f7a200201000101040b05160a000502ffffffff03ea08010402052e03c078f2040b051603c0073c0402052e03c078083c0403053403c60ad60404050803b174c806035e2e03220882035e3c040305340603f30b08580404050c03b1742006035c2e040305340603f30bc80404050c03b574200603582e040305340603990bc80404050c039375200603542e040305340603990bc80603e7743c0405050a0603ed032e0603937c200402052d06038f02ba040b051603bd07200405050a03a17a200603937c200402052d06038f02ba040b051603bd07200405050a03a17a200603937c20040205300603f3029e0403053403a608082004040510039575200405050a03bf03200603937c20040305340603990b200404050c03a375740403053403dd0a2e0404050c03ad753c0603ba7f58040305340603990b580404051003a5753c0402052e03ed003c040b051603a108580603b4763c0405050a0603ed03200603937c3c040305340603f30b200404050803d974900402052e03df00d60404050803a17f3c04020511038004ac040a053e03a47e200402051103dc01c8040a053e03a47e200404050803ea7d580406050503b7084a0368900407051503ab78200406050503ed075803be793c0603b17d3c06039109084a0368900407051503ab78200406050503ed075803be793c0603b17d3c040205300603f30220051103e300ac060820040305340603c5073c0603e574ac0603ed0b084a0404050c038875200402051103d7032e0406050503c5049e0402051103c57a580403053403c50758040a050d038076200402052d03f400200603f17d3c0403053406039b0b022a010404050803e275200408053303fa042e0402052e03b47b08120403053403f009200404050c03f775200603ee7e2e040205110603cc044a052e03df7c58052d03e400200404050d03867f740603eb7e5804060505060391092004030534038802740404050c03e7753c0603807f3c0405050a0603ed03900603937c20040305340603ed0bba0404050c0399752004060505038b082e0404051103f77782050d2204020511039206580603e4789e0404050806039a01660603e67e3c0402052d06038f02c8040b051603bd07200405050a03a17a200603937c200404050806039e01740603e27e3c05150603a1014a0402051103ab03580406050503c504900402051103c57a3c0403053403c50758040a050d038076200402052d03f400200603f17d74040a05430603f002200402051103e6005803f60058052e03df7cba053503eb04200620040a053e0603da7c580404052303ba7e740508030b580603cb7e3c0603b801660603c87e3c0402052e0603ab01660408053303cc04200603897a3c040b05160603cc09200405050a03a17a3c0603937c20040805330603f70558040b051603d503200405050a03a17a20020100010196000000040090000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e7273000100006d6f642e727300020000696e745f6d6163726f732e727300010000008300000004007d000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e74000075696e745f6d6163726f732e7273000100006d6f642e72730002000000440100000400fd000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e727300010000696d706c732e7273000200006d6f642e72730002000075696e745f6d6163726f732e727300030000636f6e73745f7074722e7273000400006d75745f7074722e727300040000000005029f020100038f03010402050b0a03807f7405117591050c750603ed7d58050b060390024a050c085b05142f0603ec7d740401050a060392032002030001013c090000040061010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c6963650000706f772e7273000100006636342e727300020000737172742e727300010000666162732e727300010000636f6e73745f7074722e7273000300006d6f642e727300010000696e6465782e7273000400006d6f642e7273000400007363616c626e2e72730001000000000502ffffffff03dc0001040205160a038e0808740401052103f777900513a1053d1d05085e05000603987f6605080603ed00f20603937f4a03ed008203937f3c0603f20008c806038e7f3c050d0603f300ba0521063c038d7f4a03f30082038d7f58050c0603f4009006038c7f3c050d0603f500f206038b7f3c050806038201580603fe7e5805100603f70020050203a202580603e77c20050c06038301c80603fd7e3c051306038501820603fb7e3c05100603880108120603f87e3c051706038e014a0603f27e4a051b06038f01820514680603ef7e9e052206039201660515062003ee7e58051c06038901900515063c0514063e0603f57e9e052206038c01660515062003f47e58050806039801660603e87e4a050c06039a01082e0603e67e3c039a018203e67e3c051806039d01820517062003e37e660603a0019e0603e07e3c05140603a9010812050203f001200603e77c2005110603a2010812050203f701200603e77c2005170603b301580603cd7e3c0502060399032e0603e77c20050c0603b601900603ca7e3c03b6018203ca7e58052c0603b3019e050203e6013c0603e77c2005140603b80120050203e101580603e77c2005100603bd015804030517039b7f3c0401050203c1023c0603e77c200404051d06030d200401050803b801580603bb7e82050c0603c701660603b97e3c03c7018203b97e3c03c7018203b97e3c03c7016603b97e5803c7012003b97e5803c7018203b97e3c03c7018203b97e3c050806038201082003db00200603a37e2e05140603e001ba050203b9019e0603e77c2005080603ea0108820603967e3c050c06039302ac050902241a94050e6f0509069e050c06ea0603e07d3c05130603a302820603dd7d3c050d0603a902e4730603d87d3c040505120603b0075806200401053006039b7b900405051203e504ba0401051b03fe7a900406050c03353c04020516038806820406050503f77990210402051603e906200401051c03e378200516063c061f053cd0050e0658050d200406050c06032d820402051603e9064a0401051703e478200402051603bb06740406050503ff79900402051603e206200401052203ed7820051d063c061f05180674052f0621051c063c05182005170626052a082105141e050e06740517061e051a59055606087405509e054b2005459e054020053a9e053520052f9e052a2005249e051a2005090621052a220402051603ab063c0406050503ff79740402051603e20620040103f97820051d081c051c062005183c0522062405160620061f052a940402051603a3063c0406050503ff79740402051603e206200401051703fd782005130658052506a0051806ba040505120603e5043c0401052f039f7bac0518081b0521250520063c0516061f05203d04020516039c063c0406050503ff79740402051603e206200401038479200515065805143c05093c03b07d58050c0603ec01e40603947e3c0603f801820603887e3c0603ff01820603817e3c051606038902acbd1e054706089e052b9e052720052020051620052406a00516062006f10520220402051603de063c0406050503ff79740402051603e206200401051203c278200509065803f27d5805100603ee01ac0603927e3c051b0603ef0108580518062005020603aa01200603e77c20051b0603f30108660518062005020603a601200603e77c20051706038002740603807e3c051106038302ac0502039601ac0603e77c20051106038102ba0502039801ac0603e77c2005170603f901740603877e3c05110603fc01ac0502039d01ac0603e77c2005110603fa01ba0502039f01ac0603e77c20040605050603ea02ac0402051603e2062004010518038a792005243b0514067405120692040205160394063c0401051203ee793c0516e30508a20603a47d3c050f0603e6028206039a7d9e050d0603ea0282050c06200513065d050c067403917d4a05140603f002ac05020329ac0603e77c20050c0603de02ac0603a27d7405140603e002ac05020339ac0603e77c20050c0603e302ba05180620050c58039d7d4a05140603e402ac05020335ac0603e77c2005140603ec02ba0502032dac0603e77c2005120603f502e40508780603877d3c05200603fb02d60509062e050e0693050d0666053082050c06c90509ef053321052e06200406050c0603663c0402051603e9064a0401050903b679200524230402051603e6053c060395773c0401050a06038f039004060505035b900402051603e206200401051203ba79ba05192105120690052c08580512200516062105123e053f08c90539069e053520052f9e052b2005259e052120051b9e05172005132005120621051d06d60512200516061d05120674052f0623052a0674051220050506210402051603de05ac0406050503ec7974040103382e0508840406050c03523c0505d5210402051603e906200603b476580401050d06039303200603ed7cba050506039803200603e87c9005100603cb019e050803b77f08120603fe7e3c05150603d101ba051406200519063d0515065805020603c701580603e77c20051b0603d3019e050203c6012e0603e77c200399032002030001010409000502ffffffff1305080add0603773c050f0603135806036d3c0509060316ac050c840603683c050906030a0858050c840603743c050d06031908580510ca0603659e050d06030dba0510ca0603718205190603208205180620040205160603ac094a0409050503d4762005022102010001013a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666162732e72730001000000a20100000400ad000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006c6f67662e7273000200006c67616d6d61665f722e7273000200006b5f73696e662e7273000200006b5f636f73662e7273000200000005160a000502ffffffff03f108010402050803ad7708200603613c050f06032b820603553c06032d083c06035358050c0603219006035f4a0603247406035c2e0509060329740401051603c9082006038e779e040205140603252006035bc805020603c100200603bf7f3c051a0603226605140658050206031f200603bf7f20050506033282050b5905050620050e06030c3c052f83050a037482050506740401051606039a09200402050d03e97666051603099e051103789e050d0620051006c0050d29750519d805120666050e200519069d05120666050e20050d062205092305050620050206750201000101da0500000400cd000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000064656c65676174652e7273000100006d6f642e7273000200006e6f726d5f73686966742e72730001000075696e745f6d6163726f732e7273000200006d6f642e72730001000062696e6172795f6c6f6e672e72730001000000000502ffffffff03130105140a030e08ac050d06c8035e740322084a052806038501740402050503ea07580682040305170603af774a0401052803e70066052bc905288f0402050503820808120401051c038378083c051d3e05000603d27e7405200603af01580603d17e082005190603b30190c973050d03ef7e58052e062e050dc8051806030c2e051f0333740402050503b008740401051c03d77708660603987f3c052b0603ed004a0402050503a408740401054003df77e4052a0690040205050603a1082e0401053203e377082e05210620053290052120038c7fac0402050506039109200603ef76084a0391092003ef7608820401051c06038101200603ff7e0820052c060387014a0402050503a20808f20401052003e377085805000603f47e3c052106038e01740524760603f07e58051d06039a0190c9730524037658040205050381082e04010534038478580603eb7e0866040205050603910990064a040105260603a87766052c0314c8052fd7052c8f0402050503dc0808120401052003aa77085805000603ad7f3c05210603d500740524760603a97f58051d0603de0090c97305240379580402050503ba082e0401052d03ca77580603a57f0866050a0603b8010820022b000101000502ffffffff031301051a0a030cac804b050d9306035e9e0322ba035e2e032274035e66040205050603f90890063c040305170603c7773c0401052b03e800200528ab0402050503ea07900401051c039b78e4051d3e0520750603d17e7405190603b401907305205405292f0603d07e74050d060322660518030cac051f03339004020505039808740401051c03ef7708660603987f3c052b0603ed004a04020505038c08740401054003f777e4052a067404020505060389082e0401052103fc77c805333b05320658054e20054d58052120038c7f90053a0603ff002005390658052790051c06300603ff7e74052c060387014a04020505038a08e40401052003fb77e405213e0524e60603f07e3c051d06039b0190730524037658054d33054c0658053e061e0402050503e6073c04010534039c7858052908130603ea7e58040205050603f90858063c040105260603c07758052f0315ba052c570402050503c408ba0401052003c277e405213e0524e60603a97f3c051d0603df0090730524037958053e3104020505039f083c0401052d03e27758054606f203a57f58040205050603f908200401051d03b27758052b06c8035558040205050603f908200401052c03eb775805210690053cac039c7f58052506038201200603fe7e82050a0603b80120020f0001010406000502ffffffff03160105100a7a06036390040205050603f9082e063c040305170603c7773c051e2205180674040605200603d2024a560402050503e7057404060510039c7a3c0603eb7c7406039903820603e77c3c051106039b03c8051b210511c60402050503df05200406051403a67a74f60603dd7c740603ae03820603d27c8203ae03e403d27c5803ae03ac03d27c3c040205050603f908660620040605280603be7af20402050503c205200406051403b57a740603d27c9e03ae035803d27c3c040205050603f9089e0620040605280603be7af20402050503c20520063c20040605280603be7af20402050503c20520063c20040605280603be7af20402050503c20520063c20040605280603be7af20402050503c205200406051103b87a7405141d0603d27c4a05290603ba032e0515067403c67c9e050a0603a60420020f000101b005000004006f010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500007467616d6d612e7273000100006636342e727300020000666c6f6f722e727300010000636f6e73745f7074722e7273000300006d6f642e7273000300006b5f73696e2e7273000100006b5f636f732e727300010000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff03850101040205160a03e50708c80401051403a278081205130620050806f60603ef7e3c06039501820403051d03fb7e3c04010508038c01900603e47e74051606038e0166050c030f200603e37e2e0603a0010882051d4b0603df7e02290103a1012003df7e4a03a101740404051206038f0608820401051403f179200603df7e7405080603a701900603d97e5803a7019003d97e58051606038e0158050c031b200603d77e2e05190603ab01ac0510022413052806ba0403051d0603e47e2004010510039c012005000603d47e20040505090603ac0c3c0603d473820401051006039301ba0603ed7e58060397019e0603e97e7405090603b301ba0603cd7e58050f0603b701200516035790050f0329200505bd0508bb03bc7f0234010603897f3c05130603fe0090050dd705130620050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba06d505130620050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba03827f5805130603f900022401050dbb05130620050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e0602261105130620050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e03877f3c050c060382010874051703c200580513063c050566050806f30603bb7e4a0505060324ac0403051d036c200401050f03155805050620050906f5050506ba035808c80328200358820328082e050e0608750509063c050a0621050506c806a00813060353740406050d06033020933a052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b580407050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200343580406050d0603302004010514570406050d5c1e052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b740407050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200401050e060373200603503c05140603c8019e05130674050920063e570603b77e5805100603cd01d605090620050a06088105050658050906220505062003b27e3c05020603d00120020e0001013b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666c6f6f722e7273000100000067050000040087000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000072656d5f70696f322e7273000100006636342e72730002000000000502ffffffff032c01040205160a03be0808900401050e03c677082e05080326082e0603a97f3c0603f6009e06038a7f3c06039b01d60603e57e3c0603a201820603de7e3c05050603aa01acbb0402051603a108200401051503e377ba0603d17e089005120603c1007405130374f208410519bc0515062006d7051621040203ad083c0401051203d57758050c680603be7f66050d0603c5000812210511f305220620052158050d3c06210402051603a3083c040103de77580510670603b67f6605110603cd00083c210515f30526062005255805113c06210603b07f5805090603d4002005127305099f05110367d606034508c8033b20034582033b082e050906031908580603ac7f5805150603af01200603d17e8203af01082e05090858050d0667050906d6051506b90603d17e08c803af012003d17e8203af01082e05090858050d0683050906f20505062205150885050d0824053006c8050d3c050806d705053f0514067405057405093c05057403c37e5805110603bb01580510063c05223c05217405102005163c05157405102003c57e58050c0603f800ac0603887f3c051006038a019e0603f67e3c0513060335e408410519bc0515062006d7051621040203ad083c0401050c03d777d60603be7fd6050d0603c500e4210511f305220620052158050d3c06210402051603a3083c0401051003df77d60603b67fd605110603cd00083c210515f30526062005255805113c06210603b07f5805090603d4002005127305099f05110367d606034508c8033b20034582033b082e050906031908580603ac7f58051006038e01740603f27e3c0518060392014a0519ef051abb051822051a57051808130603ee7e5806039701580519ef051abb051822051a57051808130603e97e5805100603fa00900603867f3c0603fe00660603827f3c0518060382014a0519ef051abb051822051a57051808130603fe7e5806038701580519ef051abb051822051a57051808130603f97e58050c0603d900740603a77f820603dd009e0603a37f3c05130603ea00740603967f2e05140603ee004a0515ef0516bb051422051657051408130603927f580603f300580515ef0516bb0514220516570514081306038d7f5805100603df00660603a17f2e05180603e8004a0519ef051abb051822051a57051808130603987f5805100603a6015805123a0510760603da7ed605180603e300580519ef051abb051822051a570518081306039d7f5805120603c1007405130374f208410519bc0515062006d7051621040203ad083c0401051203d57758050c680603be7f66050d0603c5000812210511f305220620052158050d3c06210402051603a3083c040103de77580510670603b67f6605110603cd00083c210515f30526062005255805113c06210603b07f5805090603d4002005127305099f05110367d606034508c8033b20034582033b082e050906031908580603ac7f580513060335f208410519bc0515062006d7051621040203ad083c0401050c03d777d60603be7fd6050d0603c500e4210511f305220620052158050d3c06210402051603a3083c0401051003df77d60603b67fd605110603cd00083c210515f30526062005255805113c06210603b07f5805090603d4002005127305099f05110367d606034508c8033b20034582033b082e050906031908580603ac7f3c05020603be0120020c000101e3020000040056010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006174616e662e7273000100006633322e72730002000066616273662e7273000100006d6f642e727300030000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff032c01040205160a03c508f20401050503c277e405089206034a3c051106033ef20403051d034d3c0401050c03c000c80603b57f3c05130603d600820603aa7f3c050d0603dc00580603a47fac050c0603c000c80603403c05100603c20074051d3e0404050903e80b9e0401050203c474660603907f3c05110603d8008205230682051d66050d2003a87f9005100603cd00ac0603b37f3c05150603d300740520068205112003ad7f9005160603cf00200515069e05258205112003b17f7405050603e10020050d590520d905120666050e20053206d505240666052020051266050e20051106035ac8050803282006039a7f2e040505120603b0074a0401050d03ba799e0525063c052174040505120603c606200401053103ba79900520063c051f20050d3c05080621051003489005080338200502250603907f2005180603e700200514069005102003997f58040205090603e703200401050c03d17c580603482e0510060333d603092005020334200603907f2003f0002002030001013b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000066616273662e727300010000003b0300000400dd000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006578706d312e7273000100006636342e7273000200006d6f642e7273000300006d6f642e72730001000000000502ffffffff032101040205160a03c90808820401050f03c0770882050e0620050806f60603513c06033e820603423c050f0603d300820603ad7f3c040205090603e60308200401050c03cb7c5806034f2e0603346606034c3c050206038801900603f87e20050c060337ba0603494a050d060338ac050203d000200603f87e20050c0603d500820403050903d70b3c0401050203dc74660603f87e3c050c0603c000900603403c05120603cc00ba051f069e05113c050dba03b47f08c803cc002003b47f8203cc000812060859d80516f1050d062003b27f5805100603c200740603be7f3c05110603c700ac0603b97f083c0603c300ba0603bd7f082005090603d10020050d750509063c03ae7f58050f0603df00d62105440875053e069e05382005329e052c2005269e052020051a9e051420050e9e050f06bb0505065805180621052a06ba0523580517200511200508063d0515680514067405103c0502060322200603f87e20050d0603e8002005090674050520063d0508e60603957f7405160603ec0020051006d6050206031cac0603f87e20050c0603ef00d6051c3f051606580510d60502060316200603f87e2005200603f000d6051b062005149e0502060318200603f87e20050b0603f40066050a062005053c040205160603d808200401050803aa777406038a7f3c050b060380013c05050666040205160603cc08200401050803b677ac05123f050e0674050d9e03fb7e580516060383019e050e063c050d5803fd7e3c050206038801900603f87e3c050d0603f80020050906d6050c062105100224170502030a2002010001011c0300000400de000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006578706d31662e7273000100006633322e7273000200006d6f642e7273000300006d6f642e72730001000000000502ffffffff032301040205160a03ce08f20401050503b77708820508930603543c050c06032ee40510037a9e050c26060352660603357406034b4a050d06033674050203d000200603fa7e2005080603c000ac0603403c050f0603d5009e0603ab7f3c050c0603d70008660603a97f3c0502060386012e0603fa7e2005190603d800200403050903d40b9e0401050203da74820603fa7e20050c0603c200900603be7f3c05120603ce00820510035ae4052003262005110620050d8203b27f089003ce002003b27f8203ce0008120515060821050da00516b9050d062003b07f580510060328740511031c200603bc7f2e0603c500740603bb7ff20603c900820603b77fd605090603d30020050d750509063c03ac7f58050f0603e0009e21051fd705190666051320050e6605120683050d065805180621052906820523580517200511200508063d0515680514067405103c050206031f200603fa7e20050d0603e9002005090674050520063d0508e60603947f7405160603ed00200510069e0502060319740603fa7e20050c0603f0009e051a3f0515065805109e0502060313200603fa7e20051f0603f1009e051a06200514660502060315200603fa7e2005200603f500580402051603d9089e0401050803a8777406038a7f3c051d06038001660402051603ce083c0401050803b377ac050e3f050a067405096603fc7e5805120603820166050a063c05095803fe7e3c050206038601900603fa7e3c05150603f80020050cad051008b105022802010001013d030000040055010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006578702e7273000100006636342e7273000200006d6f642e727300030000636f6e73745f7074722e7273000300007363616c626e2e727300010000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff03d40001040205160a039608083c0401050c03f87774050a08730505062006760508930402050903ff023c0401050c03837d740603977f2e050206039a012e0603e67e20050c0603ec00ba0603947f3c0603f100ac06038f7f4a05190603f300ac0403050903b90b740401051003c87408ac06038c7f6605080603fb00ac0603857f3c050f06038601820603fa7e3c050c0603fd0008c80603837f3c05120603ff00ba040403b106580401051f03cf79820511063c050dba03817f08c803ff002003817f8203ff00081203817f08900603ee00ba0502032c200603e67e20051506038d01d604030509039f0b4a0401051003e27408120502030c200603e67e2005110603810158050d062003ff7e5805120603830120050906081206d7210603fb7e5805050603920120053908c90533069e052e2005289e052320051d9e05182005129e050d20050520050f0621051706ba050f3c050e4a05059e0508063d0603eb7e580405060309c80603773c050f0603135806036d3c0509060316ac050c840603683c050906030a0858050c840603743c050d06031908580510ca0603659e050d06030dba0510ca0603718205190603208205180620040205160603ac094a0405050503d476200603603c0401050206039a0120020300010107030000040054010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006174616e2e7273000100006636342e727300020000666162732e7273000100006d6f642e727300030000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff03c30001040205160a03a708083c0401051203db77082e0505840508910603b77f3c05110603d200820403051d03bb7f3c0401050c03d400c806039f7f3c05130603ec00820603947f3c050d0603f2009006038e7fac040205090603e603200401050c03e47c580603b67f2e05100603cf0090050203393c0603f87e20050c0603d400c80603ac7f3c05100603d60074051d3e0404050903d40b820401050203dc74660603f87e3c05110603ee00ba052306ba051d9e050d2003927f9005100603e300ac06039d7f3c05150603e900ac052006ba05112003977f9005160603e50020051506d60525ba051120039b7f74050d0603f7002059054208770539069e053520052c9e052820051f9e051b2005129e050e20054f0608730546069e05422005399e053520052c9e052820051f9e051b2005129e050e200511060358c80508032b200603837f2e040505120603b0074a0401050d03d1799e052c063c052874040505120603af06200401053803d179900528063c052720050d3c050806220502b10603f87e2005180603fe00200514069005102003827f3c0502060388012002030001013a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666162732e7273000100000018030000040057010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c6963650000657870662e7273000100006633322e7273000200006d6f642e727300030000636f6e73745f7074722e7273000300007363616c626e662e727300010000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff032101040205160a03d008f20401051003b47774050508a00508930603553c050c06032d9e0603533c05020603e5002e06039b7f20051706032774050c030a2006034f4a033182034f3c06033720060349580519060339740403050903f30b6604010510038e74084a0603465805080603c500ac0603bb7f3c050f0603d100820603af7f3c050c0603c70008900603b97f3c05120603c90082040403e7065804010520039979820511063c050d8203b77f089003c9002003b77f8203c900081203b77f085806033482050203312006039b7f2005150603d8009e0403050903d40b4a0401051003ad74c80502030c2006039b7f2005110603cb0058050d062003b57f5805120603cd0020bb05090620069f210603b07f58050e0603dd0020051c083d05160666051120050d2005130621051b068205133c05124a050d660508063d0603a07f58040506cf0603793c050f0603115806036f3c050906031274050c8406036c3c0509060828050c840603763c050d06031508200510ca0603699e050d06030b820510ca06037382051806031c740402051603b209820405050503ce76200603643c040105020603e500200203000101cd010000040082000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006c6f672e7273000200000005160a000502ffffffff03ea08010402050803e67708200603af7f2e03d100c803af7f3c050f0603de00820603a27f3c0603e00008660603a07f3c052303e0007403a07f5805020603f5009006038b7f20050c0603d300d60603ad7f4a0603d600580603aa7f2e05090603db00ac04010516039008200402050e03f277580509062003a37f8205050603e50074050b5905050620051306030d3c052fbb050a03737405050674050b0621050a063c052090050520040105160603e4082004020512039f779e05160309d60379d605120620051506f1051230750529083d0522069e051e2005179e0513200534060821052d069e05292005229e051e2005179e05132005120621050922050506200502067506038b7f2005140603d700200603a97f081205020603f5002006038b7f3c051a0603d4009e0514065805020603212002010001010b010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff040222010403051503a879c8050c910603e57d3c051306039d029e0603e37d3c0603a202f20603de7d3c050d0603a3024a0603dd7d089e052006039e02580515060812051b068305150620064b051008670515b90510d70603df7d740401050e0603f50320021a0001010b010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff049004030515039779e4050c910603f67d3c051306038c02820603f47d3c06039102820603ef7d3c050d060392024a0603ee7df20401050e0603f5032006038b7c3c0403051f06038d023c0515060812051b067505150620063d0510bb0401050e03e5012e020100010108010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f80408e40403051503e2790820050cc90603b27d3c05130603d002e40603b07d3c0603d502084a0603ab7d3c050d0603d6024a0603aa7d089005200603d10290051506ba051c0683051521051008ad0515b90510d70603ac7d740401050e0603f50320021a00010108010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f804900403051503c079083c050cc90603d47d3c05130603ae02c80603d27d3c0603b302c80603cd7d3c050d0603b4024a0603cc7dac0401050e0603f5032006038b7c3c0403051f0603af027405150682051c06750515210510bb0401050e03c3012e02010001010a010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff047404030515038679e4050c910603877e3c05130603fb01820603857e3c06038002820603807e3c050d060381024a0603ff7d9e0401050e0603f5032006038b7c3c0403051f0603fc017405150674051b067505150620062105109f0401050e03f6012e02010001010b010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f804740403051503d179083c050cc90603c37d3c05130603bf02c80603c17d3c0603c402c80603bc7d3c050d0603c5024a0603bb7de40401050e0603f5032006038b7c3c0403051f0603c00274051506ba051c067505150620062105109f0401050e03b2012e0201000101fd000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff04900403050c03b478c80603da7e3c05130603a8019e0603d87e3c05100603ac01ba0401050e03c9022e06038b7c200403051f0603a901200515060812051b067505150620050d063d0603d57e580401050e0603f503200203000101f9000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f804900403050c03db7808120603ba7e3c05130603c801e40603b87e3c05100603cc0108120401050e03a9022e06038b7c200403051f0603c9015805150682051c0675050d210603b57e580401050e0603f503200203000101f1000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f80408c80403050c03fb78081206039a7e3c05130603e801e40603987e3c05100603ec0108120603947e8205200603e90190051506ba051c0683050d210603957e08ba0401050e0603f50320021a000101f5000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff0408e40403050c03c478c80603ca7e3c05130603b8019e0603c87e3c05100603bc01ba0603c47e8205200603b901580515060812051b068305150620050d064b0603c57e08740401050e0603f50320021a000101fc000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff04740403050c03a478c80603ea7e3c0513060398019e0603e87e3c051006039c01ba0401050e03d9022e06038b7c200403051f060399015805150674051b067505150620050d06210603e57e3c0401050e0603f503200203000101fe000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f804740403050c03eb7808120603aa7e3c05130603d801e40603a87e3c05100603dc0108120401050e0399022e06038b7c200403051f0603d90158051506ba051c067505150620050d06210603a57e3c0401050e0603f5032002030001010d01000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006664696d2e7273000200006d6163726f732e7273000300006d6174682e7273000300000005090a000502ffffffff03e503010402050803a77c740603732e0403050e0603f5032e06038b7c20040105090603e603200402050f03a97c740603712e0403050e0603f5032e06038b7c200402050f060311ba05099f06036e740403050e0603f5032002030001010e0100000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006664696d662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005090a000502ffffffff03e603010402050803a67c740603732e0403050e0603f5032e06038b7c20040105090603e703200402050f03a87c740603712e0403050e0603f5032e06038b7c200402050f0603118205099f06036e740403050e0603f503200203000101d70000000400a0000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000666d6178662e7273000200006633322e7273000300006d6174682e72730001000000000502ffffffff03f20301040205050a03987cba0403050903dc03200402050503a47c580401050e03ea03200201000101d70000000400a0000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000666d696e662e7273000200006633322e7273000300006d6174682e72730001000000000502ffffffff03f20301040205050a03987cba0403050903dc03200402050503a47c580401050e03ea03200201000101d600000004009f000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000666d696e2e7273000200006636342e7273000300006d6174682e72730001000000000502ffffffff03f20301040205050a03987cba0403050903db03200402050503a57c580401050e03ea03200201000101d600000004009f000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000666d61782e7273000200006636342e7273000300006d6174682e72730001000000000502ffffffff03f20301040205050a03987cba0403050903db03200402050503a57c580401050e03ea03200201000101330100000400ad000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100007363616c626e2e7273000200006636342e7273000300006d6174682e7273000100006c646578702e72730002000000000502ffffffff03f20301040205080a03967cd60603773c050f0603135806036d3c0509060316ac050c840603683c050906030a0858050c840603743c050d06031908580510ca0603659e050d06030dba0510ca0603718205190603208205180620040305160603ac094a0402050503d476200401050e03d50320020100010197000000040091000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00007363616c626e2e7273000100006c646578702e7273000100006636342e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000ae010000040004010000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e727300030000696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03aa7c9005134206035d74040305150603b4024a040405050394065803f079200403050103245805150358580404050540040305150379c804040505039706200405052d03c7793c0403050103cd00580515035e200603c67d3c0401050e0603f5032006038b7c3c040305010603dc0258051503589e040405055c040305010324660515035e200401050e03bb01200201000101000100000400fa000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e727300030000696e745f6d6163726f732e7273000300006269742e72730004000000ed01000004002c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400006d6163726f732e7273000100006633322e7273000200006269742e727300030000636d702e727300040000636d702e7273000500006d6f642e72730005000000000502ffffffff03f20301040205160a03ff04740403052e03b978c80404053403c80a900405050803bf7420050006034e2e05080332083c0403052d0603dd013c0405050803a87e740603492e0401050e0603f5032e06038b7c200403052e0603ab01580404053403c60aac0405050803cf74200404053403b30b2e0405050f03d974580603b47f4a040405340603ed0b200405050c03d474580603bf7f2e040405340603990b200603e774740401050e0603f5032002030001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006633322e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e727300050000009501000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e727300010000636272742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402051703bf7790050808140603543c0603c000082e0603403c050e0603c200082e0401051603a908200402050e03d8775805090682050c06210603bc7f58050b0603cc00ac0505ff21040105160380092004020509038d772005130658050558052a062105290674053fba05399e052920051ed605189e051420050e9e050d2005052004010516060391083c0402050503fc77740401051603e5088204020505039f7720590509220505570513590505063c050d06210505063c03917f580403050e0603f5032006038b7c3c0402051006032e200403050e03c7035802010001019a000000040094000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e727300010000636272742e7273000200006d6163726f732e72730003000000960100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03947c9005133f06037674040305150603b4024a0404050503c5062e0403051503b8793c0404050503c80674063c0405052d06039679200403050103cd002004040505039d064a0403050103e379580515035e200603c67d3c0401050e0603f5032006038b7c3c040305150603b102200404050503c8063c0403051503d5793c0401050e03a7014a0201000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300006269742e727300040000008d0200000400fc000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f636f6e7665727400006636342e7273000100006c6f67322e7273000200006d6163726f732e7273000300006e756d2e7273000400006d6174682e7273000300006d6f642e7273000400000005160a000502ffffffff03ea08010402050803cc7708200603492e0337c803493c050f0603c300820603bd7f3c0603c50008660603bb7f3c052303c5007403bb7f580403050e0603f5039006038b7c200402050c060338d60603484a06033b580603452e05090603c000ac0401051603ab08200402050e03d777580509062003be7f8205050603ca0074050a7605050674050a0621051e06ba050520040105160603ff0820040205050384779e050cf30505062006030920040105160391083c0402050503f177740401051603f0082004020505039477ba050a036b7405050620040405010603d3003c04020505034720050f3d050a03789e050d0374084a050506200621910520083d0519069e051520050e9e050520052b0608210524069e05202005199e051520050e9e0505200621051e27051a0620050520052406bd050e06200505e40625230403050e038c032006038b7c200402051406033c2006034408120403050e0603f5032006038b7c3c0402051a0603399e051406580403050e0603bc03200201000101e60000000400e0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f636f6e7665727400006636342e7273000100006c6f67322e7273000200006e756d2e7273000300006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002a0100000400de000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006d6f642e7273000100006d6163726f732e7273000200006164647375622e727300030000636d702e7273000400006d6f642e7273000300000005050a000502ffffffff039009010402050e03e47a7404010505039c05580674040305180603f676580402050e03ee034a0404053403f807580402050e038878e40204000101ec0000000400e6000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e727300030000636d702e7273000400000025040000040015010000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e72730001000074616e662e7273000200006633322e72730003000072656d5f70696f32662e7273000200006b5f74616e662e7273000200006d6f642e7273000400006d6174682e7273000100006d6f642e72730002000000000502ffffffff03f203010402050f0a03aa7c08c80403051603d508580402050503b177e405089206035b3c0603339e06034d3c06033c9e0603443c0603c7009e0603b97f3c0404051c0603274a0508e80603553c051306032eac08410511bb06034c08c8033420034c82033408120523022512051d200532ba051d20034c58050f06033c90050e064a05210659051c06200403051606039109200404050503ef7620050d83040205100364086604040508031d200509310603be7f9005110603c0003c0516065805155803403c0405050d0603189e0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e0526062505210620051720050520050906210402050f0320900405050903602005050620035358040205100603c800200603b87f90050c06033eac0603423c05100603220858051e0320200405050d03564a0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e05260625052106200517200505200621060353580402051006032208e4051e031e200405050d03584a0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e052606250521062005172005052005090621050506200353580402050c060335ac06034b3c05100603220858051e0317200405050d035f4a0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e05260625052106200517200505200621060353580402051006032208e4051e0315200405050d03614a0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e052606250521062005172005052005090621050506200353580402050c060327ac0405050d03713c03125805140821050d069e050e062105090620050d06390517770514d2050d069e051806d50511069e05260625052106200517200505200621060353580402051c06032a9e05000603560820040605090603ac0c3c0603d473660401050e0603f50320020e000101e50000000400df000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472000074616e662e7273000100006633322e7273000200006b5f74616e662e7273000100006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000008e000000040088000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000072656d5f70696f32662e7273000100006633322e727300020000007e010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d756c2e7273000200006d6f642e7273000200006d6f642e72730003000000000502ffffffff03f20301040205100a03cf7c0225010603be7f08200603cb002efd0869051baf0510037a082e0403050d03db00900402050903807f3c0403050d0380012e0402050903807f58040405050386092e0603d776022c0103a90920083c082eba74660402051706038777d60404050503f9083c0603d776900403050d0603a301200402050903807f58040405050386092e06082e082eac74660402051706038177d60404050503ff083c0603d7769003a9092003d776022501040205100603d3003c051b8b051025085b0603aa7fc805090603ff00200401050e03f60274021b0001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d756c2e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e72730003000000d40100000400ab000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006879706f742e7273000200006d6163726f732e727300030000737172742e7273000200006d6174682e7273000300000005160a000502ffffffff03ea08010402050503b677d60401051603ca08200402050503b777f20508210401051603a909820402050a03df76ac05086a0603513c060332083c06034e3c0403050e0603f5032e06038b7c2004020508060332c806034e3c0403050e0603f5032e06038b7c200402050806033720060349081206033ec80603423c050f0603c20008660603be7f3c05090603c500acd50603bc7ff20510060338200403050e03bd035806038b7c20040205090603c100bad5060340d6050e06030f2006740505060855050a21050506740621052c3e050e0658051d82050e82050506e0050a21050506740621052c3e050e0658051d82050e820603392e04040517030f3c040205050371200603b77f3c0403050e0603f5032002030001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006879706f742e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e72730001000000a201000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c6f67662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050803ad7708200603613c050f06032b820603553c06032d083c06035358050c0603219006035f4a0603247406035c2e0509060329740401051603c9082006038e779e040205140603252006035bc80403050e0603f5032006038b7c3c0402051a06032266051406580403050e0603d3032006038b7c200402050506033282050b5905050620050e06030c3c052f83050a037482050506740401051606039a09200402050d03e97666051603099e051103789e050d0620051006c0050d29750519d805120666050e200519069d05120666050e20050d0622050923050506200403050e0603b5037402010001019a000000040094000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c6f67662e7273000200006d6163726f732e727300030000002c0100000400b6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006636342e727300020000696e745f6d6163726f732e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a038a7f089003ac0608e40608200401050e0603cc7a08c80403051403cf7c08ac0511c522051273051c060812051120051c065905260658051b2005162005153c05090622051803c700d6210404051603bf08200401050e03a97a2002010001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000696e745f6d6163726f732e7273000100006d6163726f732e7273000200006636342e7273000100000086000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000003a01000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e727300010000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03cb00010603b47f7405110603ca004a050f920603b47f085803cc0082040205120603e406ac04010531039d7974050d06ba040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a050f0673050d92050f1e0603b47fba03cc0066053106c9050d0690050f06730403050e03c303084a02010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e72730003000000c60100000400b7000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006173696e662e72730002000066616273662e727300020000737172742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050e03b97708120508920603533c0603369e06034a3c0403051d06030b08660402050d03353c0512750404051703173c0402052503440882051d0666051920051166050d2005120683050d066605050621051f032420051b06200516200511200509580505200508069f0405050e03b2032e06038b7c200402050c06033982051aa105250360f2051d0666051920051166050d2005120683050d0666050506210514031e200510063c0405050e0603b9033c06038b7c200402050c06032f900603513c05150603335805100658034d3c0405050e0603f5032006038b7c3c040205150603312005140608580405050e0603c4032e02010001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006173696e662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000066616273662e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e7273000100000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000010100000400be000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e727300010000636f70797369676e662e727300020000726f756e64662e7273000200007472756e63662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050b0398779005050674040105160603c409200403050c03b976200404051d3f0405050e03eb032002010001019b000000040095000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e727300010000636f70797369676e662e727300020000726f756e64662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003c000000040036000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800007472756e63662e72730001000000590200000400a9000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e727300010000666d6f642e7273000200006d6163726f732e7273000300006d6f642e7273000100006d6174682e7273000300000005160a000502ffffffff03ea080104020513039c77ac0512064a0508067906037490030cba03743c051006030d200403050e03e8039e06038b7c200402050806030fac06037182060317ac0603696605090603189e050f590603673c050d06031a9e75050f560511940509063c036358050c060310c80403050e03e5038206038b7c200402050906031fba9f0603603c0508060322c806035e3c050906032366050f5906035c3c050d0603259e75050f560511940509063c03585806032aba9f06035574050b06032f200404050503e208900402050c03a077c806034f3c05100603328206034e3c0518060333ac0403050e03c2032006038b7c20040205090603375875050b037720060351ba0404050506039109200402050803aa77ac0603453c050c06033c820603443c051406033dac0403050e03b8032006038b7c200402050b0603c100f20603bf7f3c05090603c300c8050bd4050975050b570603bf7f4a05080603c70008900603b97f3c05110603cb004a0509063c03b57f580603c800ba0510590509062003b77f3c05050603cd00200401051603ff08580403050e03a97a2002010001019b000000040095000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e727300010000666d6f642e72730002000075696e745f6d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000099000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e727300020000736469762e72730002000000000502ffffffff03f20301040205170a03a67c083c0403050103dc00ac0402051703a47f083c0403050103dc0008580690200401050e060380034a0403050103807dc80401050e038003d602010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000480200000400aa000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e727300010000666d6f64662e7273000200006d6163726f732e7273000300006d6f642e7273000100006d6174682e7273000300000005160a000502ffffffff03f1080104020513039677ac0512064a0508067906037390030d8203734a051006030e200403050e03e7039e06038b7c2004020508060311ac06036f8206031aac0603664a050906031b9e050f590603643c050d06031d9e75050f560511950509063c035f58050c060312900403050e03e3038206038b7c2004020509060323826706035c3c0508060327200603598205090603289e050f590603573c050d06032a9e75050f560511950509063c035258060330826706034f3c050b060335200404050503c408900402050c03be77c80603493c0518060339e40403050e03bc032006038b7c200402050906033d5876050b03762006034bba040405050603f908200402050803ca77ac0603bd7f3c05140603c500e40403050e03b0032006038b7c200402050b0603ca00ba0603b67f3c05090603cc00c8050b9c050975050b570603b67f4a05080603d000084a0603b07f3c05110603d4004a0509063c03ac7f580603d100820510590509062003ae7f3c05050603d600200401051603f808580403050e03a77a2002010001019c000000040096000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e727300010000666d6f64662e72730002000075696e745f6d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000006d030000040003010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e72730002000074616e2e7273000300006b5f74616e2e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03f80408c80403050e03c3770812050808140603503c06033f9e051741050a06c8051174050d74040205160603a708580404050f03d577f20508bb0603bf7f66040305100603c0002006034090050c060331ac06034f3c0404050f0603c000c80508bb0603bf7f58050c0603c30090050db00509069e03b97f580403051c060334d6050006034c0858040505090603ac0c3c0603d473820404050c0603c3009e050dcc050c9a051a860509062003b97ff2050d0603ca00200309900529d7050d037720054408b2053c069e05382005309e052c2005249e05202005189e051420050d9e054a0608590541069e053d2005359e05312005299e052520051d9e05192005119e050d20051a06220516062005159e051120050d9e062f0508590603aa7f6605250603d900f2052d06083c052520052020051b200515200511580513069f0603a67f66040305000603c500580404050d410309900529d7050d037720054408ea053c069e05382005309e052c2005249e05202005189e051420050d9e054a0608590541069e053d2005359e05312005299e052520051d9e05192005119e050d20051a062205160620051520051120050d20062f0508596c0603a47f58050d0603e20090040205160389083c0404051403fd77ac0402051603e40820039f7f200404051403fd77ac0402051603e408200404051503987720050f06ba0511061d050d0674051f0623050e063c050a20050520039c7f74051d0603d8009e0517063c05115805250621052d06ac052558052020051b200515200511580513069f0603a67f4a0401050e0603f50320020e000101e30000000400dd000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e72730001000074616e2e7273000200006b5f74616e2e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000da040000040054010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e740073726300006633322e7273000100006269742e727300020000636d702e7273000300006d756c2e7273000400006d6f642e7273000100006d6f642e7273000400006d6f642e7273000500006d6163726f732e72730006000061726974682e7273000200000005160a000502ffffffff03f108010402052e03b9789e0401051603c7073c0402052e03b9789e053003c8013c052e03b87eac051103a10374052e03df7c4a051103a103022301052e03df7c4a0403053403c60a660404050803ba74580603552e032bc803553c0402052e0603ab01900403053403c80a900404050c03bf742006034e2e040305340603f30b08120404050c03c3742006034a2e040305340603990b820404050c03a175200603462e040305340603990b820404050c03ab7520030b2e5d0603ac7f58040305340603ed0bc8060393743c040505050603f9082e03d6793c03aa06ac0406051503ab78200603dc7e3c040305340603ed0b8204050505038c7d3c0404050d03ea775804050505039608d60406051503ab78200603dc7e3c040205110603d603580407051503f27e820402053503ce03820407051503b27c200405050503c906200407051503a0792004050505031e58065804070515060365900402052e03f77e900603d57e3c052d06038f024a0511038d05c80405050503b37b820603b17d580404051006033b200603454a0408050e0603f5035806038b7c20040405100603c500200603bb7f4a0408050e0603f5035806038b7c20040105160603ce09200408050e03a77a3c06038b7c20040505050603cf02660603b17d3c0404050806038701660603f97e3c06038b01660603f57e3c040205110603d6034a053603f90182053503c700200603ea7958040505050603f9083c0404050c039a78740402052d03fc003c04040529038b7f900402052d03f50020051103bd0220052d03c37d58051103df053c0603927890052d06038f02900401051603bf074a0408050e03a77a2006038b7c200402052d06038f02900401051603bf074a0408050e03a77a2006038b7c200402052d06038f02820401051603bf07200408050e03a77a2006038b7c200402052d06038f02820401051603bf07200408050e03a77a2006038b7c200402052d06038f02900401051603bf07200408050e03a77a2006038b7c20040105160603ce09200408050e03a77a3c06038b7c200402053506039606200403053403dd0508120404050803bd75200603d07e2e040905330603f7054a0401051603d703200408050e03a77a2006038b7c20040305340603990bac04040508039b76200603cc7e2e0402052e0603ab01660409053303cc04200603897a3c040105160603ce09200408050e03a77a3c02010001017d010000040077010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f696e7400006633322e7273000100006d6f642e7273000200006d756c2e7273000200006d6163726f732e7273000300006269742e727300040000636d702e7273000500006d6f642e72730006000075696e745f6d6163726f732e727300010000696e745f6d6163726f732e72730001000061726974682e7273000400006636342e7273000100000096000000040090000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e7273000100006d6f642e727300020000696e745f6d6163726f732e727300010000008e0100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03947c9005133f06037674040305150603b4024a04040505039406580620040305150603e97990040405050397063c0405052d03c779740403050103cd003c0404050503ec05200403050103947a900515035e200603c67d3c0401050e0603f5032006038b7c3c040405050603c808740403051503867a4a0401050e03a701200201000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300006269742e727300040000006c0100000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000063627274662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402051703b177e405089206035b3c06032b0812050c3e06035358050e060330740401051603c208200402050903bf779006034fac050e0603c00020050503760820050006034a5805050603374a04010516039709200402050503f0762005092105050658050d063d0509063c052a3c05297405052005090626050506ac050d06210509063c052a2005297405052006230403050e03ab032006038b7c200402051006032720060359740403050e0603f5032002030001019b000000040095000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000063627274662e7273000200006d6163726f732e727300030000009f01000004002d010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006d6f642e7273000100006d6163726f732e7273000200006269742e7273000300006164647375622e727300040000636d702e7273000500006d6f642e7273000400000005050a000502ffffffff039009010402050e03e47a740403052203c87cac0401050503d40820063c040405150603fb763c04010505038509200620040405180603f676580402050e03ee032e0405053403f807ac06200404050f0603cc74f20402050e03bc032002040001013b010000040035010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e7273000300006269742e727300040000636d702e7273000500000061000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f203010402050d0a03ce7c083c0401050e03b40308f202160001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000c90100000400f8000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e72730002000074616e682e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03d9050890039f7f580403050503a777085805093f05050620050806920603693c050f0603218206035f3c060325820515430404050903800c820603d4738204030513060327ba050d06200667051206d6050920035858050c060319ac0603673c051706031e082005110658051d06e505170620050d20036158051706031c9e050d06ba036458051306032320050d0658051106082f05090620035c3c0401050e0603f503200403050803bb7cac0401050e03c503ac0201000101d80000000400d2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e72730001000074616e682e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000090100000400a4000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000636f6e762e7273000100006d6f642e7273000200006633322e7273000200006d6163726f732e727300030000696e745f6d6163726f732e72730002000000050c0a000502ffffffff1a06037782040205050603cf02c803aa067404010511039477580509da051163051c7505260658051b2005162005153c0509062206036f9e05180603ee00ac210403051603df08200404050e03a77a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000008b000000040085000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000696e745f6d6163726f732e7273000200006633322e727300020000003a01000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e727300010000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03cb00010603b47f7405110603ca004a050f920603b47f085803cc0082040205120603e406ac04010531039d7974050d06ba040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a050f0673050d92050f1e0603b47fba03cc0066053106c9050d0690050f06730403050e03c303084a02010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e72730003000000c20100000400f9000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006633322e72730002000074616e68662e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03db05087403a47f580403050503967708120511940603743c050f0603158206036b3c0603199005154204040509038d0c9e0603d473820403051806031b820511062005090667050e069e050920036458050c06030eac0603723c051c0603129e05150658051706ad05120620050d20036d58051206031066050d068203705805180603172005110658050d06e50509062003683c0401050e0603f503200403050803ad7cac0401050e03d303ac0201000101d90000000400d3000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006633322e72730001000074616e68662e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002303000004000f010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e72730002000073696e2e7273000300006b5f636f732e7273000300006b5f73696e2e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03f80408580403050e03c577900508081506034d3c0603c2000820051741051106c8050d74050a74050b06750603b87f7405100603c300200603bd7f900404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e062305260620051d580509200505200403050e06030f200603b47f580405050d0603302093052cda051406d6050d06037a20052691053406ba052e9e052620051cd605169e051220050d9e051e063305130620050f20050e20050d3c0509200349580404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e062305260620051d580509200505200343580405050d0603302093052cda051406d6050d06037a20052691053406ba052e9e052620051cd605169e051220050d9e051e063305130620050f20050e20050d3c0509200403050e060314200603b57f58050c060334ac0405050d385b56052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b74040305100603379e0603493c051d06033ac80406050903f20b4a0603d473820403051d060338d60406050903f40b4a0603d473660401050e0603f50320020e000101ef0000000400e9000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e72730001000073696e2e7273000200006b5f636f732e7273000200006b5f73696e2e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000005e0100000400af000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e72730001000073696e68662e7273000200006633322e7273000300006b5f6578706f32662e7273000200006d6174682e72730001000000000502ffffffff03f20301040205080a03957c9e0403051603c6095803a47f5804020505039a77ac0508950505030c3c0404050a0370ba05050620040206031008200401050e03d8032006038b7c200402051106031220050c083d06036d3c051d060319c8051906200514200510200401050e0603dc032006038b7c2004020510060314ac05193f05220674052aba05222005182005142003693c0401050e0603f5032002030001018a000000040084000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000073696e68662e7273000100006633322e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003e000000040038000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800006b5f6578706f32662e727300010000007501000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f61740073726300006636342e7273000100006269742e727300020000636d702e727300030000636d702e7273000400006d6163726f732e7273000500006d6f642e7273000400000005160a000502ffffffff03ea08010402052e03c078d60403053403c80aba0401051603f87c200402052e03c078d60404050503b77fba0405050e0393032e02010001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006636342e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e72730005000000ed01000004002c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400006d6163726f732e7273000100006633322e7273000200006269742e727300030000636d702e727300040000636d702e7273000500006d6f642e72730005000000000502ffffffff03f20301040205160a03ff04740403052e03b978c80404053403c80a900405050803bf7420050006034e2e05080332083c0403052d0603dd013c0405050803a87e740603492e0401050e0603f5032e06038b7c200403052e0603ab01580404053403c60aac0405050803cf74200404053403b30b2e0405050f03d974580603b47f4a040405340603ed0b200405050c03d474580603bf7f2e040405340603990b200603e774740401050e0603f5032002030001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006633322e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e7273000500000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000076000000040053000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680073726300007467616d6d61662e7273000100006d6163726f732e7273000200006d6174682e72730002000000050c0a000502ffffffff160505063c0402050e0603f0037402010001013d000000040037000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800007467616d6d61662e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000c30200000400b6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006d6163726f732e7273000100006636342e727300020000636f732e7273000300006b5f636f732e7273000300006b5f73696e2e7273000300006d6174682e72730001000000000502ffffffff03f20301040205160a03f80408900403050e03c377082e0508081506034f3c06033d82051741051106c8050d74050a74050b06750603bd7f74050c060332025c0106034e2e0332082e034e3c0404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200343580403051006033e20060342900405050d0603302093052cda051406d6050d06037a20052691053406ba052e9e052620051cd605169e051220050d9e051e063305130620050f20050e20050d3c0509200349580404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e062305260620051d580509200505200343580405050d0603302093052cda051406d6050d06037a20052691053406ba052e9e052620051cd605169e051220050d9e051e063305130620050f20050e20050d3c0509200403050e06030e200603bb7f580404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e062305260620051d580509200505200403050e060309200603ba7f3c04010603f50320020e000101a000000004009a000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e727300010000636f732e7273000200006b5f636f732e7273000200006b5f73696e2e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000070100000400a4000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000636f6e762e7273000100006d6f642e7273000200006636342e7273000200006d6163726f732e727300030000696e745f6d6163726f732e72730002000000050c0a000502ffffffff03140106036b82040205050603cf02f203aa06740401051103a1773c05096705111e051f0674051120050906300603653c05190603f4007405180620064b0403051603d708200404050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000008b000000040085000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000696e745f6d6163726f732e7273000200006636342e72730002000000c301000004009a000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e7273000100006d75745f7074722e727300020000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050c0a000502ffffffff03d700010513030aac06039e7f5803e2004a039e7ff203e2004a040205120603b307740403039b7f740401053503b3797405110658040305120603cd06740401053503b379580511064a040305120603cd06740401053503b379580511064a040305120603cd06740401053503b379580511064a069105131e053508910511069005130673050c0376084a0513310603a57f5803db009e03a57f6603db004a040305120603d506d60401053503ad79740511068206730513730603a57fd603db004a040305120603d5069e0401053503ad79ba051106c8040305120603d306740401053503ad79580511064a040305120603d306740401053503ad79580511064a05353c051174067305131f0404050e03b403660201000101a000000004009a000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e7273000200006d75745f7074722e727300030000636f6e73745f7074722e727300030000003a01000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e727300010000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03cb00010603b47f7405110603ca004a050f920603b47f085803cc0082040205120603e406ac04010531039d7974050d06ba040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a050f0673050d92050f1e0603b47fba03cc0066053106c9050d0690050f06730403050e03c303084a02010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e7273000300000093000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e72730002000000050f0a000502ffffffff03fd00010603827f7405110603f100083c050f030d900603827f085803fe0082050d06ad050f025411050d92050f1e0603827fba03fe0066050d064b050fc70402050e039103d602010001013d000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e7273000200000061000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f20301040205090a03b17c083c0401050e03d103082e020e0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000035080000040081010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006d6163726f732e7273000100006633322e727300020000706f77662e72730003000066616273662e727300030000636f6e73745f7074722e72730004000073717274662e7273000300007363616c626e662e7273000300006d6174682e7273000100006d6f642e7273000300006d6f642e727300050000696e6465782e72730005000000000502ffffffff03f20301040205160a03ff04d60403050803e077083c0603ae7f2e03d200ba03ae7f580603dc0008660603a47f3c03dc008203a47f3c0603e6004a06039a7f3c050c0603e700ba0603997f3c05130603e900820603977f3c05170603eb00c805104b0603947f9e051e0603ed00660511062003937f5805100603dd00200401050e0398035806038b7c20040305080603f300082006038d7f3c03f30082038d7f3c050c0603f5008206038b7f3c05130603f8009e0603887f3c05170603fd00c80401050e03f8022006038b7c20040305140603fa00c80401050e03fb022006038b7c200403051306038201580603fe7e3c0401050e0603f5032e06038b7c200403050806038501c80603fb7e3c038501820510063e0401050e03ee025806038b7c200403050b06038c01580603f47e3c0404051d06030b200403050803890108820603ec7ed6050c06039701660508034f0812050c0336200603e47e2e051106039d019e051006200515063d051106580401050e0603d7025806038b7c20040305080603e600ba03c100200603d97e2e051706039f0108120401050e03d6022e06038b7c20040305140603aa01200401050e03cb029e06038b7c20040305080603b401082e0603cc7e3c050c0603da01740509085e92050e710509069e050c06f606039d7e3c05130603e6019006039a7e3c050d0603ec01e4730603957e3c040505120603b007580620040305270603de7a900405051203a20582040303c17a900402051603dd073c0403051303a478580509063c061f0510cf050f067405370659051e0620040205160603d507820403050903a578200402051603ff06740403051e038479660402051603d807200403051903ad78200514063c061f05090674052606210513063c0509200625050fd705141e050e06740509061e050d59054906083c054366053e20053866053320052d66052820052266051d200517660509200621220402051603f1063c0403051e0391794a0402051603cb07200403050d03b978200514d30513062005093c0519062305090620061f930402051603e9063c0403051e0399794a0402051603c307200403051303be782005090658051c0668050f068205092e040505120603a205200403051d03e17aac0509d2050f24050e063c0509061f3d0402051603e1063c0403051d03a1794a0402051603bb0720040303c678200515065805143c05093c03ec7d58050c0603b701ac0603c97e3c0603bf019e0603c17e3c05090603c90174050d851e053406082e052266051e20051720050920051b06680509062006b9220402051603a5073c0403051d03dd784a0402051603ff072004030512038278200509065803b07e5805170603c001740603c07e3c05110603c301740401050e03b2027406038b7c20040305110603c101820401050e03b4027406038b7c20040305170603b801740603c87e3c05110603bb01740401050e03ba027406038b7c20040305110603b901820603c77e900401050e0603f5032006038b7c3c0403052806038201660401050e03f3023c06038b7c2004060517060317200401050e03de033c06038b7c200403051906039902f20402051603b507200403050503cd7820051b3b050b067405058206220402051603d6063c0403050803ac79ac0603e27d3c050f0603a102820603df7d3c050c0603a3027405180620050c5803dd7d4a05140603a402740401050e03d1017406038b7c20040305100603a002820401050e03d5017406038b7c200403050f0603a602c80603da7dba0603aa02820603d67d3c03aa027403d67d4a05100603ae02740401050e03c7017406038b7c20040305100603a902820401050e03cc017406038b7c20040305080603b702c80603c97d3c05200603b902e40509062e050e06a1050d0666053082050c06c90509fd052721051c062004020516060393073c0403050903f278200505220402051603b0063c06038e773c0403050a0603ce0274051803767404020516038a07200403050503f7788205239f0510062005097405057406213e0536089105300666052c20052666052220051c66051820051266050e20050520050906210514069e050920050d061d05050674052606230521067405052006210402051603a606740403050503dc793c0508830402051603ff063c04030505038779580401050e03a0012006038b7c200407050806dd0603793c050f0603115806036f3c050906031274050c8406036c3c0509060828050c840603763c050d06031508200510ca0603699e050d06030b820510ca06037382051806031c900402051603b209820407050503ce7620040303b902200401050e03a00120020100010149010000040043010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006633322e727300010000706f77662e727300020000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400007363616c626e662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000066616273662e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000073717274662e7273000100000041000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000005110a000502ffffffff03f30301050e9f0201000101610100000400ab000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e72730001000073696e682e7273000200006636342e7273000300006578706f322e7273000200006d6174682e72730001000000000502ffffffff03f20301040205080a03a27cd60403051603b70958039f7f580402050503ae77f205093f0505062005080693050903103c0404035ef205050620040206032208900401050e03c6032006038b7c200402050d06032020050c083d06035f3c051d06032a0812051906200514200510200401050e0603cb032006038b7c2004020510060322ac05194105230674052bf205232005182005142003593c0401050e0603f50320020300010189000000040083000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000073696e682e7273000100006636342e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800006578706f322e727300010000005203000004007c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006d6163726f732e7273000100006636342e727300020000657870322e7273000300006d6f642e7273000400006d6f642e727300020000636f6e73745f7074722e7273000400007363616c626e2e7273000300006d6174682e7273000100006d6f642e7273000300006d6f642e727300050000696e6465782e72730005000000000502ffffffff03f20301040205160a03f80408580403050e03ed79ac0508f30603a77d3c050f0603ef02820603917d3c05100603f102ac0401050e0384012006038b7c200403050c0603db029e0603a57d2e03db028203a57d3c0603e102c806039f7d3c0603e5025806039b7d4a05140603e3029e0401050e0392013c06038b7c20040305100603e802d60603987d4a051d0603e902ac0404050903c309740401050e03c977e406038b7c20040305200603e802ba0603987df2051d0603e902ac0404050903c309740603d473820403050d0603de02ba0401050e0397012006038b7c200403051b0603f502ba0402051603f6052004030512038b7a3c040505050383064a0406051203b77e580403051c03cf7bd6050e08380511210406051203b404900403051903d07b200505063c05110621053d06083c05379e053320052d9e05292005239e051f2005199e051120050d20050e060378740407050803907d08120603773c050f0603136606036d3c0509060316ac050c920603683c050906030a0858050c920603743c050d06031908580510ca0603659e050d06030dba0510ca0603718205190603208205180620040205160603ac094a0407050503d476200401050e03d5032002010001016401000004005e010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006636342e727300010000657870322e7273000200006d6f642e72730003000075696e745f6d6163726f732e727300010000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400007363616c626e2e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000074020000040073010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e740073726300006633322e7273000100006269742e7273000200006d6f642e727300010000636d702e727300030000657874656e642e7273000400006d6f642e72730005000061726974682e7273000200006636342e7273000100006d6163726f732e7273000600006d6f642e72730004000075696e745f6d6163726f732e7273000100000005160a000502ffffffff03f108010402052e03b978e40403050503ce07820404053403f402740405050803b9742006035a2e040405340603f10bba0405050f03bd7420030b2e0603474a0402053506039606740603ea790858040605430603f00220040305050389063c0405052b03c777740403050503d108200402053003e279ac0405052003cc7d4a0406054303b1023c0403050503a1063c0402052d03fe78200603f17d58040605430603f002200403050503a106580407053303e67cac0603897a3c0402052e0603ab01ac0406054303c501200403050503a1063c0402052d03fe78200408051603bd07200409050e03a97a2002010001016f010000040069010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006633322e7273000100006d6f642e727300020000657874656e642e7273000200006d6163726f732e7273000300006269742e72730004000075696e745f6d6163726f732e7273000100006d6f642e727300050000636d702e72730006000061726974682e7273000400006636342e727300010000008300000004007d000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e74000075696e745f6d6163726f732e7273000100006d6f642e727300020000002501000004009f000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000666d61662e7273000100006636342e7273000200006d6163726f732e7273000300006d6174682e72730003000000050a0a000502ffffffff0336010515065805053c0513062105050658040205160603b3083c0401050803d177ac0603449e033c0882050a06420603be7fba03c2005803be7f5805120603de0058051906f2050f068f0519210512063c050f06a30508064a040205160603e9084a0603b4763c0403050e0603f5034a02010001019a000000040094000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000666d61662e7273000100006d6163726f732e7273000200006636342e727300030000008e000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03b57d08740403050d03997f023e010402050103e70008820401050e03cd02f20402050103b37dc80401050e03cd0290020f0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000001b0100000400a5000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006633322e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a03b60508580403051403917708580402050503ef08660401050e03cc7a08740403051403c57c08660511c5300525c705240620051182051c069105260658051b2005162005153c0509062204040516039309200401050e03a77a20020100010186000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006633322e7273000200000087000000040043000000010101fb0e0d0001010101000000010000017372632f6d656d007372630000696d706c732e7273000100006d6163726f732e7273000200006d6f642e72730001000000050b0a000502ffffffff039d02010603e27d900402050e06039b032e0603e57c200401050b06039e02580509083d050b570402050e03fd00820203000101410100000400eb000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e7400006d6163726f732e7273000100006d6f642e727300020000706f772e72730003000061726974682e7273000400006d6f642e72730005000000000502ffffffff03f20301040205050a03dc7e083c0403050c03bc7daca20404053303e5063c0403050c039779083c94050973050c3d0508b205110372900508030e200401050e03e003200201000101f80000000400f2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e74007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f70730000696e745f6d6163726f732e7273000100006d6f642e727300020000706f772e7273000300006d6163726f732e72730004000061726974682e727300050000003a0200000400ad000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006174616e32662e7273000100006d6163726f732e7273000200006633322e72730003000066616273662e7273000100006d6174682e7273000200000005080a000502ffffffff031c010510e50402050e03d7035806038b7c20040305160603f208200401050803b177c805103e0402050e03d0038206038b7c2004010521060327580520063c040305160603cb08200401050e03b57790050d062005050608840508230603544a060334088206034c58033482034c3c0513060339820603473c050d06033aba0603462e033a4a0402050e0603bb03ac06038b7c2003f5033c038b7c2003f50366038b7c2004010510060335660402050e03c0033c06038b7c20040105080603ca00d60603b67f2e050003ca008205082003b67f5805100603cb00660402050e03aa033c06038b7c20040105100603cf00200603b17f9003cf00f203b17f5805150603d300200404051d03b87f580401050903c800200603ad7f82050e0603d90008660402039c037406038b7c2004010603d700200402039e033c06038b7c20040105130603d800c8050e0620040206039d032006038b7c200401050d0603c100c80603bf7f2e03c1004a03bf7fc80402050e0603f5032002030001018b000000040085000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006174616e32662e7273000100006633322e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000066616273662e72730001000000fe0000000400bb000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e727300010000636f70797369676e2e727300020000726f756e642e7273000200007472756e632e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402050b039f77d6050506ac040105160603c209200403050b03bb76200404051d3f0405050e03eb0320020100010199000000040093000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e727300010000636f70797369676e2e727300020000726f756e642e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800007472756e632e7273000100000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000a1010000040006010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e727300020000636f73682e7273000300006b5f6578706f322e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03d9050874039f7f580403050503a37708200508cd06036d3c06031ee40603623c0404050906030dac05050620037308c80403051106031f20051b08300516063c05109e035f58050c060314e4051141051583052306f2051d2005155805109e0366580519060316d60405050903960c4a0603d47308120401050e0603f50320020e000101d80000000400d2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e727300010000636f73682e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003d000000040037000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800006b5f6578706f322e7273000100000079000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f20301040205170a03bf7c083c0510082f0401050006034d740402050d0603347406034c3c0401050e0603f50320020e0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000cf000000040093000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263007372632f696e7400006d6f642e7273000100006d6163726f732e7273000200006164647375622e7273000300006d6f642e7273000300000005050a000502ffffffff039009010402050e03e47a7404010505039c05580674040305180603f676580402050e03ee032e0204000101a100000004009b000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e7273000300000077000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f203010402051b0a03e87c083c051408f30603a47f7405110603dd0008120603a37f9e0401050e0603f50320021a0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000095000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03ae7d08900690200403051b0603ba7f0234010402050103c600022a010401050e03d402023c010402050103ac7d740401050e03d40282020f0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000ac040000040054010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e7400006d6163726f732e7273000100006636342e7273000200006269742e727300030000636d702e7273000400006d756c2e7273000500006d6f642e7273000200006d6f642e7273000500006d6f642e72730006000061726974682e72730003000000000502ffffffff03f20301040205160a03f80408ac0403052e03c078d60402051603c0073c0403052e03c078d6053003c8013c052e03b87ef2051103a10374052e03df7c4a051103a103022501052e03df7c4a0404053403c60a660405050803ba74580603552e032bc803553c0403052e0603ab01d60404053403c80ad60405050c03bf742006034e2e040405340603f30b089e0405050c03c3742006034a2e040405340603990bc80405050c03a175200603462e040405340603990bc80405050c03ab752005000603bc7f2e050c0603cf003c0404053403ca0a2e0405050c03bb753c0603ac7f2e040405340603ed0b08120406050503a47d3c0368900407051503ab78200406050503ed075803be793c0603b17d3c040405340603ed0bba0406050503a47d3c0368900407051503ab78200406050503ed073c0405050d03d2775806039d7f66040305110603d60374053503c0020890040605050393033c0408053e03c77966063c0406050506035f3c06200603da06580403052e03827808900404053403f009200603e5744a0403052d06038f024a0511038d05c80406050503b37b820603b17d580404053406039b0b200405051003a0753c0603453c0603c50008120603bb7f3c040205160603cc09d60603b47674040605050603cf02660603b17d3c0405050806038701660603f97e3c06038b01660408054303e5013c0403051103e60058053603f901ba053503c700200603ea795804060505060391093c0405050c038278740403052d03fc003c04050529038b7f900403051103bc0220052d03b97e20051103bd0220052d03c37d82051103df053c0603927890052d06038f02d60402051603bd074a0603b476580403052d06038f02d60402051603bd074a0603b476580403052d06038f02ba0402051603bd07200603b476580403052d06038f02ba0402051603bd07200603b476580403052d06038f02d60402051603bd07200603b4765803cc092003b476740403053506039606200404053403dd0508580405050803bd75200603d07e2e040905330603f7054a0402051603d503200603b47658040405340603990bf204050508039b76200603cc7e2e0403052e0603ab01660409053303cc04200603897a3c040205160603cc09200603b476580401050e0603f50320020e0001017501000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f61740073726300006633322e7273000100006269742e727300020000636d702e727300030000636d702e7273000400006d6163726f732e7273000500006d6f642e7273000400000005160a000502ffffffff03f108010402052e03b978900403053403c80a740401051603ff7c200402052e03b978900404050503b77f740405050e0393032e02010001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006633322e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e727300050000008e0100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03c37c9005133e06034874040305150603b4024a04040505039406740620040305010603947a580404050503ec05580403051503e979c804040505039706200405052d03c7793c0403050103cd00580515035e200603c67d3c0401050e0603f5032006038b7c3c040305150603b4025804040505039406580401050e03ad7b2e0201000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300006269742e727300040000009c0200000400f9000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e7273000200006c6f6731702e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03f804083c0403050a03ea777405050620050806085a0603a97f2e03d7008203a97f3c050c0603d900900603a77f3c0603e0004a0603a07f9e05100603e3008206039d7f4a0401050e0603f5032e06038b7c200403050f0603ee00900603927f3c0401050e0603f5032e06038b7c200403050c0603e800083c050803092006038f7f2e050e0603f20008820402051603f907200403050e03887874050906200659050d590509064a050c06087605143d050d0228170603837f58050e060382017405090674050e0621052206ba050920040205160603c908200403050903b8779e050503093c0603f37e74051d0603e400200404050903c80b820401050e03c9778206038b7c20040305100603db00088205143f0603a27f08120401050e0603f5032006038b7c3c0403053506038e01ba051706d6051620050d060379f205050620050c06f1050506200622750520083d0519069e051520050e9e050520052b0608210524069e05202005199e051520050e9e0505200621050922050506200401050e0603e702740201000101d90000000400d3000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e7273000100006c6f6731702e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000008c000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e727300020000736469762e72730002000000000502ffffffff03f20301040205090a03997c083c0403050c03fa00accb0402050903837f740401050e03e903c80403050c03987dc80401050e03e802d602010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003c0200000400d8000000010101fb0e0d000101010100000001000001737263007372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400006d6163726f732e72730001000062696e6172795f6c6f6e672e7273000200006d6f642e7273000300006e6f726d5f73686966742e727300020000756469762e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f20301040205100a03aa7c7406036390040305050603f9082e063c040405170603c7773c051e2205180674040205200603d2024a560403050503e7057404020510039c7a3c0603eb7c7406039903820603e77c3c051106039b03c8051b210511c60403050503df05200402051403a67a74f60603dd7c740603ae03820603d27c8203ae03e403d27c5803ae03ac03d27c3c040305050603f908660620040205280603be7af20403050503c205200402051403b57a740603d27c9e03ae035803d27c3c040305050603f9089e0620040205280603be7af20403050503c20520063c20040205280603be7af20403050503c20520063c20040205280603be7af20403050503c20520063c20040205280603be7af20403050503c205200402051103b87a7405141d0603d27c4a05290603ba032e0515067403c67c9e0405051006031a20050d75060365740401050e0603f503200203000101b00000000400aa000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000062696e6172795f6c6f6e672e72730001000075696e745f6d6163726f732e7273000200006e6f726d5f73686966742e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000d9040000040022010000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e72730001000073696e662e7273000200006633322e72730003000072656d5f70696f32662e7273000200006b5f636f73662e7273000200006b5f73696e662e7273000200006d6f642e7273000400006d6174682e7273000100006d6f642e72730002000000000502ffffffff03f203010402050f0a03aa7c08c80403051603d508580402050503b177e405089206035b3c0603339e06034d3c0603c3009e0603bd7f3c0603d10008200603af7f3c0404051c0603274a0508e80603553c051306032eac08410511bb06034c08c8033420034c82033408120523022512051d200532ba051d20034c58050f06033c90050e064a05210659051c06200403051606039109200404050503ef7620050d83040205100364086604040508031d200509310603be7f9005110603c0003c0516065805155803403c0402050b0603d700580603a97f7405100603d200200603ae7f900405050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402050e06033f2e0603a57f580406050d06031920773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660405050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660406050d060319200402051503c100580406050d0342581e0520770512b8050d069e05200622051506d6050f9e050b2005062005053c0363660402050c0603c500ac0603bb7f3c05100603220858051a032b200406050d034c4a773a0520770512b8050d069e05200622051506f2050f9e050b2005062005052003636604020510060322740325200603b97f2e05200603ca00ac0405050d034f20050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402051806032e2e0603b67f58051f0603c800ba0405050d035120050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660402050c060335ac06034b3c05100603220858051a031b200406050d035c4a0402051a0324580406050d035f581e0520770512b8050d069e05200622051506d6050f9e050b2005062005053c03636604020510060322740315200603492e051f06033aac0405050d035f20050ef50507069e050d061e0518f405060620052220051206f1050d069e052206210505062003646604020520060338ba0405050d036120050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402051806031c2e06034858050c060327ac0406050d03723c5b560520770512b8050d069e05200622051506d6050f9e050b2005062005053c0363660402051c06032a9e05000603560820040705090603ac0c3c0603d473660401050e0603f50320020e000101f20000000400ec000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472000073696e662e7273000100006633322e7273000200006b5f636f73662e7273000100006b5f73696e662e7273000100006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000008e000000040088000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000072656d5f70696f32662e7273000100006633322e72730002000000590200000400fa000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006633322e7273000200006c6f673170662e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03ff04f20403050803b87708660603563c050c06032c820603543c0603334a06034d9e05100603368206034a4a0401050e0603f5032e06038b7c200403050f0603c100900603bf7f3c0401050e0603f5032e06038b7c200403050c06033bf205080309200603bc7f2e050e0603c50008120402051603ad08200403050903d57782050d590509064a050c06083e05143d050d08e90603b07f58050e0603d5008205090674040205160603f908200403050903897766050503093c0603a07f74051d060337200404050903f50b9e0401050e03c9778206038b7c200403051006032e081205143f06034fc80401050e0603f5032006038b7c3c040305350603e100820517069e051620050d060378ba05050620050c06c005050620061b750515d8050e06660505200515069d050e06660505200622050923050506200401050e06039403740201000101da0000000400d4000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006633322e7273000100006c6f673170662e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000ad010000040004010000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e727300040000696e745f6d6163726f732e72730003000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03aa7c9005134206035d74040305150603b4024a04040505031b2e04030501030d5804040505039d068203d6793c040305150362200404050503c8063c0405052d0396793c0403050103cd00200515035e200603c67d3c0401050e0603f5032006038b7c3c040305010603dc025805150358ba04040505031b2e04030501030d3c0515035e200401050e03bb01200201000101000100000400fa000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e727300010000696e745f6d6163726f732e72730003000075696e745f6d6163726f732e7273000300006269742e72730004000000db010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d756c2e7273000200006d6f642e7273000200006d6f642e72730003000000000502ffffffff03f20301040205100a03cf7c740603be7f6605090603f2004a0401050e0383035806038b7c20040205100603c200580603be7f740603cb0066051b930510037a08120403050d03db00c80402050903807f2006035d2e0403050d0603a301820402050903807f200404050503d6082e06038777c8040305150603c802740404050503b106200402050006038777900404050503f90820040305150603d579740404050503ab06200402051703b777c8060350580403050d0603a301900402050903807f2006035d2e040305150603c802660404050503b106200402050006038777900404050503f90820040305150603d579740404050503ab06200402051703b177c806035658040405050603f9082006038777ac040205100603d3003c051b8b051025230603aa7fc805090603f200200401050e0383037402030001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d756c2e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e727300030000000b0100000400a4000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000636f6e762e7273000100006d6f642e7273000200006636342e7273000200006d6163726f732e727300030000696e745f6d6163726f732e72730002000000050c0a000502ffffffff0328010603579e040205050603e602c803ab067404010511039c77580509da051163051c7505260658051b2005162005153c0509062206034fe4051806038001f2210403051603cb08200404050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000008b000000040085000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000696e745f6d6163726f732e7273000200006636342e7273000200000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000080200000400d8000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263007372632f696e74000062696e6172795f6c6f6e672e7273000100006d6f642e7273000200006e6f726d5f73686966742e7273000100006d6163726f732e727300030000756469762e72730004000075696e745f6d6163726f732e7273000200000005100a000502ffffffff031c010402050503dc08900674040305170603c7773c051e2205180674040105200603d0024a0402050503e7053c04010510039c7a3c0603eb7c7406039903660603e77c3c051106039a03820402050503df05200401051403a67a90320603dd7c740603ae03820603d27c7403ae038203d27c5803ae03ac03d27c3c040205050603f908660620040105280603be7af20402050503c205200401051403b57a740603d27cd6040205050603f908660620040105280603be7af20402050503c20520063c20040105280603be7af20402050503c20520063c20040105280603be7af20402050503c20520063c20040105280603be7af20402050503c205200401051103b87a7405141d0529030c660603c67c740404050e0603f503200203000101b00000000400aa000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000062696e6172795f6c6f6e672e72730001000075696e745f6d6163726f732e7273000200006e6f726d5f73686966742e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000041000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000005110a000502ffffffff03f30301050e9f0201000101390100000400e2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e7400006d6f642e7273000100006d6163726f732e7273000200006269742e7273000300006164647375622e7273000400006d6f642e7273000400000005050a000502ffffffff039009010402050e03e47a740403052203c87cac0401050503d40820063c040405150603fb763c04010505038509200620040405180603f676580402050e03ee032e0204000101f00000000400ea000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e7273000300006269742e72730004000000f70500000400c7000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006c67616d6d615f722e7273000200006d6174682e7273000300006d6163726f732e727300030000666c6f6f722e7273000200006b5f73696e2e7273000200006b5f636f732e7273000200000005160a000502ffffffff03ea08010402050b03d278c8050a0620050574050806910603c27e3c0603c101ba0603bf7e3c05050603bc014a0508030d200603b77e2e05050603bc0108ac050c270403050903a67f3c0402050c03da0082051240051106660404050e0603ae022006038b7c200402051006039801ba0405051d03f87e200402050f0388015805050620050906f4050506ba03e67e08c8039a012003e67e82039a01082e050e0608750509063c050a0621050506c8069f08140603e17e740406050d06033020933a052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b580407050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200343580406050d060330200402051403f100580406050d03927f581e052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b740407050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200402050e0603e500200603de7e3c050c0603cc01d60603b47e3c0603d001e4051908950514063c05102003ab7e9e051b0603ce019e0515065803b27e5805110603bf01200603c17e74040305090603e900580404050e038c033c06038b7c3c040205090603db01e40603a57e3c03db018203a57e3c053203db012003a57e58050d0603df0108740603a17e3c050f06039702d605000603e97d3c050f0603b10208200603cf7d3c05110603ba02c80509062003c67d5806039902ba0603e77d08c80399022003e77d82039902082e05110608590509063c050d06bd054908720543069e053f2005399e053520052f9e052b2005259e052120051b9e05172005119e0509200545060859053f069e053b2005359e053120052b9e05272005219e051d2005179e05132005099e0517062105090620050c060310740603d37d5805090603b4029e3d05440891053e069e053a2005349e053020052a9e05262005209e051c2005169e05122005099e050d06bb051906ba050d2005092003c97d5805120603ae02d6050c0846081d037a022901cb081523050d24051221050d066603d17d58050c0603e001084a0603a07e3c05100603ef01820603917e3c05120603e2010882050d0682051006085906039d7e3c05170603e6018206039a7e3c0603f301088206038d7e3c05110603f801ac0603887ed6054806038e0208740542069e053e2005389e053420052e9e052a2005249e052020051a9e051120054406083d053e069e053a2005349e053020052a9e05262005209e051c2005119e05210621051606ba05112e03f07d580603f501ba06038b7ed6060385022075053908750533069e052f2005299e052520051f9e051b2005119e05150623053a08b80533069e052f2005299e052520051f9e051b2005119e053a06083d0533069e052f2005299e052520051f9e051b2005119e052e062105280620052420051e200511200516069f0511062003f57d580603fe018205430891053d069e05392005339e052f2005299e052520051f9e051b2005119e05150622054808570542069e053e2005389e053420052e9e052a2005249e052020051a9e0511200621051abb0516062005112003fe7d3c040305090603e900200402050503d30008200508038001200404050e03b901200201000101a500000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006c67616d6d615f722e7273000200006b5f73696e2e7273000200006b5f636f732e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666c6f6f722e727300010000007f030000040007010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e7273000100006d6f642e727300020000636f6e73745f7074722e7273000300006d75745f7074722e727300030000696d706c732e7273000200006d6163726f732e72730004000075696e745f6d6163726f732e7273000100000005050a000502ffffffff03db09010402050c03c676c804030512038e0758040403e500740405050803b479c80603b77e3c040405120603e403ac0405052103e87d900404052203a507200405050f039178580603fe7e0812040405120603e403660405051503a17d20050d0674050f06710603fe7e9e05090603d0012e0517ae05000603ae7e20040305120603d503580405052003fe7dac0603ad7e4a050f0603aa014a0603d67e3c051f0603a101f2050f030958051dc40603da7e74040405120603e403660405051d03ca7d20051c7205445a051d0658050d0626050f0376740603d67eba06038f01660603f17ec8040405120603e403660405051b03ae7d20050d0674050f06710402050c03937fba0405050803c2009e06039c7f3c040105050603dc09ac04050521038b77580404051203ae07200405050f038b785806036074051506032182050d06900403051206038f0774040403e500740405050f038b7820050903cb00900517ae05000603937f20040305120603b007580405052003be79c8050c210603917f3c050f0603c8004a0603b87f3c051f06033ff2050f030958051dc47c051c8e05325a051d0658050d0625050f0377740404051203cd07740405050f03b37820050c032790050f03be7f660603533c051b06032e4a050d0690040405120603e7077406740405050f0603987820050903c900c80403051203ba063c0603d0787404050515060321c8050d06900403051206038f0774040403e500740405050f038b782003ef0090050903cc0066050f03a77f200603fe7e58038201085803fe7e3c040405120603e403660405051503a17d20050d0674050f06710406050e039902ba020300010150000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000380100000400b6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006633322e727300020000696e745f6d6163726f732e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a038a7f089003ac0608e40403051403917708200402050503ef08660401050e03cc7a08740403051403c57c08660511c5300525c705240620051182051c069105260658051b2005162005153c05090622051803cb0058910404051603c708200401050e03a77a2002010001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000696e745f6d6163726f732e7273000100006d6163726f732e7273000200006633322e7273000100000086000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000003801000004009a000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e7273000100006d75745f7074722e727300020000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03cb00010603b47f7403cc004a03b47ff203cc004a040205120603c907740403039b7f7404010531039d7974050d0658040305120603e3067404010531039d7958050d064a040305120603e3067404010531039d7958050d064a040305120603e3067404010531039d7958050d064a0691050f1e05310891050d0690050f06730404050e03c303084a0201000101a000000004009a000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e7273000200006d75745f7074722e727300030000636f6e73745f7074722e72730003000000f601000004002c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400006d6163726f732e7273000100006636342e7273000200006269742e727300030000636d702e727300040000636d702e7273000500006d6f642e72730005000000000502ffffffff03f20301040205160a03f804900403052e03c07808200404053403c80ad60405050803bf7420050006034e2e0508033208c80403052d0603dd013c04040534038a097404050508039e75200603493c0401050e0603f5032e06038b7c200403052e0603ab01200404053403c60aac0405050803cf74200404053403b30b2e0405050f03d974580603b47f4a040405340603ed0b200405050c03d474580603bf7f2e040405340603990b200603e774740401050e0603f5032002030001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006636342e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e72730005000000cc01000004008c000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006d6f642e727300020000636f6e73745f7074722e72730003000000000502ffffffff038c0401040205110a03ca7c74050c3d0513030aac06039e7f5803e20082039e7f085803e20082040305120603ce06ac0402053503b37974051106ba040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a0513067305119205131e06039e7fba03e20066053506c90511069005130673050c0376084a0513310603a57f5803db004a03a57fe403db004a05350608e605110690051306720603a57f087403db005803a57f3c03db006603a57ff2040305120603b007660402053503ad79580511064a040305120603d306740402053503ad79580511064a040305120603d306740402053503ad79580511064a05353c051174051306720511d705131f0401050e03b4036602010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e7273000300000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000410100000400eb000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e7400006d6163726f732e7273000100006d6f642e727300020000706f772e72730003000061726974682e7273000400006d6f642e72730005000000000502ffffffff03f20301040205050a03dc7e08740403050c03bc7daca20404053303e5063c0403050c039779087494050973050c3d0508ea05110372900508030e200401050e03e003200201000101f80000000400f2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e74007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f70730000696e745f6d6163726f732e7273000100006d6f642e727300020000706f772e7273000300006d6163726f732e72730004000061726974682e72730005000000bb000000040092000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f61740073726300006636342e7273000100007375622e7273000200006d6163726f732e7273000300006d6f642e7273000200000005160a000502ffffffff03cb09010402050903c176580403050e03e8036602010001018e000000040088000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f61740073726300006636342e7273000100006d6f642e7273000200006d6163726f732e7273000300000088000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03ab7d08c804030509038d7f083c0401050e03ca03c80402050103a97dc80690200401050e0603d7022002010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000560100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000300006269742e7273000400006d6f642e72730002000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03947cba05133f060376580403050506039109660620200603687403185806200404052d0603fe782e040305050382073c0603ef7690039109742003ef76820401050e0603f50320020f000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e72730002000075696e745f6d6163726f732e7273000300006d6f642e7273000100006269742e727300040000003c050000040066010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e740073726300006633322e7273000100006269742e727300020000636d702e7273000300006469762e7273000400006d6f642e7273000100006d6f642e72730004000061726974682e7273000200006d6f642e7273000500006d6163726f732e72730006000075696e745f6d6163726f732e7273000100000005160a000502ffffffff03f108010402052e03b9789e0401051603c7073c0402052e03b9789e053003c8013c052e03b87eac051103a10374052e03df7c4a051103a1030882052e03df7c4a0403053403c60a660404050803c874580603472e0339c803473c0402052e0603ab01900403053403c80a900404050c03cd74200603402e040305340603f30b08120404050c03d174200603bc7f2e040305340603990b820404050c03af75200603b87f2e040305340603990b820404050c03ba752032030b5806039e7f58040305340603ed0bc80404050c03fc74200603977f2e040505050603f9082e03d6793c03aa06ac0406051503ab78200603dc7e3c040305340603ed0b820404050c0382752004050505038a082e03d6793c0404050d03a27e7404050505038808900406051503ab78200603dc7e3c040505050603f9082006740402053506039d7d0890051103c07d580405050503a305200404051203c4793c05110666052106650540780517062005165805120671051106200521068105407805170620051658051206710511062005210681054078051706200516580407052d0603947f740408051503f400740402053503ce0382051103c07d580408051503f27e200405050503c9063c0408051503a3793c0403053403b909900404052f038077200603937d2e040205110603d6034a0398045804050505038b012006588203877758040205110603d603580405050503a3052006580603d679820603b17d740404050806039d03660603e37c3c05190603a403820603dc7c3c050c0603aa03660603d67c3c03aa0366040505050603cf05200404052903b47a740405050503cc053c0404050d03bb7a200405050503c505660603877758040105160603ce09200409050e03a77a3c06038b7c20040405100603a603580402052e03857e82053503eb04200511038601740603e4783c052e0603ab01740407053303cc04200403053403fc053c0404050c03cb773c0402052d03d17e200401051603bf073c0409050e03a77a2006038b7c20040305340603990b08200404051003b075200603b77f2e0402052d06038f02820401051603bf074a0603b2763c0409050e0603f5032006038b7c3c0402052d06038f02820401051603bf07200409050e03a77a2006038b7c200402052d06038f02820401051603bf07200409050e03a77a2006038b7c20040105160603ce09200409050e03a77a3c06038b7c20040405100603d800900409050e039d033c06038b7c200402052d06038f02900401051603bf07200409050e03a77a2006038b7c200402052d06038f02900401051603bf07200409050e03a77a2002010001017d010000040077010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f696e7400006633322e7273000100006d6f642e7273000200006469762e7273000200006d6163726f732e7273000300006269742e727300040000636d702e72730005000075696e745f6d6163726f732e7273000100006d6f642e72730006000061726974682e727300040000696e745f6d6163726f732e7273000100006636342e7273000100000096000000040090000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e7273000100006d6f642e727300020000696e745f6d6163726f732e7273000100000048030000040072010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e740073726300006636342e7273000100006269742e7273000200006d6f642e727300010000636d702e7273000300007472756e632e7273000400006d6f642e72730005000061726974682e7273000200006633322e7273000100006d6163726f732e7273000600006d6f642e72730004000075696e745f6d6163726f732e7273000100000005160a000502ffffffff03ea08010402052e03c07808900403050503e607c806d6040405340603dc02200405050803c5742006034e2e040405340603f30bc80405050f03cf74200603be7f2e040405340603f10b084a0405050f03d974200603b67f2e040205110603cc04ac0406053903a47e200405051503e27d3c050c5d0603a97f3c0402052e0603ab01ac052d03e4009e051103bd0220069e040605390603a47e200402052e03bb7eac0405052d03af7f740402051103fc02200404053403c5073c0405051d03bf75200402052e03d100200404053403c80a900405051003f1742006039c7f2e040405340603990b820405051503cf75200603987f2e0402052e0603ab014a0407053303cc04200603897a74040205110603cc04580406053903a47e200402052e03bb7eac0404053403c80a900405050c03c874200603452e040405340603990b082e0405051303a575200603422e0402052e0603ab01660407053303cc04200603897a58040205110603cc04580406053903a47e200402053503a603c80603ea7958040705330603f705580603897a5803f7059003897a3c0403050506039109740406053903df79200402052d039f7f820408051603bf07200409050e03a77a2002010001016e010000040068010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006636342e7273000100006d6f642e7273000200007472756e632e7273000200006d6163726f732e7273000300006269742e72730004000075696e745f6d6163726f732e7273000100006d6f642e727300050000636d702e72730006000061726974682e7273000400006633322e72730001000000c3050000040077010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e7400006d6163726f732e7273000100006636342e7273000200006269742e727300030000636d702e7273000400006469762e7273000500006d6f642e7273000200006d6f642e72730005000061726974682e7273000300006d6f642e727300060000696e745f6d6163726f732e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205160a03f80408900403052e03c078d60402051603c0073c0403052e03c078d6053003c8013c052e03b87ef2051103a10374052e03df7c4a051103a103089e052e03df7c4a0404053403c60a6604050508038a78580603857c2e03fb03c803857c3c0403052e0603ab01d60404053403c80ad60405050c038f78200603fe7b2e040405340603f30b089e0405050c039378200603fa7b2e040405340603990bc80405050c03f178200603f67b2e040405340603990bc80405050c03fc7820040405340384072e0405050c0380793c040405340380072e0405050c038b793c0603dc7b2e040405340603ed0b08120405050c03be78200406050503e6042e0368900407051503ab78200406050503ed075803be793c0603b17d3c040405340603ed0bba0405050c03c478200406050503e0042e0368900407051503ab78200406050503ed073c03be793c0405050d03e401580603cd7b3c040305350603960608900405050d03d67e5804060505038d04200405052503a07c900406050503f803ba0405052403887c5805150620053c06030f740406050503e903200405051c03977c5805250371740406050503f803200405052403887c7405150620053c06030f740406050503e903200405051c03977c5805250371740406050503f803200405052403887c7405150620053c06030f740406050503e903200405051c03977c580406050503d1033c0405050d03e17c740403051103fc7df20405051803fa01740536030a200535063c0406050506038c7d200405051703f70266052d220517b7051b240406050503b103660408052d03c3784a0403053503c204d6051103c07d580406050503d305580368660409054303df79580406050503a1063c0318ac0404053403c402e40405052f03c17a200603d2792e040305110603d6034a039804580406050503a3012006588203ef7658040305110603d603580406050503bb052006580603d5798206039a7d74040505080603de06660603a2793c05190603e5068206039b793c050c0603eb0666060395793c040605050603f908660318200405052303de7d740406050503a2023c0405050d03e57d2004060505039b02660603ef7658040205160603cc09200603b47674040505100603e706580403052e03c47aba053503eb04200511038601740603e4783c052e0603ab01740408053303cc04200404053403fc053c0405050c038c7b3c0403052d03907b2e0402051603bd073c0603b47658040405340603990b08820405051003f278200603f57b2e0403052d06038f02c80402051603bd074a0603b476580403052d06038f02ba0402051603bd07200603b476580403052d06038f02ba0402051603bd07200603b4765803cc092003b47674040405340603990bc8040505100381793c0603e67b580403052d06038f02d60402051603bd07200603b476580403052d06038f02d60402051603bd07200603b4763c0401050e0603f50320020e0001010f0100000400a5000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006636342e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a03b60508580608580401050e0603cc7a08c80403051403cf7c08ac0511c522051273051c060812051120051c065905260658051b2005162005153c0509062204040516038709200401050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006636342e7273000200000092000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03b67d08740690200403050d0603a47f0234010402050103dc0008820401050e03cc02820402050103b47dc80401050e03cc0290020f0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000fb01000004002c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400006d6163726f732e7273000100006636342e7273000200006269742e727300030000636d702e727300040000636d702e7273000500006d6f642e72730005000000000502ffffffff03f20301040205160a03f804900403052e03c07808200404053403c80ad60405050803bf7420050006034e2e0508033208c80403052d0603dd013c04040534038a097404050508039e75200603493c0401050e0603f5032e06038b7c200403052e0603ab01200404053403c60aac0405050803cf74200603402e040405340603f30b4a0405050f03d974580603b47f4a040405340603ed0b580405050c03d474580603bf7f2e040405340603990b200603e774740401050e0603f5032002030001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006636342e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e7273000500000071010000040004010000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e727300040000696e745f6d6163726f732e72730003000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03aa7cd605134206035d4a040305010603dc02ac04040505030a900620039a7d660603f9085803ed795806200603ab068206200405052d0603fe784a0404050503d7003c06039a7d740401050e0603f50320020f000101000100000400fa000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e727300010000696e745f6d6163726f732e72730003000075696e745f6d6163726f732e7273000300006269742e72730004000000be0100000400f7000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e727300010000696d706c732e7273000200006d6f642e7273000300006d75745f7074722e7273000400006d6f642e72730002000075696e745f6d6163726f732e72730003000000000502ffffffff039803010402050f0a03e47eac0508062003837e2e040305050603dc09ac0402051c03a4785804040512039506200402050f03d0795806039b7e74050d0603e6014a0404051203af06c80402050f03d079200509031e900517ae04040512039006200402050f03e279ac0603897e3c050d0603f801d604040512039d06c80402050f03e2792005090311c80603f87d3c050d0603e601e40404051203af06c80402050f03d0792006039b7e740401050e06039b032e0203000101d30100000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c6f6732662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050803bc7708200603523c050f06033b820603453c06033d083c06034358050c060330900603504a0603337406034d2e0509060338740401051603ba082006038e779e040205140603342006034cc80403050e0603f5032006038b7c3c0402051a06033166051406580403050e0603c4032006038b7c20040205050603c20082050a84050506740401051606038a09200402050503fa7666050cc10505062006220401051603a1083c0402050503e1774a0401051603fb08200402052a03887782050a1f050d03740812050506200621910515d8050e06660505200515069d050e06660505200622051e27051a0620050520051b068305050620050a06036d08120505062005390603133c050506200403050e06039f032002010001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006c6f6732662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002e0100000400af000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100007363616c626e662e7273000200006633322e7273000300006d6174682e7273000100006c64657870662e72730002000000000502ffffffff03f20301040205080a03947cd60603793c050f0603115806036f3c050906031274050c8406036c3c0509060828050c840603763c050d06031508200510ca0603699e050d06030b820510ca06037382051806031c740403051603b209820402050503ce76200401050e03d90320020100010199000000040093000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00007363616c626e662e7273000100006c64657870662e7273000100006633322e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003e0200000400ac000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000061636f73662e72730002000073717274662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050e03bb7708120508920603513c0603399e0603473c0603c100660603bf7f3c05090603c80058050506820403051706034f2004020525f5051d0666051920051166050d2005120683050d06660505062105090331200401051603a508200402051d03d9778204010516038309200402051203fe7620050d0658051d20050d5805050621050a210505063c0404050e0603a7035806038b7c200402050d0603c200c8050906660403051706035520040205250823051d0666051920051166050d2005120683050d066605050621050d0328200509066605200621051506200510200404050e0603b0035806038b7c200402050c06033af20603463c053006033e580525035cf2051d0666051920051166050d2005120683050d066605050621052a032220051f063c0510200404050e0603b7039006038b7c200402050c060330900603503c05150603365805100658034a3c0404050e0603f5032006038b7c3c04020510060331e4050006034f200404050e0603f5032002010001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e72730001000061636f73662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000073717274662e7273000100000061000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f203010402050d0a03da7c083c0401050e03a80308f202160001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000ee00000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e72730001000072696e742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea080104020508039c770820060379e4051606030aac051702250e051624050cdc0603703c050d060311082006036f580403050e0603f5032002030001019a000000040094000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e72730001000072696e742e7273000200006d6163726f732e72730003000000da00000004008a000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e7273000100006d75745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03fd00010603827f7403fe004a03827ff203fe004a0402051206039707740401050d03ea7874025313050f1e050d082f050fc70403050e039103d602010001019000000004008a000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e7273000200006d75745f7074722e727300030000000c0100000400a5000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006633322e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a039e05c8040305140393773c0402050503ed08ac040305110390779030051273051b0674051120051c068305260658051b2005162005153c050906220404051603a909200401050e03a77a20020100010186000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006633322e72730002000000cc01000004008c000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006d6f642e727300020000636f6e73745f7074722e72730003000000000502ffffffff038c0401040205110a03ca7c74050c3d0513030aac06039e7f5803e20082039e7f085803e20082040305120603ce06ac0402053503b37974051106ba040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a0513067305119205131e06039e7fba03e20066053506c90511069005130673050c0376084a0513310603a57f5803db004a03a57fe403db004a05350608e605110690051306720603a57f087403db005803a57f3c03db006603a57ff2040305120603b007660402053503ad79580511064a040305120603d306740402053503ad79580511064a040305120603d306740402053503ad79580511064a05353c051174051306720511d705131f0401050e03b4036602010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e72730003000000310200000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006c6f6731302e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402050803cf7708200603462e033ac803463c050f0603c600820603ba7f3c0603c80008660603b87f3c052303c8007403b87f580403050e0603f5039006038b7c200402050c06033bd60603454a06033e580603422e05090603c300ac0401051603a808200402050e03da77580509062003bb7f8205050603cd0074050a59050506200603183cbb050a03689005050674050a0621051e06ba050520040105160603fc0820040205050387779e050cf30505062006030a2004010516038d083c0402050503f577740401051603ec082004020505039977ba030b20050f3d050a03719e050d0373084a050506200621910520083d0519069e051520050e9e050520052b0608210524069e05202005199e051520050e9e0505200621051e28051a0620050520053606c0050e06ba051f20050ee405052006030920230403050e0381032006038b7c200402051406033f2006034108120403050e0603f5032006038b7c3c0402051a06033c9e051406580403050e0603b9032002010001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006c6f6731302e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000a0010000040008010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006633322e727300020000636f7368662e7273000300006b5f6578706f32662e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03db05087403a47f5804030505039e77c805089506036b3c06031f9e0603613c0404050a06030d7405050620037308580403051106032020051be50516063c051066035f58050c060316ac051140051583052306ba051d2005155805106603655805190603179e0405050903950c4a0603d473c80401050e0603f50320020e000101d90000000400d3000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006633322e727300010000636f7368662e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003e000000040038000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800006b5f6578706f32662e727300010000009501000004002d010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006d6f642e7273000100006d6163726f732e7273000200006269742e7273000300006164647375622e727300040000636d702e7273000500006d6f642e7273000400000005050a000502ffffffff039009010402050e03e47a740403052203c87cac0401050503d40820063c040405150603fb763c04010505038509200620040405180603f676580402050e03ee032e0405053403f807580402050e038878082002040001013b010000040035010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e7273000300006269742e727300040000636d702e72730005000000ec0000000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000072696e74662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f1080104020508039577c80603799e051606030a740517087e051624050ca40603703c050d0603119e06036f580403050e0603f5032002030001019b000000040095000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000072696e74662e7273000200006d6163726f732e72730003000000bf020000040070010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006d6163726f732e7273000100006633322e72730002000065787032662e7273000300006d6f642e727300040000636f6e73745f7074722e7273000400006636342e7273000200006d6174682e7273000100006d6f642e7273000300006d6f642e727300050000696e6465782e72730005000000000502ffffffff03f20301040205160a03ff0408200403050e03e977e40508910603a47f3c050f0603f1008206038f7f3c05100603f300740401050e0382032006038b7c200403050c0603de00ac0603a27f3c0401050e0603f5032e06038b7c200403050c0603e200c806039e7f3c0603e7004a0603997f58050d0603e400820401050e0391032006038b7c20040305100603e900ac0603977f3c03e9007403977f3c051d0603ea00820404050903c20b660403051003c074d60603947f3c0401050e0603f5035806038b7c200403051b0603f700820402051603fb072004030505038778585b0405051203b4063c0403052103d179820505d30512210527cc051a069e0512061f0516590512063c0553ba05469e053c2005385805124a050d06037758051f4b051e0620040605160603d1084a0403050503ba77200401050e03ef022e02010001015001000004004a010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006633322e72730001000065787032662e7273000200006d6f642e727300030000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400006636342e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000091000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03a37d08c804030517039c7f083c0402050103e40008580690200401050e0603df024a0402050103a17dc80401050e03df02d602010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000960100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03c37c9005133e06034874040305150603b4024a0404050503c5062e0403050103e3795804040505039d0682063c040305150603b879200404050503c8063c0405052d0396793c0403050103cd00200515035e200603c67d3c0401050e0603f5032006038b7c3c040305150603b402580404050503c5062e0403051503d2793c0401050e03aa01200201000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300006269742e7273000400000061000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f20301040205090a03b87c083c0401050e03ca03082e020e0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000fd000000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d6f642e7273000200006d6f642e7273000300006d756c2e72730002000000000502ffffffff03f20301040205150a03d87ec806ac0403050506031b2004020515034e900403050503322004020515034ec80403050503322003173c0401050e03f800740403050503f17e58031774036908660658060317580401050e03f8002e02040001019d000000040097000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6f642e7273000100006d756c2e7273000100006d6163726f732e727300020000696e745f6d6163726f732e727300030000001b0200000400d8000000010101fb0e0d000101010100000001000001737263007372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400006d6163726f732e72730001000062696e6172795f6c6f6e672e7273000200006d6f642e7273000300006e6f726d5f73686966742e727300020000756469762e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f20301040205100a03aa7c7406036390040305050603f9082e063c040405170603c7773c051e2205180674040205200603d2024a560403050503e7057404020510039c7a3c0603eb7c7406039903820603e77c3c051106039b03c8051b210511c60403050503df05200402051403a67a74f60603dd7c740603ae03820603d27c7403ae038203d27c5803ae03ac03d27c3c040305050603f908660620040205280603be7af20403050503c205200402051403b57a740603d27cd6040305050603f908660620040205280603be7af20403050503c20520063c20040205280603be7af20403050503c20520063c20040205280603be7af20403050503c20520063c20040205280603be7af20403050503c205200402051103b87a7405141d0515030c660603c67c9e0401050e0603f503200203000101b00000000400aa000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000062696e6172795f6c6f6e672e72730001000075696e745f6d6163726f732e7273000200006e6f726d5f73686966742e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000006a0100000400ad000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006879706f74662e7273000200006d6163726f732e72730003000073717274662e7273000200006d6174682e7273000300000005160a000502ffffffff03f1080104020505039d77900401051603e3082004020505039e77ac0508210401051603bd09820402050803cb76e40603673c06031c08ba06036482031cac03643c0603218206035f3c050f060325e406035b3c0509060328749d060359ba051006031d200403050e03d8035806038b7c2004020509060324829d06035d9e052606032a200510069e050f820404051706036d2e040205050313200603563c0403050e0603f5032002030001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006879706f74662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000073717274662e727300010000002a0700000400d6000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c67616d6d61665f722e7273000200006c6f67662e727300020000666c6f6f72662e7273000200006b5f73696e662e7273000200006b5f636f73662e7273000200006d6174682e7273000300006d6163726f732e7273000300000005160a000502ffffffff03f1080104020505038a78089e0508910603837f3c06038001ba0603807f3c05050603fb00e40508030d200603f87e2e05050603fb00084a050c270401051603f0073c0403050803ad779e0603613c050f06032b820603553c06032d083c06035358050c0603219006035f4a0603247406035c2e0509060329740401051603c9082006038e779e040305140603252006035be4040205100603d800820404051d03b57f200402050f03cb005805050620050906bc0505068203a67f089003da002003a67f8205090603dc00200505082c050e083d0509063c05160621050506c8069f08130603a27f740405050d06031920773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660406050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660405050d060319200402051503c700580405050d03bc7f581e0520770512b8050d069e05200622051506d6050f9e050b2005062005053c0363660406050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402050e0603c5002e06039f7f3c050c06038b019e0603f57e3c06038f01ac051a08790515063c040105160603de07200403050803ad779e0603613c050f06032b820603553c06032d083c06035358050c0603219006035f4a0603247406035c2e0509060329740401051603c9082006038e779e040305140603252006035be40402051b06038d01660515065803f37e5805110603fe00200603827f74040705090603ef00580408050e0386033c06038b7c3c0403051a0603226605140658035e58050506033282050b5905050620050e06030c3c052f83050a037482050506740401051606039a09200403050d03e97666051603099e051103789e050d0620051006c0050d29750519d805120666050e200519069d05120666050e20050d0622050923050506200340ac051a0603226605140658035e58050506033282050b5905050620050e06030c3c052f83050a037482050506740401051606039a09200403050d03e97666051603099e051103789e050d0620051006c0050d29750519d805120666050e200519069d05120666050e20050d062205092305050620034090040705090603ef009e0402051103173c0408050e03ef023c06038b7c200402050806039a01ac0603e67e3c039a018203e67e3c050d06039e019e0603e27e3c050f0603d601d605000603aa7e3c050f0603f00108200603907e3c05110603f901900509062003877e580603d801820603a87e089003d8012003a87e8203d801082e05110608210509063c050d06850549083a05430666053f20053966053520052f66052b20052566052120051b660517200511660509200545060821053f0666053b20053566053120052b66052720052166051d200517660513200509660517062105090620050c060310740603947e5805090603f301663d05440859053e0666053a20053466053020052a66052620052066051c20051666051220050966050d068305190682050d20050920038a7e5805120603ed019e050cc4d3037a08ba93cb23050d24051221050d066603927e58050c06039f01084a0603e17e3c05100603ae01820603d27e3c05120603a1010812050d068205100608210603de7e3c05170603a501820603db7e3c0603b201084a0603ce7e3c05110603b701740603c97e9e05480603cd01083c05420666053e20053866053420052e66052a20052466052020051a66051120054406f3053e0666053a20053466053020052a66052620052066051c20051166052106210516068205112e03b17e580603b401820603cc7e9e0603c40120750539083d05330666052f20052966052520051f66051b2005116605150623053a084805330666052f20052966052520051f66051b20051166053a06f305330666052f20052966052520051f66051b20051166052e062105280620052420051e20051120051606670511062003b67e580603bd018205430859053d0666053920053366052f20052966052520051f66051b20051166051506220548081f05420666053e20053866053420052e66052a20052466052020051a660511200621051a830516062005112003bf7e3c040705090603ef002004020505030c08200508038001200408050e03fa012002010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003c000000040036000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666c6f6f72662e72730001000000cb0200000400aa000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e72730001000061636f732e727300020000737172742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402050a03de77c80505062006750508920603b47f3c0603d9009e0603a77f3c0603e1006606039f7f3c05090603e80090050506ba0403051706037020040105160393085804020519038078900401051603e108200402050e03a1772005090658051920050558054906034708740542069e053e2005379e053320052c9e05282005219e051d2005169e05122005390608210532069e052e2005279e052320051c9e05182005129e05050621050903382005050620050a06210505063c0404050e060386035806038b7c200402050d0603e200084a0509069e040305170603762004020549035c08ac0542069e053e2005379e053320052c9e05282005219e051d2005169e05122005390608210532069e052e2005279e052320051c9e05182005129e05050621050d032e200509069e05200621051506200510200404050e060390035806038b7c200402050c0603da00083c0603a67f3c05300603de00900549035608900542069e053e2005379e053320052c9e05282005219e051d2005169e05122005390608210532069e052e2005279e052320051c9e05182005129e05050621052a032820051f063c0510200404050e06039703c806038b7c200402050d0603cf009005171e050c3e0603b17f4a05150603d600900510065803aa7f3c0404050e0603f5032006038b7c3c040205100603d100086605000603af7f200404050e0603f50320020100010189000000040083000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e72730001000061636f732e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e72730001000000ef000000040093000000010101fb0e0d0001010101000000010000017372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e7273000100006d6163726f732e7273000200006d6f642e7273000300006636342e72730003000000050c0a000502ffffffff03140106036b660402050e0603f5039006038b7c20040305050603f9084a0401051103a1773c05096705111e051f0674051120050906300404051603b109200402050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006636342e727300020000003c010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d6f642e7273000200006d6f642e7273000300006d756c2e72730002000000000502ffffffff03f20301040205150a03c17e740403050503c506200402051503bb79740403050503c5062003183c0402051503a0794a031a90036620031aac0403050503ae06200402050103e3793c0515035e20037a580674040305050603c506200402050103e3793c0403050503b5064a0368200402051503d279580403050503ae06200402051503d279580403050503c60620064a0401050e0603e47a2002010001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6f642e7273000100006d756c2e7273000100006d6163726f732e72730002000075696e745f6d6163726f732e7273000300000042010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d6f642e7273000200006d756c2e7273000200006d6f642e72730003000000000502ffffffff03f203010402050d0a03b07d084a0403050903807f740402050d0380012e0403050903807f58040405050386092e0603d776022c0103a90920083c082eba74660403051706038777d60404050503f9083c0603d776900402050d0603a301200403050903807f58040405050386092e06082e082eac74660403051706038177d60404050503ff083c0603d7769003a9092003d7760225010401050e0603f5032002220001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6f642e7273000100006d756c2e7273000100006d6163726f732e72730002000075696e745f6d6163726f732e7273000300000092000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e72730002000000050f0a000502ffffffff03fd00010603827f7405110603f100d6050f030d900603827f085803fe0082050d06ad050f025311050d92050f1e0603827fba03fe0066050d064b050fc70402050e039103d602010001013d000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e727300020000003e0400000400c6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006d6163726f732e7273000100006636342e727300020000666d612e7273000300006d6f642e7273000200007363616c626e2e7273000300006d6174682e727300010000696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205160a03f804022201040303a6779005057605082106036c4a050e060315ac0402051603d608200403050d03ab7758050906580510065906036990040205160603eb0820040303a6779005057605082106036c4a050e060315ac0402051603d608200403050d03ab7758050906580510065906036990040205160603eb0820040303a6779005057605082106036c4a050e060315ac0402051603d608200403050d03ab77580509065805100659060369900508060335d606034b3c033558034b3c06033808660603483c040405050603a909025b0104030516039e770866ad050876050c03153c0603a17f74060339f205143e060345ba05130603e100e406039f7f3c0603e20082052006d6051fe4050d2e039e7f58050c0603cb00660603b57f3c050d0603d100580510bc0603ad7f3c05170603d400740603ac7f3c051e0603d5000866051706580529ac05175805352005347405112e063d0603aa7f9005100603362006034aba050d0603cc0020051bbb050d065803b37f5805190603e90020050808150510770404050503a208580403051603de779e0509062003917f58040405050603910920067490580403050c0603e4776606038b7f3c040405050603e602c80403050d03927e900538d5050d062e03897f5805130603fa0020050840050f4105100309820603f47eba0404050506039109200403050c03f477660603fb7e5805090603840166050d240603f87e8205130603860158051e0658050d2003fa7e900404050506039109200403050903ef779e050f220521069e051a3c050f20052d20052c7405092e067f0603817f3c0508060392016605165b050503793c0508030908200603e97e3c050c06039901580603e77e3c051e0603b9017405110674051006ad050d5b0405050903d97e9e050c840603683c050806030908200603773c050f0603135806036d3c050906031758d506036a5806030b66d506037658051006031b66050dd4060367580403051006039b0108823f0603e27e740603a701580603d97e7405230603a201ba05472f0518069e03dd7e5805160603a8017405210658051520051406f305115b05152105110658052a06420525081f051a210515066603cd7e3c04050509060316ba06036a8205190603208205180620040205160603ac094a0405050503d476200603603c0401050e0603f50320020e000101b80000000400b2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e727300010000666d612e72730002000075696e745f6d6163726f732e727300010000696e745f6d6163726f732e7273000100007363616c626e2e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000007b0200000400b5000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006174616e322e7273000100006d6163726f732e7273000200006636342e7273000300006d6f642e727300030000666162732e7273000100006d6174682e7273000200000005080a000502ffffffff0334010510e50402050e03bf035806038b7c20040305160603eb08200401051203cd77900404050503c1089e0401050e03c0772005083f05105a0402050e03b7038206038b7c20040105210603c000580520063c040305160603ab08200401050e03d57790050d062e051206037ac805058a050e0379200508030a580603bb7f3c0402050e0603f503089006038b7c2003f5039e038b7c20040105080603cd009e0603b37f820603d100ba0603af7f3c050c0603d200820603ae7f3c05140603d300f20603ad7f2e03d3004a0402050e0603a203ac06038b7c20040105080603e300d606039d7f2e050003e30074050820039d7f5805100603e4009e0402050e0391033c06038b7c20040105100603e800200603987f9003e800082e03987f5805130603ec00200405051d03a17f580401050903df00200603947f82050e0603f200089e0402038303ac06038b7c2004010603f0002004020385033c06038b7c20040105130603f100084a050e06200402060384032006038b7c20040105140603da0008120603a67f2e03da004a03a67fc80402050e0603f5032006038b7c3c040105100603ce009e0402050e03a7033c02010001019c000000040096000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006174616e322e7273000100006636342e72730002000075696e745f6d6163726f732e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666162732e72730001000000510100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000300006269742e7273000400006d6f642e72730002000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03c37cba05133e06034858040305050603f9084a031858062082200404052d0603fe784a040305050382073c0603ef7690039109742003ef76820401050e0603f50320020f000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e72730002000075696e745f6d6163726f732e7273000300006d6f642e7273000100006269742e72730004000000f6000000040093000000010101fb0e0d0001010101000000010000017372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e7273000100006d6163726f732e7273000200006d6f642e7273000300006633322e72730003000000050c0a000502ffffffff1a060377660402050e0603f5035806038b7c20040305050603f9082004010511039477580509da051163051c7505260658051b2005162005153c050906220404051603bd09820402050e03a77a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006633322e72730002000000b6040000040022010000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e727300010000636f73662e7273000200006633322e72730003000072656d5f70696f32662e7273000200006b5f73696e662e7273000200006b5f636f73662e7273000200006d6f642e7273000400006d6174682e7273000100006d6f642e72730002000000000502ffffffff03f203010402050f0a03aa7c08c80403051603d508580402050503b177082e05089206035b3c06032f9e0603513c06033a9e0603463c0603c70008200603b97f3c0404051c0603274a0508e80603553c051306032eac08410511bb06034c08c8033420034c82033408120523022512051d200532ba051d20034c58050f06033c90050e064a05210659051c06200403051606039109200404050503ef7620050d83040205100364086604040508031d200509310603be7f9005110603c0003c0516065805155803403c0402050b0603cd00580603b37f7405100603c800200603b87f900405050d06031920773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660406050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660405050d06031920040205150336580405050d034d581e0520770512b8050d069e05200622051506d6050f9e050b2005062005053c0363660406050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402050e0603342e0603b07f58050c06033c900603443c0510060322660513031d200603412e051b0603c200ac0405050d035720773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660402051b0603c0009e0405050d03593c773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660402050c0603319006034f3c051006032266051303122006034c2e051b060337900405050d03623c773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660402051b060335ba0405050d036420773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660402050c060327ac0406050d03723c050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660402051906032a9e0407050903820c4a0603d473e4040205100603220866051e031c200406050d035b4a050ef50507069e050d061e0518f405060620052220051206f1050d069e0522062105050620036466040205100603220866051f0311200406050d03664a050ef50507069e050d061e0518f405060620052220051206f1050d069e0522062105050620040205140603172e06034d3c0401050e0603f50320020e000101f20000000400ec000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720000636f73662e7273000100006633322e7273000200006b5f73696e662e7273000100006b5f636f73662e7273000100006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000008e000000040088000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000072656d5f70696f32662e7273000100006633322e7273000200000041000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000005110a000502ec71000003990301050ebb0201000101b9010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d756c2e7273000200006d6f642e7273000200006d6f642e72730003000000000502ffffffff03f20301040205100a03cf7ce40603be7fba0603cb0066051b930510037a08120403050d03db00e40402050903807f2006035d2e0403050d0603a3019e0402050903807f200404050503ee082e0603ef76c8040305150603c802900404050503c90620040205000603ef76900404050503910920040305150603bd79740404050503c3062004020517039f77e4060350580403050d0603a301ac0402050903807f2006035d2e040305150603c802820404050503c90620040205000603ef76900404050503910920040305150603bd79740404050503c3062004020517039977e4060356580404050506039109200603ef76ac040205100603d3003c051b8b051025230603aa7fc805090603f800200401050e03fd027402030001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d756c2e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e72730003000000880200000400bf000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006d6f642e7273000200006173696e2e727300020000666162732e727300020000737172742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402050503ec79c8040303f77d820508920603b07f3c0603db00d60603a57f3c0404051d06030d900403050903d7003c0505069e054906035708580541069e053d2005359e05312005299e052520051d9e05192005119e050d200537060821052f069e052b2005239e051f2005179e051320050d9e0505062104050517031b3c04030508030fc80603997f3c040105160603eb08900402050503ff79900401051603e206200403055303a47720054206580512069d050d0674051b2005095805370621052c0658051e2005098203907ff2050c0603dd00740523a10549035b08900541069e053d2005359e05312005299e052520051d9e05192005119e050d200537060821052f069e052b2005239e051f2005179e051320050d9e0505062105180323200514063c0406050e060395033c06038b7c20040305220603e9009e051d06740518200517d605092003977f3c05080603f2009e0406050e0383032e06038b7c200403050d0603d3009004020505038902200403050c03f77d3c0603ad7f4a051a0603d700900514065803a97f3c0406050e0603f5032006038b7c3c040305140603d500ba0406050e03a003ac02010001019300000004008d000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006d6f642e7273000200006173696e2e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666162732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e72730001000000bb000000040092000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f61740073726300006633322e7273000100007375622e7273000200006d6163726f732e7273000300006d6f642e7273000200000005160a000502ffffffff03cd09010402050903ba76580403050e03ed036602010001018e000000040088000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f61740073726300006633322e7273000100006d6f642e7273000200006d6163726f732e7273000300000057000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e7273000200000005090a000502ffffffff033b010402050e03df02ba020100010190000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e727300020000736469762e72730002000000000502ffffffff03f20301040205090a039f7c083c04030501038201ac0402050903fe7e083c0401050e03e303c804030501039f7dc80690200401050e0603e1022002010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000d60100000400a1000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c6f673130662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050803bf77082006034f3c050f06033e820603423c0603c000083c06034058050c0603339006034d4a0603367406034a2e050906033b740401051603b7082006038e779e0402051406033720060349c80403050e0603f5032006038b7c3c0402051a06033466051406580403050e0603c1032006038b7c20040205050603c50082050a59050506200603133c054d83050a036d82050506740401051606038709200402050503fd7666050cc105050620062204010516039e083c0402050503e4774a0401051603f808200402053d038c7782050a1e050d03740812050506200621910515d8050e06660505200515069d050e06660505200622051e27051a0620050520052d0684050506820516200505ac0403050e06039b034a02010001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006c6f673130662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000048020000040007010000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e727300010000696d706c732e7273000200006d6f642e7273000300006d75745f7074722e727300040000636f6e73745f7074722e7273000400006d6f642e72730002000075696e745f6d6163726f732e72730003000000000502eb02010003980301040205080a03cb7dac06039c7f3c040305050603dc09ac04020521038b77580404051203ae07200402050f038b785806036074051506032182050d06900405051206038f0774040403e500740402050f038b7820050903cb00900517ae05000603937f20040505120603b007580402052003be79c8050c210603917f3c050f0603c8004a0603b87f3c051f06033ff2050f030958051dc47c051c8e05325a051d0658050d0625050f0377740404051203cd07740402050f03b37820050c032790050f03be7f660603533c051b06032e4a050d0690040405120603e7077406740402050f0603987820050903c900c80405051203ba063c0603d0787404020515060321e4050d06900405051206038f0774040403e500740402050f038b7820060360740401050e06039b032e0203000101290100000400b6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006633322e727300020000696e745f6d6163726f732e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a03f37e082e03ab0674040305140393773c0402050503ed08ac040305110390779030051273051b0674051120051c068305260658051b2005162005153c05090622051803d50058910404051603d308200401050e03a77a2002010001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000696e745f6d6163726f732e7273000100006d6163726f732e7273000200006633322e7273000100000086000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e72730002000000cc01000004008c000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006d6f642e727300020000636f6e73745f7074722e72730003000000000502ffffffff038c0401040205110a03ca7c74050c3d0513030aac06039e7f5803e20082039e7f085803e20082040305120603ce06ac0402053503b37974051106ba040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a0513067305119205131e06039e7fba03e20066053506c90511069005130673050c0376084a0513310603a57f5803db004a03a57fe403db004a05350608e605110690051306720603a57f087403db005803a57f3c03db006603a57ff2040305120603b007660402053503ad79580511064a040305120603d306740402053503ad79580511064a040305120603d306740402053503ad79580511064a05353c051174051306720511d705131f0401050e03b4036602010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e727300030000007a000000040041000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e7273000100006c656164696e675f7a65726f732e72730002000000000502ffffffff03f203010402050c0a03ae7c08200508a4f7e996050c036ae4050896a3a3500401050e03be032002010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000350100000400de000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006d6f642e7273000100006d6163726f732e7273000200006164647375622e727300030000636d702e7273000400006d6f642e7273000300000005050a000502ffffffff039009010402050e03e47a7404010505039c05580674040305180603f676580402050e03ee034a0404053403f807ac06200403050f0603bf74c80402050e03c903200204000101ec0000000400e6000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e727300030000636d702e7273000400000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8039e02010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000078010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d756c2e7273000200006d6f642e7273000200006d6f642e72730003000000000502ffffffff03f20301040205100a03cf7c0225010603be7f08200603cb002efd0869051baf0510037a082e0403050d03db00900402050903807f3c0403050d0380012e0402050903807f58040405050386092e0603d776022c0103a90920083c082eba74660402051706038777d60404050503f9083c0603d776900403050d0603a301200402050903807f58040405050386092e06082e082eac74660402051706038177d60404050503ff083c0603d7769003a9092003d776022501040205100603d3003c051b8b051025085b0603aa7fc80401050e0603f5032002220001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d756c2e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300000092000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e72730002000000050f0a000502ffffffff03fd00010603827f7405110603f100ba050f030d900603827f085803fe0082050d06ad050f025311050d92050f1e0603827fba03fe0066050d064b050fc70402050e039103d602010001013d000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e72730002000000f8000000040093000000010101fb0e0d0001010101000000010000017372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e7273000100006d6163726f732e7273000200006d6f642e7273000300006636342e72730003000000050c0a000502ffffffff032801060357820402050e0603f5039006038b7c2004030505060391092004010511039c77580509da051163051c7505260658051b2005162005153c0509062204040516039b09c80402050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006636342e7273000200000084000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03aa7d08c80403050903877f083c0401050e03d103c80402050103a87dc80401050e03d802d602010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000b9000000040063000000010101fb0e0d0001010101000000010000016c6962726172792f636f72652f737263006c6962726172792f636f72652f7372632f736c696365000070616e69636b696e672e727300010000726573756c742e7273000100006d6f642e7273000200000005050a000502cb2f0000038f01010208000101040205050a0005023972000003f00c01020800010105120a0005022877000003ed000102080001010403050d0a000502cc01000003c91c01020800010100e6e203046e616d6501b6e203d10600126d616e616765645369676e616c4572726f72010e626967496e74536574496e7436340209626967496e74416464030b7369676e616c4572726f72040a6d4275666665724e6577050d6d427566666572417070656e6406096d427566666572457107136d42756666657253746f7261676553746f7265080d6d42756666657246696e697368090a6765744761734c6566740a106d616e616765645343416464726573730b09626967496e744e65770c1b6d616e61676564457865637574654f6e44657374436f6e746578740d0f636c65616e52657475726e446174610e126d427566666572417070656e6442797465730f226d616e616765644d756c74695472616e73666572455344544e465445786563757465100d6d616e6167656443616c6c657211186d616e616765644765744f726967696e616c54784861736812106d4275666665724765744c656e677468130f6d4275666665724765744279746573141c626967496e744765744553445445787465726e616c42616c616e636515136d616e616765644f776e6572416464726573731612626967496e7447657443616c6c56616c7565171c6d616e616765644765744d756c74694553445443616c6c56616c756518126d427566666572476574417267756d656e7419136765744e756d455344545472616e73666572731a11676574417267756d656e744c656e6774681b19736d616c6c496e744765745369676e6564417267756d656e741c17626967496e744765745369676e6564417267756d656e741d19626967496e74476574556e7369676e6564417267756d656e741e1b736d616c6c496e74476574556e7369676e6564417267756d656e741f0f6765744e756d417267756d656e74732016736d616c6c496e7446696e697368556e7369676e65642114626967496e7446696e697368556e7369676e6564220666696e6973682309626967496e74537562240f6d42756666657253657442797465732516656c6c6970746963437572766547657456616c756573261067657443757276654c656e67746845432708637265617465454328146d427566666572436f707942797465536c6963652909626967496e7453686c2a09626967496e745368722b176d42756666657246726f6d426967496e745369676e65642c156d427566666572546f426967496e745369676e65642d09626967496e74506f772e196d42756666657246726f6d426967496e74556e7369676e65642f176d427566666572546f426967496e74556e7369676e6564300a626967496e7453717274311776616c6964617465546f6b656e4964656e74696669657232126d42756666657253746f726167654c6f6164331d6d42756666657253746f726167654c6f616446726f6d41646472657373341b6d616e616765645472616e7366657256616c7565457865637574653509626967496e74436d70360f6973536d617274436f6e7472616374370f6d616e6167656457726974654c6f67380e636865636b4e6f5061796d656e74390a626967496e744c6f67323a12626967496e7446696e6973685369676e65643b14736d616c6c496e7446696e6973685369676e65643c09626967496e744162733d09626967496e744e65673e09626967496e744d756c3f0a626967496e7454446976400a626967496e74544d6f644109626967496e74416e644208626967496e744f724309626967496e74586f724411676574426c6f636b54696d657374616d70450d676574426c6f636b4e6f6e6365460d676574426c6f636b526f756e64470d676574426c6f636b45706f636848196d616e61676564476574426c6f636b52616e646f6d53656564491567657450726576426c6f636b54696d657374616d704a1167657450726576426c6f636b4e6f6e63654b1167657450726576426c6f636b526f756e644c1167657450726576426c6f636b45706f63684d1d6d616e6167656447657450726576426c6f636b52616e646f6d536565644e1167657453686172644f66416464726573734f176d616e616765644765745374617465526f6f7448617368500d6d616e6167656453686132353651106d616e616765644b656363616b32353652106d616e61676564526970656d6431363053106d616e61676564566572696679424c5354146d616e616765645665726966794564323535313955166d616e61676564566572696679536563703235366b31561c6d616e61676564566572696679437573746f6d536563703235366b3157226d616e61676564456e636f6465536563703235366b314465725369676e6174757265580f6d616e6167656443726561746545435916676574507269764b6579427974654c656e67746845435a0561646445435b08646f75626c6545435c0b69734f6e437572766545435d136d616e616765645363616c61724d756c7445435e176d616e616765645363616c6172426173654d756c7445435f106d616e616765644d61727368616c4543601a6d616e616765644d61727368616c436f6d70726573736564454361126d616e61676564556e6d61727368616c4543621c6d616e61676564556e6d61727368616c436f6d70726573736564454363146d616e6167656447656e65726174654b6579454364106d42756666657253657452616e646f6d65136d42756666657253657442797465536c69636566176d616e6167656447657445534454546f6b656e44617461670d626967496e744973496e743634680e626967496e74476574496e743634690a626967496e745369676e6a136d42756666657247657442797465536c6963656b106d616e616765644173796e6343616c6c6c99015f5a4e3130305f244c5424422475323024617324753230246d756c746976657273785f73632e2e636f6e74726163745f626173652e2e77726170706572732e2e6572726f725f68656c7065722e2e496e746f5369676e616c4572726f72244c54244d244754242447542432357369676e616c5f6572726f725f776974685f6d65737361676531376833373031356338643363613135326235456d90015f5a4e3130305f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f746f6b656e5f617474726962757465732e2e546f6b656e417474726962757465734d61707065724665617475726573244754243136746f6b656e5f6174747269627574657331376834613763643731616265393164346161456e725f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331346d616e616765645f62756666657232324d616e61676564427566666572244c54244d2447542431346e65775f66726f6d5f627974657331376833643038366430373365356162323430456f85015f5a4e3130315f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d24475424247532302461732475323024636f72652e2e636c6f6e652e2e436c6f6e652447542435636c6f6e65313768373966303039623864323139376530304570685f5a4e32366d756c746976657273785f73635f7761736d5f616461707465723361706931336d616e616765645f747970657331397374617469635f7661725f6170695f6e6f646531316e6578745f68616e646c653137686639633638306336303166303130346645719c015f5a4e3130335f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f6e6f6e5f66756e6769626c655f746f6b656e2e2e4e6f6e46756e6769626c65546f6b656e4d617070657246656174757265732447542432356e6f6e5f66756e6769626c655f746f6b656e5f6d6170706572313768663762376336366238613433313764334572485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574313173746f726167655f6765743137686261663466623334343234656638376445739f015f5a4e3130365f244c5424245246247374722475323024617324753230246d756c746976657273785f73632e2e636f6e74726163745f626173652e2e77726170706572732e2e6572726f725f68656c7065722e2e496e746f5369676e616c4572726f72244c54244d244754242447542432357369676e616c5f6572726f725f776974685f6d6573736167653137686235653430363661383535386535393145748a015f5a4e3130365f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765244c54247573697a6524475424247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542435696e646578313768313263396233656563633833343432354575655f5a4e34636f726535736c69636532395f244c5424696d706c24753230242475356224542475356424244754243135636f70795f66726f6d5f736c69636531376c656e5f6d69736d617463685f6661696c3137686461313038636438343839366638623445768e015f5a4e3130365f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765244c54247573697a6524475424247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542439696e6465785f6d757431376839353934393839623937616237383039457793015f5a4e3131355f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d24475424247532302461732475323024636f72652e2e636c6f6e652e2e436c6f6e652447542435636c6f6e6531376839646537663031646663343966393565457892015f5a4e3131375f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d24475424247532302461732475323024636f72652e2e636d702e2e5061727469616c4571244754243265713137683566636439623964386332663862313645799e015f5a4e3132305f244c54246d756c746976657273785f73632e2e74797065732e2e696f2e2e73635f6572726f725f7374617469632e2e53746174696353434572726f722475323024617324753230246d756c746976657273785f73632e2e74797065732e2e696f2e2e73635f6572726f722e2e53434572726f7224475424313066696e6973685f65727231376831653831623832363962323661636465457a9b015f5a4e3132345f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e71756575655f6d61707065722e2e49746572244c542453412443245424475424247532302461732475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f7224475424346e65787431376833633839353232656461613365323266457b685f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c542453412443245424475424386765745f6e6f646531376866653932346139303730643962333537457c695f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c542453412443245424475424396765745f76616c756531376863333635393765313531313465386638457d9c015f5a4e3132345f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e746f6b656e2e2e746f6b656e5f6d61707065725f73746174652e2e546f6b656e4d61707065725374617465244c54244d24475424247532302461732475323024636f72652e2e636c6f6e652e2e436c6f6e652447542435636c6f6e6531376836383939626339353462313264333461457eb5015f5a4e3132395f244c542462617369635f66656174757265732e2e74797065732e2e636f6465635f6572725f746573745f747970652e2e436f6465634572726f7254657374547970652475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f656e2e2e546f70456e636f6465244754243234746f705f656e636f64655f6f725f68616e646c655f65727231376865306337306163303164666238363963457fc9015f5a4e3136315f244c54246d756c746976657273785f73632e2e636f6e74726163745f626173652e2e77726170706572732e2e73657269616c697a65722e2e45786974436f6465634572726f7248616e646c6572244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e636f6465635f6572725f68616e646c65722e2e4465636f64654572726f7248616e646c657224475424313268616e646c655f6572726f7231376832373230656239633065373834356664458001a1015f5a4e3133305f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e6c696e6b65645f6c6973745f6d61707065722e2e49746572244c542453412443245424475424247532302461732475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f7224475424346e657874313768646638383737633231333533663931354581013b5f5a4e34636f7265366f7074696f6e31354f7074696f6e244c5424542447542436756e77726170313768353233346430643163343730343866364582017a5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c54245341244324542447542431346765745f6e6f64655f62795f696431376833633735623764353730613364333530458301b7015f5a4e3133315f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f75696e742e2e42696755696e74244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f656e2e2e546f70456e636f6465244754243234746f705f656e636f64655f6f725f68616e646c655f65727231376832666362616163336238306161636134458401695f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963386269675f75696e74313642696755696e74244c54244d244754243138746f5f62797465735f62655f62756666657231376864343464306138653435646239356136458501b4015f5a4e3133335f244c54246d756c746976657273785f73632e2e696f2e2e66696e6973682e2e4170694f757470757441646170746572244c54244641244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f656e5f6f75747075742e2e546f70456e636f64654f757470757424475424313973746172745f6e65737465645f656e636f64653137686139383134346366663836663237663145860186015f5a4e34636f726535617272617938385f244c5424696d706c2475323024636f72652e2e6f70732e2e696e6465782e2e496e6465784d7574244c542449244754242475323024666f722475323024247535622454247533622424753230244e24753564242447542439696e6465785f6d757431376864396534646663393933386665643461458701525f5a4e34636f726535736c69636532395f244c5424696d706c24753230242475356224542475356424244754243135636f70795f66726f6d5f736c69636531376835303133313866626637333434386431458801665f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331346d616e616765645f62756666657232324d616e61676564427566666572244c54244d24475424336e657731376861663936316433303239616631373733458901b7015f5a4e3133335f244c54246d756c746976657273785f73632e2e696f2e2e66696e6973682e2e4170694f757470757441646170746572244c54244641244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f656e5f6f75747075742e2e546f70456e636f64654f757470757424475424323266696e616c697a655f6e65737465645f656e636f646531376865346361633462666662383432626336458a0195015f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656432396d616e616765645f6275666665725f6361636865645f6275696c64657233354d616e616765644275666665724361636865644275696c646572244c54244d244754243139696e746f5f6d616e616765645f62756666657231376834613936656663643131316433643164458b01b5015f5a4e3133355f244c54246d756c746976657273785f73632e2e696f2e2e6172675f64655f696e7075742e2e4172674465636f6465496e707574244c54244141244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64655f696e7075742e2e546f704465636f6465496e707574244754243138696e746f5f6e65737465645f62756666657231376835323839323662326235633839343032458c01645f5a4e31336d756c746976657273785f736332696f31326172675f64655f696e70757432344172674465636f6465496e707574244c54244141244754243137746f5f6d616e616765645f62756666657231376836643430326563393164373336323239458d018d015f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c33306d616e616765645f6275666665725f6e65737465645f64655f696e70757433394d616e616765644275666665724e65737465644465636f6465496e707574244c54244d24475424336e657731376864613963623565623132336238343331458e01bb015f5a4e3133355f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652447542432346465705f656e636f64655f6f725f68616e646c655f65727231376834306432313165363939383465626334458f016e5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963376269675f696e743135426967496e74244c54244d244754243235746f5f7369676e65645f62797465735f62655f62756666657231376861653463373562326364376265636131459001c9015f5a4e3134395f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652447542432346465705f656e636f64655f6f725f68616e646c655f65727231376866356237363233656365306365326664459101bd015f5a4e3133375f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f75696e742e2e42696755696e74244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652447542432346465705f656e636f64655f6f725f68616e646c655f65727231376863623432623763623837353930653133459201b9015f5a4e3133395f244c54246d756c746976657273785f73632e2e73746f726167652e2e73746f726167655f6765742e2e53746f72616765476574496e707574244c542441244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64655f696e7075742e2e546f704465636f6465496e707574244754243138696e746f5f6e65737465645f62756666657231376833623134643835376164663434346239459301685f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574323453746f72616765476574496e707574244c542441244754243137746f5f6d616e616765645f62756666657231376835666463636533646564613361393833459401bb015f5a4e3133395f244c54246d756c746976657273785f73632e2e73746f726167652e2e73746f726167655f6765742e2e53746f72616765476574496e707574244c542441244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64655f696e7075742e2e546f704465636f6465496e707574244754243230696e746f5f6d61785f73697a655f627566666572313768663863653037363334616233363363354595019a025f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c32376d616e616765645f6275666665725f746f705f64655f696e7075743136345f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64655f696e7075742e2e546f704465636f6465496e7075742475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d24475424244754243230696e746f5f6d61785f73697a655f627566666572313768663362643439373739636132633230344596017d5f5a4e31336d756c746976657273785f73633133636f6e74726163745f6261736538777261707065727331326572726f725f68656c70657232304572726f7248656c706572244c54244d2447542432357369676e616c5f6572726f725f776974685f6d657373616765313768313430323165346665653134376262364597017d5f5a4e31336d756c746976657273785f73633133636f6e74726163745f6261736538777261707065727331326572726f725f68656c70657232304572726f7248656c706572244c54244d2447542432357369676e616c5f6572726f725f776974685f6d657373616765313768626231643039623565653533653039624598016f5f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313273656e645f77726170706572323053656e6457726170706572244c5424412447542431316469726563745f657364743137683763623836303537326339383130396345990184015f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313673656e645f7261775f77726170706572323353656e6452617757726170706572244c5424412447542432357472616e736665725f657364745f6e66745f6578656375746531376835633135623264323066663931613937459a01735f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313273656e645f77726170706572323053656e6457726170706572244c542441244754243135657364745f6c6f63616c5f6275726e31376864626230363666636132663662306364459b01715f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e31386d616e616765645f6172675f62756666657232354d616e61676564417267427566666572244c54244d2447542438707573685f61726731376834356233613666383638363936336266459c01715f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e31386d616e616765645f6172675f62756666657232354d616e61676564417267427566666572244c54244d2447542438707573685f61726731376862633861626562333135653633636162459d01715f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e31386d616e616765645f6172675f62756666657232354d616e61676564417267427566666572244c54244d2447542438707573685f61726731376833656333616463383339343732333930459e0185015f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313273656e645f77726170706572323053656e6457726170706572244c54244124475424333363616c6c5f6c6f63616c5f657364745f6275696c745f696e5f66756e6374696f6e31376861653465323231353936323738323761459f01735f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313273656e645f77726170706572323053656e6457726170706572244c542441244754243135657364745f6c6f63616c5f6d696e743137683534326462303832623532346466376245a001795f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313673656e645f7261775f77726170706572323353656e6452617757726170706572244c5424412447542431346173796e635f63616c6c5f7261773137683639336635623231633735636661323645a101d8015f5a4e32366d756c746976657273785f73635f7761736d5f6164617074657233617069313373656e645f6170695f6e6f64653132375f244c5424696d706c24753230246d756c746976657273785f73632e2e6170692e2e73656e645f6170692e2e53656e64417069496d706c2475323024666f7224753230246d756c746976657273785f73635f7761736d5f616461707465722e2e6170692e2e766d5f6170695f6e6f64652e2e566d417069496d706c2447542431346173796e635f63616c6c5f7261773137686165663438363564363862326361306245a2017a5f5a4e31336d756c746976657273785f73633133636f6e74726163745f626173653877726170706572733138626c6f636b636861696e5f777261707065723236426c6f636b636861696e57726170706572244c5424412447542431306765745f63616c6c65723137683235343465383031666339386464343345a3017b5f5a4e31336d756c746976657273785f73633133636f6e74726163745f626173653877726170706572733138626c6f636b636861696e5f777261707065723236426c6f636b636861696e57726170706572244c5424412447542431316765745f74785f686173683137686632643937373333356633663630346645a40180015f5a4e31336d756c746976657273785f73633133636f6e74726163745f626173653877726170706572733138626c6f636b636861696e5f777261707065723236426c6f636b636861696e57726170706572244c5424412447542431366765745f657364745f62616c616e63653137683130373138356435616631396466353345a5017b5f5a4e32366d756c746976657273785f73635f7761736d5f616461707465723361706931336d616e616765645f747970657332336d616e616765645f6275666665725f6170695f6e6f64653236756e736166655f6275666665725f6c6f61645f616464726573733137683065333764323263343835363264376245a60181015f5a4e31336d756c746976657273785f73633133636f6e74726163745f626173653877726170706572733138626c6f636b636861696e5f777261707065723236426c6f636b636861696e57726170706572244c5424412447542431376765745f6f776e65725f616464726573733137683238316363613866643137646234336145a701795f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313863616c6c5f76616c75655f77726170706572323543616c6c56616c756557726170706572244c54244124475424313065676c645f76616c75653137686533333536363034633431306131303345a8017a5f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313863616c6c5f76616c75655f77726170706572323543616c6c56616c756557726170706572244c54244124475424313173696e676c655f657364743137683461616233613638343537626662373245a90181015f5a4e31336d756c746976657273785f73633133636f6e74726163745f62617365387772617070657273313863616c6c5f76616c75655f77726170706572323543616c6c56616c756557726170706572244c542441244754243138616c6c5f657364745f7472616e73666572733137683939363865396231666138333039356345aa0192025f5a4e32366d756c746976657273785f73635f7761736d5f616461707465723361706931336d616e616765645f747970657332336d616e616765645f6275666665725f6170695f6e6f64653136315f244c5424696d706c24753230246d756c746976657273785f73632e2e6170692e2e6d616e616765645f74797065732e2e6d616e616765645f6275666665725f6170692e2e4d616e61676564427566666572417069496d706c2475323024666f7224753230246d756c746976657273785f73635f7761736d5f616461707465722e2e6170692e2e766d5f6170695f6e6f64652e2e566d417069496d706c2447542431336d625f6c6f61645f736c6963653137683433646237643666663864626230663145ab016d5f5a4e31336d756c746976657273785f7363357479706573376d616e6167656437777261707065643138657364745f746f6b656e5f7061796d656e7432376d616e616765645f7665635f6974656d5f66726f6d5f736c6963653137683439633939646233396134373232306245ac016d5f5a4e31336d756c746976657273785f7363357479706573376d616e6167656437777261707065643138657364745f746f6b656e5f7061796d656e7432376d616e616765645f7665635f6974656d5f66726f6d5f736c6963653137686537306331663833303362373966306645ad014c5f5a4e31336d756c746976657273785f736332696f31327369676e616c5f6572726f7231397369676e616c5f6172675f64655f6572726f723137683736616463333261326365663166313745ae01485f5a4e31336d756c746976657273785f736332696f313563616c6c5f76616c75655f696e6974313270617961626c655f65676c643137683031316533616362313033653234646445af014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137683132353534313663333962306363643545b001675f5a4e31396d756c746976657273785f73635f636f646563356d756c74693138746f705f64655f6d756c74695f696e7075743139546f704465636f64654d756c7469496e70757431306e6578745f76616c75653137683963343436613438636564383162663245b101c7015f5a4e3135355f244c54246d756c746976657273785f73632e2e696f2e2e6172675f6c6f616465725f6d756c74692e2e456e64706f696e7444796e4172674c6f61646572244c54244141244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f64655f6d756c74695f696e7075742e2e546f704465636f64654d756c7469496e7075742447542431366e6578745f76616c75655f696e7075743137683266326233653734313836303563336245b201675f5a4e31396d756c746976657273785f73635f636f646563356d756c74693138746f705f64655f6d756c74695f696e7075743139546f704465636f64654d756c7469496e70757431306e6578745f76616c75653137683461326665626162306664363966383645b3014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137683234613730633436333663636365626145b401b9015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733135696d706c5f6e756d5f7369676e656438305f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64652e2e546f704465636f64652475323024666f722475323024693332244754243234746f705f6465636f64655f6f725f68616e646c655f6572723137683863353238666438663961396564643045b5014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137683237393939333634396366636366303345b6014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137683265313030353538303532343434666145b701675f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656431316d616e616765645f76656332334d616e61676564566563244c54244d244324542447542434707573683137683030363036323833316164353833373045b8014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137683461636262313032376230346532376145b9014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137683530306464366363646533633039653545ba014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137686364323765343165396230303630363445bb01c7015f5a4e3134375f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f616464726573732e2e4d616e6167656441646472657373244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64652e2e546f704465636f6465244754243234746f705f6465636f64655f6f725f68616e646c655f6572723137686565643736646165393335363133313045bc014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137686661643038313866353530613239356245bd01d1015f5a4e3136355f244c54246d756c746976657273785f73632e2e696f2e2e6d616e616765645f726573756c745f6172675f6c6f616465722e2e4d616e61676564526573756c744172674c6f61646572244c542441244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f64655f6d756c74695f696e7075742e2e546f704465636f64654d756c7469496e7075742447542431366e6578745f76616c75655f696e7075743137683332366530373530323961663233646145be014b5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531346c6f61645f6d756c74695f6172673137686663303834626238366465326636366345bf0183015f5a4e37385f244c5424542475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f64655f6d756c74692e2e546f704465636f64654d756c74692447542432366d756c74695f6465636f64655f6f725f68616e646c655f6572723137686263393038383034323437386462643645c0014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683030383733663165383531393535636445c101b8015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733135696d706c5f6e756d5f7369676e656437395f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64652e2e546f704465636f64652475323024666f7224753230246938244754243234746f705f6465636f64655f6f725f68616e646c655f6572723137683664343333383836373134386237303845c2014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683030393835336431323236316261303645c301615f5a4e31396d756c746976657273785f73635f636f6465633673696e676c6531356e65737465645f64655f696e70757431374e65737465644465636f6465496e70757439726561645f627974653137683636303331643862383862353862336345c4013f5f5a4e34636f726536726573756c743139526573756c74244c542454244324452447542436756e777261703137683864303631363263353935306337383945c501645f5a4e31396d756c746976657273785f73635f636f6465633673696e676c6531356e65737465645f64655f696e70757431374e65737465644465636f6465496e707574313169735f6465706c657465643137686463633863373763613365313432316145c6014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683130656465653235343834663530656545c701c1015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438365f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64652e2e4e65737465644465636f64652475323024666f7224753230247533322447542432346465705f6465636f64655f6f725f68616e646c655f6572723137686432316639653836383535376263653645c8014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683132373161623038653635663032363445c9014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683134353738663963613564303932663945ca0198015f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c33306d616e616765645f6275666665725f6e65737465645f64655f696e70757433394d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754243133726561645f6269675f75696e743137683264656336636539663061306635616345cb019e015f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c33306d616e616765645f6275666665725f6e65737465645f64655f696e70757433394d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754243139726561645f6d616e616765645f6275666665723137686230373738393733333733306238643245cc014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683135653037653239663230386636336145cd01ef015f5a4e3139385f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e636f6465635f7574696c2e2e6d616e616765645f6275666665725f6e65737465645f64655f696e7075742e2e4d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64655f696e7075742e2e4e65737465644465636f6465496e70757424475424313372656d61696e696e675f6c656e3137683862303532326338626637623432343745ce014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683238356134346431303466343034366545cf01ea015f5a4e3139385f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e636f6465635f7574696c2e2e6d616e616765645f6275666665725f6e65737465645f64655f696e7075742e2e4d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64655f696e7075742e2e4e65737465644465636f6465496e7075742447542439726561645f696e746f3137683461313632343430336364663364383045d0014e5f5a4e31396d756c746976657273785f73635f636f646563386e756d5f636f6e763233756e6976657273616c5f6465636f64655f6e756d6265723137683065653731643834623831626166356545d1014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683238383936396261633136333730663945d2014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683238633432313434343232663663346245d3014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683262663338663737636437326539303545d4014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683263323034326433356261616464396545d501bb015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438305f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64652e2e546f704465636f64652475323024666f722475323024753332244754243234746f705f6465636f64655f6f725f68616e646c655f6572723137686361383635363538323034616534636645d6014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683264353838623664303739356330333745d7014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683330353233643966623838333531616645d801705f5a4e34636f726533636d7035696d706c7336395f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4571244c54242452462442244754242475323024666f7224753230242452462441244754243265713137683736363037643638633838376433636645d9014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683339313935633930653833643365613745da014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683438666131653630313933343539343245db014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683462386163343435356565636462623145dc014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683466653630636136356238313736393545dd014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683565633130663632613334396461643245de014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683630636231633634373361383065393445df014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137683835663135363764626465326564323645e0014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686130323730326333613833393434306245e101ba015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656437395f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64652e2e546f704465636f64652475323024666f7224753230247538244754243234746f705f6465636f64655f6f725f68616e646c655f6572723137683937636530303030396661353237353745e2014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686135333036653530626130313733323745e301a6015f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c33306d616e616765645f6275666665725f6e65737465645f64655f696e70757433394d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754243237726561645f6d616e616765645f6275666665725f6f665f73697a653137686335343632343766386666396335333045e4014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686135663232613462303339366165383945e5014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686161396363666633623061646433313645e6014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686264613933376336313830663332313945e7014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686265646666663161346533613634346445e80197015f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c33306d616e616765645f6275666665725f6e65737465645f64655f696e70757433394d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754243132726561645f6269675f696e743137683635656364616538326532633937613545e9014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686436643138306433626633646333373045ea014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686462623731656335646332323062626345eb014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686465396161303666303835656437356145ec014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686530643531333139633761613530626345ed014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686533363265646634623133343836393045ee014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686565626135653164613962323461356245ef014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686639326631313633333761386239333845f0014c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f6172673137686665353131343630653430383637626545f1014f5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c653138636865636b5f6e6f5f6d6f72655f617267733137686563386335306131353437346565303045f2014f5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c653138636865636b5f6e6f5f6d6f72655f617267733137686661313936396135666635366631343645f301535f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c653232636865636b5f6e756d5f617267756d656e74735f65713137683439393632636165643763643662666345f401535f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c653232636865636b5f6e756d5f617267756d656e74735f67653137683263356437376264663138333732356245f501575f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c653236696e69745f617267756d656e74735f7374617469635f646174613137686435646235643864646337653166343045f601695f5a4e31336d756c746976657273785f736332696f32356d616e616765645f726573756c745f6172675f6c6f6164657233314d616e61676564526573756c744172674c6f61646572244c54244124475424336e65773137683638376238623832396435343337356445f701665f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656431316d616e616765645f76656332334d616e61676564566563244c54244d2443245424475424336c656e3137683265623365376135646363326135633745f8013e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c74693137683361656161366233663866613234656145f901c1015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438365f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652475323024666f7224753230247536342447542432346465705f656e636f64655f6f725f68616e646c655f6572723137683834303061353032653138383939636345fa013e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c74693137683539386138666530626466313464353445fb013e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c74693137683664393162633962313866326662626145fc01c1015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438365f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652475323024666f7224753230247533322447542432346465705f656e636f64655f6f725f68616e646c655f6572723137683837623163396333666362666133373845fd013e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c74693137683734303733313863363066613335373245fe01635f5a4e31396d756c746976657273785f73635f636f6465633673696e676c6531366e65737465645f656e5f6f757470757431384e6573746564456e636f64654f757470757439707573685f627974653137686264616133363733383536663666643245ff013e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c746931376838323138393731363633316133313537458002665f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331346d616e616765645f62756666657232324d616e61676564427566666572244c54244d24475424336c656e313768393832326164303836363164346663394581026e5f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331346d616e616765645f62756666657232324d616e61676564427566666572244c54244d2447542431306c6f61645f736c696365313768323834396166363465313438656439324582022c5f5a4e34636f72653970616e69636b696e673570616e6963313768613236303430343664663734356630664583023e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c7469313768613863303662613631656463383332394584023e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c746931376861633564393665343233393261393664458502ec015f5a4e3139325f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f6275666665725f6361636865645f6275696c6465722e2e4d616e616765644275666665724361636865644275696c646572244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e5f6f75747075742e2e4e6573746564456e636f64654f7574707574244754243136707573685f7370656369616c697a6564313768306366653632313236316563626364634586023e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c746931376863313663323361616635346238313137458702be015f5a4e3135395f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f7665635f6f776e65645f697465722e2e4d616e616765645665634f776e65644974657261746f72244c54244d2443245424475424247532302461732475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f7224475424346e657874313768663434346335346664313532333930624588023e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c7469313768653564356462313937313364633933654589023e5f5a4e31336d756c746976657273785f736332696f3666696e697368313266696e6973685f6d756c746931376866386138633463353961653438623239458a0283015f5a4e37385f244c5424542475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f656e5f6d756c74692e2e546f70456e636f64654d756c74692447542432366d756c74695f656e636f64655f6f725f68616e646c655f65727231376864626636646130346164316364313731458b02665f5a4e31336d756c746976657273785f73633361706931336d616e616765645f747970657331316269675f696e745f6170693133426967496e74417069496d706c313562695f7375625f756e7369676e656431376865313266613562663061303732346562458c02f6015f5a4e32366d756c746976657273785f73635f7761736d5f616461707465723361706931336d616e616765645f747970657331366269675f696e745f6170695f6e6f64653134375f244c5424696d706c24753230246d756c746976657273785f73632e2e6170692e2e6d616e616765645f74797065732e2e6269675f696e745f6170692e2e426967496e74417069496d706c2475323024666f7224753230246d756c746976657273785f73635f7761736d5f616461707465722e2e6170692e2e766d5f6170695f6e6f64652e2e566d417069496d706c244754243762695f7369676e31376830646337333332666264303562336238458d02505f5a4e31336d756c746976657273785f73633465736474313573797374656d5f73635f70726f787931387365745f746f6b656e5f70726f706572747931376865393833323939386434353533663333458e026f5f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e3139636f6e74726163745f63616c6c5f74726169743132436f6e747261637443616c6c3137707573685f7261775f617267756d656e7431376839346636373930636564316333316563458f02745f5a4e31336d756c746976657273785f73633465736474313573797374656d5f73635f70726f787933384553445453797374656d536d617274436f6e747261637450726f7879244c5424534124475424313469737375655f66756e6769626c6531376837333263333939313964356665323639459002765f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656431356d616e616765645f6164647265737332334d616e6167656441646472657373244c54244d2447542431346e65775f66726f6d5f62797465733137683865653237316363646635306663653645910289015f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e3234636f6e74726163745f63616c6c5f6e6f5f7061796d656e743438436f6e747261637443616c6c4e6f5061796d656e74244c542453412443244f726967696e616c526573756c7424475424336e657731376837643138613662333966616237616364459202665f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e3139636f6e74726163745f63616c6c5f74726169743132436f6e747261637443616c6c3970726f78795f617267313768343832396635383561313830663365374593027d5f5a4e31336d756c746976657273785f73633465736474313573797374656d5f73635f70726f787933384553445453797374656d536d617274436f6e747261637450726f7879244c5424534124475424323369737375655f616e645f7365745f616c6c5f726f6c657331376865323130353833376331353864656530459402695f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e31306173796e635f63616c6c31394173796e6343616c6c244c5424534124475424313363616c6c5f616e645f6578697431376864373530643031376131313739363635459502635f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e313663616c6c6261636b5f636c6f73757265323263625f636c6f737572655f73746f726167655f6b657931376862613633303636653836346665373036459602c3015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438385f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652475323024666f7224753230247573697a652447542432346465705f656e636f64655f6f725f68616e646c655f65727231376864353765653136633139623835336662459702e0015f5a4e3139325f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f6275666665725f6361636865645f6275696c6465722e2e4d616e616765644275666665724361636865644275696c646572244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e5f6f75747075742e2e4e6573746564456e636f64654f75747075742447542435777269746531376861313732626331653136373339316533459802c0015f5a4e3134325f244c54246d756c746976657273785f73632e2e73746f726167652e2e73746f726167655f7365742e2e53746f726167655365744f7574707574244c542441244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f656e5f6f75747075742e2e546f70456e636f64654f757470757424475424323266696e616c697a655f6e65737465645f656e636f646531376865636564616165326534363664303363459902795f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e31306173796e635f63616c6c31394173796e6343616c6c244c5424534124475424323963616c6c5f616e645f657869745f69676e6f72655f63616c6c6261636b31376834646338326361616365313731383664459a027a5f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e313663616c6c6261636b5f636c6f73757265333143616c6c6261636b436c6f737572654d617463686572244c54245f2447542431326e616d655f6d61746368657331376838303165386139363066393837386437459b02755f5a4e31336d756c746976657273785f73633574797065733131696e746572616374696f6e313663616c6c6261636b5f636c6f73757265333243616c6c6261636b436c6f73757265466f724465736572244c54244d24475424376d61746368657231376830623832396530326532343130623439459c0281015f5a4e34636f726535736c69636535696e64657837375f244c5424696d706c2475323024636f72652e2e6f70732e2e696e6465782e2e496e6465784d7574244c542449244754242475323024666f72247532302424753562245424753564242447542439696e6465785f6d757431376864336338363933346266393431643061459d025b5f5a4e31396d756c746976657273785f73635f636f6465633673696e676c653133746f705f656e5f6f75747075743135546f70456e636f64654f7574707574377365745f75363431376866333331616538386639336437623261459e029a025f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c32376d616e616765645f6275666665725f746f705f64655f696e7075743136345f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64655f696e7075742e2e546f704465636f6465496e7075742475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d24475424244754243230696e746f5f6d61785f73697a655f62756666657231376863373932613337393238343162346339459f0286015f5a4e34636f726535617272617938385f244c5424696d706c2475323024636f72652e2e6f70732e2e696e6465782e2e496e6465784d7574244c542449244754242475323024666f722475323024247535622454247533622424753230244e24753564242447542439696e6465785f6d75743137683039363762303031613931353231343245a002bb015f5a4e3134375f244c54246d756c746976657273785f73632e2e73746f726167652e2e73746f726167655f6765742e2e53746f726167654765744572726f7248616e646c6572244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e636f6465635f6572725f68616e646c65722e2e4465636f64654572726f7248616e646c657224475424313268616e646c655f6572726f723137683134646333313136316562393333663345a102705f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963376269675f696e743135426967496e74244c54244d24475424323766726f6d5f7369676e65645f62797465735f62655f6275666665723137683463366439376633633238633162646145a2026b5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963386269675f75696e74313642696755696e74244c54244d24475424323066726f6d5f62797465735f62655f6275666665723137683764356266393664633136633037653845a302a6015f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c33306d616e616765645f6275666665725f6e65737465645f64655f696e70757433394d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754243237726561645f6d616e616765645f6275666665725f6f665f73697a653137683438326363343031663162383037393145a4026e5f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331346d616e616765645f62756666657232324d616e61676564427566666572244c54244d244754243130636f70795f736c6963653137683533376561663731623566386432643845a50296025f5a4e31336d756c746976657273785f7363357479706573376d616e616765643130636f6465635f7574696c33316d616e616765645f6275666665725f6e65737465645f656e5f6f75747075743137325f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e5f6f75747075742e2e4e6573746564456e636f64654f75747075742475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d24475424244754243577726974653137683638323265393138316231626563613145a6027b5f5a4e31336d756c746976657273785f7363357479706573376d616e6167656431316d756c74695f76616c756531396d756c74695f76616c75655f656e636f64656433304d756c746956616c7565456e636f646564244c54244d244324542447542434707573683137683037616561333737396435316533633645a70283015f5a4e37385f244c5424542475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f656e5f6d756c74692e2e546f70456e636f64654d756c74692447542432366d756c74695f656e636f64655f6f725f68616e646c655f6572723137683030353061643431613139393034353145a8024f5f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331316269675f6e756d5f636d7037636d705f6936343137683164663539333237323235333963636245a902f5015f5a4e32366d756c746976657273785f73635f7761736d5f616461707465723361706931336d616e616765645f747970657331366269675f696e745f6170695f6e6f64653134375f244c5424696d706c24753230246d756c746976657273785f73632e2e6170692e2e6d616e616765645f74797065732e2e6269675f696e745f6170692e2e426967496e74417069496d706c2475323024666f7224753230246d756c746976657273785f73635f7761736d5f616461707465722e2e6170692e2e766d5f6170695f6e6f64652e2e566d417069496d706c244754243662695f636d703137686634353435633137623039636531363045aa02545f5a4e31336d756c746976657273785f7363357479706573376d616e616765643562617369633131636173745f746f5f6936343131636173745f746f5f6936343137686362633861316430356337333632646145ab02c1015f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331326269675f75696e745f636d703131355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f75696e742e2e42696755696e74244c54244d24475424244754243265713137683239393833306565303534376137323745ac026e5f5a4e31336d756c746976657273785f7363357479706573376d616e616765643562617369633134656c6c69707469635f63757276653232456c6c69707469634375727665244c54244d2447542431306765745f76616c7565733137686131393932613830393033646132336345ad02705f5a4e31336d756c746976657273785f7363357479706573376d616e616765643562617369633134656c6c69707469635f63757276653232456c6c69707469634375727665244c54244d24475424313266726f6d5f62697473697a653137683437303066363162313239633234326645ae02695f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331346d616e616765645f62756666657232324d616e61676564427566666572244c54244d2447542436617070656e643137683935333939333634353939666165396145af026b5f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331346d616e616765645f62756666657232324d616e61676564427566666572244c54244d244754243869735f656d7074793137686435386631313531366634383232396445b002c6015f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331376269675f696e745f6f70657261746f72733131345f244c5424696d706c2475323024636f72652e2e6f70732e2e61726974682e2e4164642475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d2447542424475424336164643137686562626234623764653264356264373845b10294025f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331376269675f696e745f6f70657261746f72733139325f244c5424696d706c2475323024636f72652e2e6f70732e2e61726974682e2e416464244c5424245246246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d24475424244754242475323024666f722475323024245246246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d2447542424475424336164643137683139303663613538356336323162333445b2029e025f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331376269675f696e745f6f70657261746f72733139345f244c5424696d706c2475323024636f72652e2e6f70732e2e61726974682e2e41646441737369676e244c5424245246246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d24475424244754242475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d244754242447542431306164645f61737369676e3137683366373466663938633030313430323545b3029e025f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331376269675f696e745f6f70657261746f72733139345f244c5424696d706c2475323024636f72652e2e6f70732e2e61726974682e2e53756241737369676e244c5424245246246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d24475424244754242475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f696e742e2e426967496e74244c54244d244754242447542431307375625f61737369676e3137686363333736356163663333626531343945b402e2015f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331386269675f75696e745f6f70657261746f72733133335f244c5424696d706c2475323024636f72652e2e6f70732e2e6269742e2e53686c41737369676e244c54247573697a65244754242475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f75696e742e2e42696755696e74244c54244d2447542424475424313073686c5f61737369676e3137683065626137363638306639663430313145b502e2015f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331386269675f75696e745f6f70657261746f72733133335f244c5424696d706c2475323024636f72652e2e6f70732e2e6269742e2e53687241737369676e244c54247573697a65244754242475323024666f7224753230246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6269675f75696e742e2e42696755696e74244c54244d244754242447542431307368725f61737369676e3137686437303963376435646231643834396645b602575f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963376269675f696e743135426967496e74244c54244d2447542433706f773137686434396361363264393134396531333645b7025f5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963386269675f75696e74313642696755696e74244c54244d24475424396d616b655f74656d703137686239323939313031363834663935396245b8025a5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963386269675f75696e74313642696755696e74244c54244d2447542434737172743137683263303262653439333866393362386245b9025a5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963386269675f75696e74313642696755696e74244c54244d24475424347a65726f3137686430363231623637636236396435663045ba025f5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564356261736963386269675f75696e74313642696755696e74244c54244d24475424397365745f76616c75653137686163336464363436336233643836653545bb026f5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656431316d616e616765645f72656632334d616e61676564526566244c54244d24432454244754243131636c6f6e655f76616c75653137683431383638343134383630633137646445bc02675f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656431316d616e616765645f76656332334d616e61676564566563244c54244d24432454244754243466696e643137683537633063616337346435326563396545bd02685f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656431316d616e616765645f76656332334d616e61676564566563244c54244d244324542447542435736c6963653137683865333663623162313734663765653945be026a5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656431316d616e616765645f76656332334d616e61676564566563244c54244d2443245424475424377472795f6765743137683463373434393234333661616532653145bf026b5f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656431356d616e616765645f6164647265737332334d616e6167656441646472657373244c54244d24475424347a65726f3137686131383637373666343036663566643345c00282015f5a4e31336d756c746976657273785f7363357479706573376d616e6167656437777261707065643136746f6b656e5f6964656e7469666965723234546f6b656e4964656e746966696572244c54244d24475424323469735f76616c69645f657364745f6964656e7469666965723137683132656135306366613139613434366445c10283015f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656432347072656c6f616465645f6d616e616765645f62756666657233315072656c6f616465644d616e61676564427566666572244c54244d2447542431306c6f61645f736c6963653137686139326630666364346636383663396145c2028a015f5a4e3130365f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765244c54247573697a6524475424247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542435696e6465783137683137363638343232383730616230616345c30299015f5a4e31336d756c746976657273785f7363357479706573376d616e61676564377772617070656432396d616e616765645f6275666665725f6361636865645f6275696c64657233354d616e616765644275666665724361636865644275696c646572244c54244d244754243233666c7573685f746f5f6d616e616765645f6275666665723137686664633863303863366332663736356645c402485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574313173746f726167655f6765743137683032303732636632346333316431306645c5025a5f5a4e31396d756c746976657273785f73635f636f6465633673696e676c653132746f705f64655f696e7075743134546f704465636f6465496e70757438696e746f5f7536343137683662343966653830336134393461323945c602485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574313173746f726167655f6765743137683338613838613234633034396238356145c702485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574313173746f726167655f6765743137683437303135343361356339373038373945c802485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574313173746f726167655f6765743137683666626433633437396232363363333445c902485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574313173746f726167655f6765743137683836366336323265323133366532383345ca02c3015f5a4e3134335f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64652e2e546f704465636f6465244754243234746f705f6465636f64655f6f725f68616e646c655f6572723137686264353034343230373061316662393445cb02485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574313173746f726167655f6765743137686334643264353266393631313166646645cc024c5f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574313573746f726167655f6765745f6c656e3137683838376534383566393863386663303545cd026e5f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f676574323453746f72616765476574496e707574244c5424412447542432336c6f61645f6c656e5f6d616e616765645f6275666665723137683439646166656364333738353734663445ce02485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f736574313173746f726167655f7365743137683034363930343863363864333435653445cf02485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f736574313173746f726167655f7365743137683864653464353239616562356638363745d0026a5f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f736574323553746f726167655365744f7574707574244c5424412447542431387365745f6d616e616765645f6275666665723137683436346465303065313765363737633645d102485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f736574313173746f726167655f7365743137683930363837636365323835376637663445d202b9015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733131696d706c5f737472696e6738345f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f656e2e2e546f70456e636f64652475323024666f72247532302424524624737472244754243234746f705f656e636f64655f6f725f68616e646c655f6572723137686631636638663936346661313766343545d302485f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f736574313173746f726167655f7365743137686663313663636637333437393462336645d402b6015f5a4e3134325f244c54246d756c746976657273785f73632e2e73746f726167652e2e73746f726167655f7365742e2e53746f726167655365744f7574707574244c542441244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f656e5f6f75747075742e2e546f70456e636f64654f75747075742447542431327365745f736c6963655f75383137683938306361613265646231363736633845d5024a5f5a4e31336d756c746976657273785f73633773746f72616765313173746f726167655f736574313373746f726167655f636c6561723137683130383062303964396337636563396245d602625f5a4e31336d756c746976657273785f73633773746f72616765323473746f726167655f6765745f66726f6d5f61646472657373323473746f726167655f6765745f66726f6d5f616464726573733137683162313330396665643938626432326445d7025a5f5a4e31396d756c746976657273785f73635f636f6465633673696e676c653132746f705f64655f696e7075743134546f704465636f6465496e70757438696e746f5f7536343137683465323438303436306338623066316345d802665f5a4e31336d756c746976657273785f73633773746f72616765323473746f726167655f6765745f66726f6d5f61646472657373323873746f726167655f6765745f6c656e5f66726f6d5f616464726573733137683663616233656534633535313934313345d90286015f5a4e31336d756c746976657273785f73633773746f72616765323473746f726167655f6765745f66726f6d5f61646472657373333553746f7261676547657446726f6d41646472657373496e707574244c5424412447542432336c6f61645f6c656e5f6d616e616765645f6275666665723137683131353663666237333861373565316245da0280015f5a4e31336d756c746976657273785f73633773746f72616765323473746f726167655f6765745f66726f6d5f61646472657373333553746f7261676547657446726f6d41646472657373496e707574244c542441244754243137746f5f6d616e616765645f6275666665723137683362356236326566623461326530366545db02705f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d617070657232374d61704d6170706572244c542453412443244b244324562447542431356275696c645f6e616d65645f6b65793137683137363361656337396665666531303845dc02c1015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438365f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652475323024666f7224753230247533322447542432346465705f656e636f64655f6f725f68616e646c655f6572723137686366333839633335633730336263346645dd02715f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d617070657232374d61704d6170706572244c542453412443244b244324562447542431366765745f6d61707065645f76616c75653137686363656564333135633761663732303145de02735f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d617070657232374d61704d6170706572244c542453412443244b24432456244754243138636c6561725f6d61707065645f76616c75653137686361653234633432313832656633376545df02635f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d617070657232374d61704d6170706572244c542453412443244b2443245624475424336765743137686139393736613533306639393138303945e002645f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307365745f6d617070657232335365744d6170706572244c54245341244324542447542438636f6e7461696e733137683431346438353066613562643061303145e102655f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d617070657232374d61704d6170706572244c542453412443244b244324562447542435656e7472793137683437643838626635616331663334666345e202665f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d617070657232374d61704d6170706572244c542453412443244b244324562447542436696e736572743137683731356131303931616538383163336245e3025b5f5a4e31396d756c746976657273785f73635f636f6465633673696e676c653133746f705f656e5f6f75747075743135546f70456e636f64654f7574707574377365745f7536343137683461353263343135646630616135646245e402625f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307365745f6d617070657232335365744d6170706572244c54245341244324542447542436696e736572743137686665353861653863323637666136653145e502a7015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d61707065723837456e747279244c542453412443246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e7365745f6d61707065722e2e53746f726167655343416464726573732443244b244324562447542431306f725f64656661756c743137683937633162316463376264633539643445e602a8015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d61707065723933566163616e74456e747279244c542453412443246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e7365745f6d61707065722e2e53746f726167655343416464726573732443244b244324562447542436696e736572743137683131383961656438653631643335383445e702a7015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331306d61705f6d617070657239354f63637570696564456e747279244c542453412443246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e7365745f6d61707065722e2e53746f726167655343416464726573732443244b2443245624475424336765743137686232666536613132626134666261323945e8023b5f5a4e34636f7265366f7074696f6e31354f7074696f6e244c5424542447542436756e777261703137683566666366353435316638613031323245e902c2015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307365745f6d61707065723130375365744d6170706572244c54245341244324542443246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f616464726573732e2e4d616e6167656441646472657373244c54245341244754242447542431366e65775f66726f6d5f616464726573733137683533666466353962656537653962363945ea02685f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307365745f6d617070657232335365744d6170706572244c54245341244324542447542431316765745f6e6f64655f69643137683037366132663733323464343331323245eb02725f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307365745f6d617070657232335365744d6170706572244c54245341244324542447542432316275696c645f6e616d65645f76616c75655f6b65793137683139373239653236313463316535653845ec026a5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307365745f6d617070657232335365744d6170706572244c5424534124432454244754243133636c6561725f6e6f64655f69643137683033346464356166333235663861663645ed02725f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c5424534124432454244754243137707573685f6261636b5f6e6f64655f69643137683431353033313866386333353063666645ee02625f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307365745f6d617070657232335365744d6170706572244c5424534124432454244754243672656d6f76653137683862623233303564663433376334363845ef02725f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c542453412443245424475424313772656d6f76655f62795f6e6f64655f69643137683336656534376235393037623034346445f0026a5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307665635f6d617070657232335665634d6170706572244c54245341244324542447542431336765745f756e636865636b65643137683434626664303337306363626531313345f102645f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307665635f6d617070657232335665634d6170706572244c542453412443245424475424386974656d5f6b65793137686439353938633034633136383366396245f2026b5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307665635f6d617070657232335665634d6170706572244c54245341244324542447542431346c656e5f61745f616464726573733137686464613666616337623063613365393845f3025f5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307665635f6d617070657232335665634d6170706572244c542453412443245424475424336c656e3137683063336663663533343161306539373645f4025f5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331307665635f6d617070657232335665634d6170706572244c542453412443245424475424337365743137683735636634653065636634663462316545f502c3015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438385f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652475323024666f7224753230247573697a652447542432346465705f656e636f64655f6f725f68616e646c655f6572723137683438666365633531356432366462356245f602bd015f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d617070657231303951756575654d6170706572244c54245341244324542443246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f616464726573732e2e4d616e6167656441646472657373244c542453412447542424475424386765745f696e666f3137683661353036636364363334316137303645f702d1015f5a4e3136335f244c54246d756c746976657273785f73632e2e73746f726167652e2e73746f726167655f6765745f66726f6d5f616464726573732e2e53746f7261676547657446726f6d41646472657373496e707574244c542441244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e746f705f64655f696e7075742e2e546f704465636f6465496e707574244754243138696e746f5f6e65737465645f6275666665723137683835333935363764353230333462323045f802c1015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438365f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64652e2e4e65737465644465636f64652475323024666f7224753230247533322447542432346465705f6465636f64655f6f725f68616e646c655f6572723137683162393235366430363635613532646645f902bd015f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d617070657231303951756575654d6170706572244c54245341244324542443246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f616464726573732e2e4d616e6167656441646472657373244c542453412447542424475424386765745f6e6f64653137683135636566626434353265663038313645fa026b5f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c5424534124432454244754243130636c6561725f6e6f64653137683139306662653861636661303637626545fb02785f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c54245341244324542447542432336275696c645f6e6f64655f69645f6e616d65645f6b65793137683332353464393930373862356531303345fc026c5f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c5424534124432454244754243131636c6561725f76616c75653137683130346664663565633861326536376645fd026f5f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c54245341244324542447542431346275696c645f6e616d655f6b65793137686432623030663137616338356265613445fe02685f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c542453412443245424475424386765745f696e666f3137686636303166656535663139663363326145ff02685f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c542453412443245424475424387365745f6e6f646531376838363731616330393132313231633434458003685f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c542453412443245424475424387365745f696e666f31376834333039653434613235656666353439458103645f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313271756575655f6d6170706572323551756575654d6170706572244c5424534124432454244754243469746572313768383264656163313463303138373035624582037b5f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733136756e697175655f69645f6d61707065723234556e6971756549644d6170706572244c542453412447542432337365745f696e7465726e616c5f6d61707065725f6c656e31376861333738623736653061386230656261458303665f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733136756e697175655f69645f6d61707065723234556e6971756549644d6170706572244c54245341244754243367657431376834343330636234613831666535653064458403665f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733136756e697175655f69645f6d61707065723234556e6971756549644d6170706572244c542453412447542433736574313768323863383135623036333837626362354585037c5f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313677686974656c6973745f6d6170706572323957686974656c6973744d6170706572244c5424534124432454244754243139636f6e7461696e735f61745f61646472657373313768366562353239346261636463343836354586037e5f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313677686974656c6973745f6d6170706572323957686974656c6973744d6170706572244c54245341244324542447542432316275696c645f6d61707065725f666f725f6974656d31376833363635643637623333343566616266458703c9015f5a4e3134395f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652447542432346465705f656e636f64655f6f725f68616e646c655f65727231376833363062396437363334333464663039458803705f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313677686974656c6973745f6d6170706572323957686974656c6973744d6170706572244c54245341244324542447542438636f6e7461696e7331376866396531623030343161303435363436458903775f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c542453412443245424475424313172656d6f76655f6e6f646531376838633338653837383162346535643666458a03795f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c542453412443245424475424313369735f656d7074795f6e6f646531376834343733663265303339353830616535458b03735f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c542453412443245424475424386765745f696e666f31376834323733356630373061313833306637458c03735f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c542453412443245424475424386765745f6e6f646531376836616463346235653264646466353137458d03735f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c542453412443245424475424387365745f6e6f646531376864326430366139373861363866353761458e0383015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c54245341244324542447542432336275696c645f6e6f64655f69645f6e616d65645f6b657931376831336663616232323537666239613964458f037a5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c54245341244324542447542431347365745f6e6f64655f76616c7565313768306566353463343661633933356266384590037d5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c542453412443245424475424313772656d6f76655f6e6f64655f62795f696431376865656261616538356161623338613034459103705f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657233304c696e6b65644c6973744d6170706572244c5424534124432454244754243566726f6e743137686537326130666238313961643833643245920388015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386d61705f73746f726167655f6d617070657233344d617053746f726167654d6170706572244c542453412443244b244324562447542432346765745f6d61707065645f73746f726167655f76616c756531376831663461343735393965353433616630459303bb015f5a4e3135375f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e6d61705f6d61707065722e2e4d61704d6170706572244c542453412443244b24432456244754242475323024617324753230246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e6d61707065722e2e53746f726167654d6170706572244c542453412447542424475424336e657731376864636565383764633435666364663538459403725f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386d61705f73746f726167655f6d617070657233344d617053746f726167654d6170706572244c542453412443244b24432456244754243367657431376831643966633231303636366633613734459503af015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386d61705f73746f726167655f6d61707065723837456e747279244c542453412443246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e7365745f6d61707065722e2e53746f726167655343416464726573732443244b244324562447542431306f725f64656661756c7431376862643563653762643038363433393230459603af015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386d61705f73746f726167655f6d617070657239354f63637570696564456e747279244c542453412443246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e7365745f6d61707065722e2e53746f726167655343416464726573732443244b244324562447542433676574313768323535383562373034313037656262344597033b5f5a4e34636f7265366f7074696f6e31354f7074696f6e244c5424542447542436756e77726170313768323738636239633430356361393837614598037d5f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313973696e676c655f76616c75655f6d6170706572333153696e676c6556616c75654d6170706572244c54245341244324542447542431357261775f627974655f6c656e67746831376834623563643961663337306336336337459903705f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313973696e676c655f76616c75655f6d6170706572333153696e676c6556616c75654d6170706572244c5424534124432454244754243373657431376831313661646664316266653439303238459a035b5f5a4e31396d756c746976657273785f73635f636f6465633673696e676c653133746f705f656e5f6f75747075743135546f70456e636f64654f7574707574377365745f69363431376863663863623566366136343933373439459b03705f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313973696e676c655f76616c75655f6d6170706572333153696e676c6556616c75654d6170706572244c5424534124432454244754243373657431376837323734366162346630383936666334459c03755f5a4e31336d756c746976657273785f73633773746f72616765376d617070657273313973696e676c655f76616c75655f6d6170706572333153696e676c6556616c75654d6170706572244c5424534124432454244754243869735f656d70747931376863616637623935666633373963323034459d03765f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733230616464726573735f746f5f69645f6d6170706572323741646472657373546f49644d6170706572244c542453412447542431316765745f6164647265737331376862323561393836393161306334316361459e037c5f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733230616464726573735f746f5f69645f6d6170706572323741646472657373546f49644d6170706572244c5424534124475424313769645f746f5f616464726573735f6b657931376836303261616135363834313535613364459f03765f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733230616464726573735f746f5f69645f6d6170706572323741646472657373546f49644d6170706572244c542453412447542431316c6173745f69645f6b65793137683466616636356565356239336535653445a003775f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733230616464726573735f746f5f69645f6d6170706572323741646472657373546f49644d6170706572244c5424534124475424313272656d6f76655f656e7472793137683562396435343162356664643830396545a1037c5f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733230616464726573735f746f5f69645f6d6170706572323741646472657373546f49644d6170706572244c54245341244754243137616464726573735f746f5f69645f6b65793137683666656337303730363730396366353645a203795f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733230616464726573735f746f5f69645f6d6170706572323741646472657373546f49644d6170706572244c54245341244754243134696e736572745f616464726573733137683231353737336538323230393064333045a303c1015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438365f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652475323024666f7224753230247536342447542432346465705f656e636f64655f6f725f68616e646c655f6572723137686665346137396438653561323731323045a403705f5a4e31336d756c746976657273785f73633773746f72616765376d6170706572733230616464726573735f746f5f69645f6d6170706572323741646472657373546f49644d6170706572244c5424534124475424366765745f69643137683135373832313264363034356163306245a503595f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3132746f6b656e5f6d61707065723133636865636b5f6e6f745f7365743137686633303639323739343535613166303745a6036f5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3132746f6b656e5f6d6170706572313953746f72616765546f6b656e5772617070657231346765745f73635f616464726573733137683330376638646633396366626163353745a703705f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3132746f6b656e5f6d6170706572313953746f72616765546f6b656e5772617070657231357365745f6c6f63616c5f726f6c65733137683665313465343561646464643866393945a8037c5f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3132746f6b656e5f6d6170706572313953746f72616765546f6b656e5772617070657232377365745f6c6f63616c5f726f6c65735f666f725f616464726573733137686161396334623331386264366266333545a903685f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3132746f6b656e5f6d6170706572313953746f72616765546f6b656e577261707065723869735f656d7074793137686335366634343537343532643463633045aa03f0015f5a4e3139365f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e746f6b656e2e2e66756e6769626c655f746f6b656e5f6d61707065722e2e46756e6769626c65546f6b656e4d6170706572244c54245341244754242475323024617324753230246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e746f6b656e2e2e746f6b656e5f6d61707065722e2e53746f72616765546f6b656e57726170706572244c54245341244754242447542431366765745f746f6b656e5f69645f7265663137683664303566376564353835666435396645ab0383015f5a4e37385f244c5424542475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f656e5f6d756c74692e2e546f70456e636f64654d756c74692447542432366d756c74695f656e636f64655f6f725f68616e646c655f6572723137683334633338353033663230396265343545ac038b015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e323166756e6769626c655f746f6b656e5f6d6170706572323946756e6769626c65546f6b656e4d6170706572244c5424534124475424323369737375655f616e645f7365745f616c6c5f726f6c65733137686237326434303238666664616661663745ad0390015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e323166756e6769626c655f746f6b656e5f6d6170706572323946756e6769626c65546f6b656e4d6170706572244c5424534124475424323864656661756c745f63616c6c6261636b5f636c6f737572655f6f626a3137683537626238623663323233333763353445ae032f5f5a4e34636f726533636d7031305061727469616c4f72643267743137686334373365376465336366393264373545af03775f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e323166756e6769626c655f746f6b656e5f6d6170706572323946756e6769626c65546f6b656e4d6170706572244c5424534124475424346d696e743137683137353530366537353434313238306645b003ec015f5a4e3139365f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e746f6b656e2e2e66756e6769626c655f746f6b656e5f6d61707065722e2e46756e6769626c65546f6b656e4d6170706572244c54245341244754242475323024617324753230246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e746f6b656e2e2e746f6b656e5f6d61707065722e2e53746f72616765546f6b656e57726170706572244c54245341244754242447542431326765745f746f6b656e5f69643137683066623335643032363261393164663645b103785f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e323166756e6769626c655f746f6b656e5f6d6170706572323946756e6769626c65546f6b656e4d6170706572244c542453412447542435636c6561723137683165666164656235346133633361346245b203785f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e323166756e6769626c655f746f6b656e5f6d6170706572323946756e6769626c65546f6b656e4d6170706572244c54245341244754243569737375653137686335366539366465616266316262363945b30389015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542431376765745f6d617070696e675f76616c75653137683064346266376563626539643366646345b40392015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542432366275696c645f6b65795f746f6b656e5f69645f6d617070696e673137686461646331373434623865343461363745b50389015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542431376861735f6d617070696e675f76616c75653137683962353061363039326233626663363645b60392015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542432366275696c645f6b65795f746f6b656e5f617474725f76616c75653137686363633462633661666533663664653745b703c0015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438355f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652475323024666f72247532302475382447542432346465705f656e636f64655f6f725f68616e646c655f6572723137683462313134396236653465346261656445b80392015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542432366275696c645f6b65795f746f6b656e5f69645f636f756e7465723137683036666130663466316339356336656245b90392015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542432366765745f746f6b656e5f617474726962757465735f76616c75653137683236333561326663316230366439383045ba03ea015f5a4e3139385f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e636f6465635f7574696c2e2e6d616e616765645f6275666665725f6e65737465645f64655f696e7075742e2e4d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64655f696e7075742e2e4e65737465644465636f6465496e7075742447542439726561645f696e746f3137686235353037636633373861636466636245bb0392015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542432366861735f746f6b656e5f617474726962757465735f76616c75653137683133633035363030356166333266633245bc0397015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c5424534124475424333169735f656d7074795f746f6b656e5f617474726962757465735f76616c75653137686233363833303031306164656338333845bd0392015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542432367365745f746f6b656e5f617474726962757465735f76616c75653137683730636564653532313162356435323345be03c9015f5a4e3134395f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f7665632e2e4d616e61676564566563244c54244d24432454244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f656e2e2e4e6573746564456e636f64652447542432346465705f656e636f64655f6f725f68616e646c655f6572723137686363626633623166303564396532363745bf0397015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542433316275696c645f6b65795f617474725f746f5f6e6f6e63655f6d617070696e673137686432643932633830306564353037363745c003be015f5a4e3135395f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f7665635f6f776e65645f697465722e2e4d616e616765645665634f776e65644974657261746f72244c54244d2443245424475424247532302461732475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f7224475424346e6578743137683162393565623664653235313236386445c10397015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c542453412447542433317365745f617474726962757465735f746f5f6e6f6e63655f6d617070696e673137686363626139643232663538633762336645c20399015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e3233746f6b656e5f617474726962757465735f6d61707065723331546f6b656e417474726962757465734d6170706572244c54245341244754243333636c6561725f617474726962757465735f746f5f6e6f6e63655f6d617070696e673137683165626535386539396633383961663945c30385015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e32356e6f6e5f66756e6769626c655f746f6b656e5f6d617070657233324e6f6e46756e6769626c65546f6b656e4d6170706572244c542453412447542431306e66745f6372656174653137686237396235623932363462386163333845c40387015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e32356e6f6e5f66756e6769626c655f746f6b656e5f6d617070657233324e6f6e46756e6769626c65546f6b656e4d6170706572244c5424534124475424313273656e645f7061796d656e743137683363333536626163343062656635623245c5038b015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e32356e6f6e5f66756e6769626c655f746f6b656e5f6d617070657233324e6f6e46756e6769626c65546f6b656e4d6170706572244c542453412447542431366e66745f6164645f7175616e746974793137686665363732393061363032346565613445c60392015f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727335746f6b656e32356e6f6e5f66756e6769626c655f746f6b656e5f6d617070657233324e6f6e46756e6769626c65546f6b656e4d6170706572244c5424534124475424323369737375655f616e645f7365745f616c6c5f726f6c65733137683763333431326331383539653930626245c703485f5a4e31336d756c746976657273785f7363386c6f675f7574696c32336576656e745f746f7069635f616363756d756c61746f723137683834316536663738653831633761356645c803b2015f5a4e3134365f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e7365745f6d61707065722e2e5365744d6170706572244c5424534124432454244754242475323024617324753230246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e6d61707065722e2e53746f72616765436c65617261626c652447542435636c6561723137686466363230396564366635396162393945c903c9015f5a4e3134395f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64652e2e4e65737465644465636f64652447542432346465705f6465636f64655f6f725f68616e646c655f6572723137683035323434346333303231666532613945ca03c3015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438385f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64652e2e4e65737465644465636f64652475323024666f7224753230247573697a652447542432346465705f6465636f64655f6f725f68616e646c655f6572723137683665353338313163303761633665323245cb03b6015f5a4e3135305f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e6d61705f6d61707065722e2e4d61704d6170706572244c542453412443244b24432456244754242475323024617324753230246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e6d61707065722e2e53746f72616765436c65617261626c652447542435636c6561723137686566643133353666373536373030396645cc03b7015f5a4e3135335f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e7365745f6d61707065722e2e5365744d6170706572244c5424534124432454244754242475323024617324753230246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e6d61707065722e2e53746f726167654d6170706572244c542453412447542424475424336e65773137686164633265383433333036373931306445cd03e9015f5a4e3137395f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e6d756c74695f76616c75652e2e6d756c74695f76616c75655f6d616e616765645f7665632e2e4d756c746956616c75654d616e61676564566563244c54244d24432454244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f656e5f6d756c74692e2e546f70456e636f64654d756c74692447542432366d756c74695f656e636f64655f6f725f68616e646c655f6572723137683739363633623638613531326266346145ce03dd015f5a4e3139305f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e6d61705f6d61707065722e2e49746572244c542453412443246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e7365745f6d61707065722e2e53746f726167655343416464726573732443244b2443245624475424247532302461732475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f7224475424346e6578743137683334643639623333383039376231363545cf037d5f5a4e31336d756c746976657273785f736335747970657331337374617469635f62756666657232326c6f636b61626c655f7374617469635f62756666657232304c6f636b61626c65537461746963427566666572313872656d61696e696e675f63617061636974793137683266643963663538623130316331376345d00386015f5a4e34636f726535617272617938385f244c5424696d706c2475323024636f72652e2e6f70732e2e696e6465782e2e496e6465784d7574244c542449244754242475323024666f722475323024247535622454247533622424753230244e24753564242447542439696e6465785f6d75743137686465626564373931313734366335633345d103ec015f5a4e3139365f244c54246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e746f6b656e2e2e66756e6769626c655f746f6b656e5f6d61707065722e2e46756e6769626c65546f6b656e4d6170706572244c54245341244754242475323024617324753230246d756c746976657273785f73632e2e73746f726167652e2e6d6170706572732e2e746f6b656e2e2e746f6b656e5f6d61707065722e2e53746f72616765546f6b656e57726170706572244c54245341244754242447542431327365745f746f6b656e5f69643137683439666234313632636433633730316345d20388025f5a4e3139385f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e636f6465635f7574696c2e2e6d616e616765645f6275666665725f6e65737465645f64655f696e7075742e2e4d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64655f696e7075742e2e4e65737465644465636f6465496e70757424475424397065656b5f696e746f32385f24753762242475376224636c6f73757265247537642424753764243137683037633466663633323438326165663345d30388025f5a4e3139385f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e636f6465635f7574696c2e2e6d616e616765645f6275666665725f6e65737465645f64655f696e7075742e2e4d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64655f696e7075742e2e4e65737465644465636f6465496e70757424475424397065656b5f696e746f32385f24753762242475376224636c6f73757265247537642424753764243137683138393032356233303165643333663045d40388025f5a4e3139385f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e636f6465635f7574696c2e2e6d616e616765645f6275666665725f6e65737465645f64655f696e7075742e2e4d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64655f696e7075742e2e4e65737465644465636f6465496e70757424475424397065656b5f696e746f32385f24753762242475376224636c6f73757265247537642424753764243137686664643933373631386364633736633945d503ea015f5a4e3139385f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e636f6465635f7574696c2e2e6d616e616765645f6275666665725f6e65737465645f64655f696e7075742e2e4d616e616765644275666665724e65737465644465636f6465496e707574244c54244d244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64655f696e7075742e2e4e65737465644465636f6465496e7075742447542439726561645f696e746f3137683938633039336365373263643735303545d603c0015f5a4e31396d756c746976657273785f73635f636f6465633134696d706c5f666f725f74797065733137696d706c5f6e756d5f756e7369676e656438355f244c5424696d706c24753230246d756c746976657273785f73635f636f6465632e2e73696e676c652e2e6e65737465645f64652e2e4e65737465644465636f64652475323024666f72247532302475382447542432346465705f6465636f64655f6f725f68616e646c655f6572723137683962376333643331616435663739393845d703615f5a4e31396d756c746976657273785f73635f636f646563356d756c74693132746f705f656e5f6d756c746933316d756c74695f656e636f64655f697465725f6f725f68616e646c655f6572723137683938653961396139326564383761373445d803485f5a4e31396d756c746976657273785f73635f636f646563386e756d5f636f6e763137746f705f656e636f64655f6e756d6265723137683961326265376432333038306465383945d903615f5a4e31396d756c746976657273785f73635f636f6465633673696e676c6531356e65737465645f64655f696e70757431374e65737465644465636f6465496e70757439726561645f627974653137683232383434393436336437613638393945da036c5f5a4e32316d756c746976657273785f73635f6d6f64756c6573323364656661756c745f69737375655f63616c6c6261636b733136456e64706f696e745772617070657273313763616c6c6261636b5f73656c6563746f723137686439313366636532396465376631616545db037f5f5a4e32316d756c746976657273785f73635f6d6f64756c6573323364656661756c745f69737375655f63616c6c6261636b73323744656661756c74497373756543616c6c6261636b734d6f64756c65323572657475726e5f6661696c65645f69737375655f66756e64733137686665663938663438363831336661633945dc039e025f5a4e3234315f244c54246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e777261707065642e2e6d616e616765645f7665632e2e4d616e61676564566563244c54244d2443246d756c746976657273785f73632e2e74797065732e2e6d616e616765642e2e62617369632e2e6d616e616765645f6275666665722e2e4d616e61676564427566666572244c54244d24475424244754242475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f656e5f6d756c74695f6f75747075742e2e546f70456e636f64654d756c74694f7574707574244754243137707573685f73696e676c655f76616c75653137683334663634646636303661633231303845dd03ed015f5a4e32366d756c746976657273785f73635f7761736d5f61646170746572336170693139626c6f636b636861696e5f6170695f6e6f64653133395f244c5424696d706c24753230246d756c746976657273785f73632e2e6170692e2e626c6f636b636861696e5f6170692e2e426c6f636b636861696e417069496d706c2475323024666f7224753230246d756c746976657273785f73635f7761736d5f616461707465722e2e6170692e2e766d5f6170695f6e6f64652e2e566d417069496d706c24475424313769735f736d6172745f636f6e74726163743137683165623863353066613338616466393745de03066d656d636d70df03705f5a4e34636f726533636d7035696d706c7336395f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4571244c54242452462442244754242475323024666f722475323024245246244124475424326e653137683438653466646263663836323765373945e003515f5a4e34636f726533707472343764726f705f696e5f706c616365244c5424616c6c6f632e2e7665632e2e566563244c542475333224475424244754243137683365636161616635396536623232373545e103645f5a4e36335f244c5424616c6c6f632e2e616c6c6f632e2e476c6f62616c247532302461732475323024636f72652e2e616c6c6f632e2e416c6c6f6361746f722447542431306465616c6c6f636174653137683862636331373235663839643030373645e203325f5a4e34636f726536726573756c743133756e777261705f6661696c65643137686562383039383263353535346432343945e303385f5a4e35616c6c6f63337665633136566563244c542454244324412447542434707573683137686134353730376131373830333965376445e4034c5f5a4e35616c6c6f63377261775f7665633139526177566563244c54245424432441244754243136726573657276655f666f725f707573683137683462666365326436343337396465373245e503325f5a4e35616c6c6f63377261775f766563313166696e6973685f67726f773137683333373034316164396335393230383745e6031a5f5f727573745f616c6c6f635f6572726f725f68616e646c6572e703385f5a4e35616c6c6f63377261775f766563313763617061636974795f6f766572666c6f773137683865373138363039656564613362666545e8030c5f5f727573745f616c6c6f63e903645f5a4e36375f244c54244324753230246173247532302462617369635f66656174757265732e2e6576656e745f66656174757265732e2e4576656e74466561747572657324475424376576656e745f613137686363316331303432326238636334643845ea03705f5a4e37355f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f6d61702e2e4d61704d617070657246656174757265732447542431306d61705f6d61707065723137686237663535636635343764373762346345eb03705f5a4e37355f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f7365742e2e5365744d617070657246656174757265732447542431307365745f6d61707065723137683661323437313839303235313333393545ec03705f5a4e37355f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f7665632e2e5665634d617070657246656174757265732447542431307665635f6d61707065723137686562353662636234623362653165653645ed0383015f5a4e37385f244c5424542475323024617324753230246d756c746976657273785f73635f636f6465632e2e6d756c74692e2e746f705f64655f6d756c74692e2e546f704465636f64654d756c74692447542432366d756c74695f6465636f64655f6f725f68616e646c655f6572723137683732313033313432373632623033343945ee03765f5a4e37395f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f71756575652e2e51756575654d6170706572466561747572657324475424313271756575655f6d61707065723137686361323965366539663436656362383845ef038b015f5a4e38365f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f73696e676c652e2e53696e676c6556616c75654d617070657246656174757265732447542432366d61705f6d795f73696e676c655f76616c75655f6d61707065723137686531383462616438633130393332343245f00380015f5a4e39305f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f6c696e6b65645f6c6973742e2e4c696e6b65644c6973744d617070657246656174757265732447542431316c6973745f6d61707065723137683361336364376135373765666664336345f10387015f5a4e39305f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f6d61705f73746f726167652e2e4d617053746f726167654d617070657246656174757265732447542431386d61705f73746f726167655f6d61707065723137683735376465623634313133633738373645f20383015f5a4e39335f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f616464726573735f746f5f69642e2e41646472657373546f49644d61707065724665617475726573244754243131616464726573735f6964733137686131633833646561393431383262396245f30388015f5a4e39335f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f756e697175655f69645f6d61707065722e2e556e6971756549644d61707065724665617475726573244754243136756e697175655f69645f6d61707065723137686163356137323237646235373362663645f40389015f5a4e39345f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f6765745f61745f616464726573732e2e53746f726167654d6170706572476574417441646472657373244754243136636f6e74726163745f616464726573733137686237333136306233396238303031393445f50389015f5a4e39345f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f77686974656c6973742e2e53746f726167654d617070657257686974656c697374466561747572657324475424313677686974656c6973745f6d61707065723137686637383563323861613463346532353745f60390015f5a4e39365f244c54244324753230246173247532302462617369635f66656174757265732e2e73746f726167655f6d61707065725f66756e6769626c655f746f6b656e2e2e46756e6769626c65546f6b656e4d6170706572466561747572657324475424323166756e6769626c655f746f6b656e5f6d61707065723137683534383533393166666633333631316245f7039a015f5a4e3132325f244c54246d756c746976657273785f73635f7761736d5f616461707465722e2e7761736d5f616c6c6f632e2e6661696c5f616c6c6f6361746f722e2e4661696c416c6c6f6361746f72247532302461732475323024636f72652e2e616c6c6f632e2e676c6f62616c2e2e476c6f62616c416c6c6f632447542435616c6c6f633137686138656431396139346631313034383345f80311727573745f626567696e5f756e77696e64f903435f5a4e32366d756c746976657273785f73635f7761736d5f616461707465723570616e69633970616e69635f666d743137686162376539326164336466353137663745fa0304696e6974fb031070616e6963576974684d657373616765fc033a5f5a4e34636f72653970616e69636b696e67313870616e69635f6e6f756e77696e645f666d743137683665353038316137353038383037323845fd030a636f756e745f6f6e6573fe0319656e64706f696e745f776974685f6d757461626c655f617267ff030d737172745f6269675f75696e7480040d6c6f67325f6269675f75696e7481040b706f775f6269675f696e7482040c706f775f6269675f75696e7483040f6269675f75696e745f746f5f7536348404f8015f5a4e32366d756c746976657273785f73635f7761736d5f616461707465723361706931336d616e616765645f747970657331366269675f696e745f6170695f6e6f64653134375f244c5424696d706c24753230246d756c746976657273785f73632e2e6170692e2e6d616e616765645f74797065732e2e6269675f696e745f6170692e2e426967496e74417069496d706c2475323024666f7224753230246d756c746976657273785f73635f7761736d5f616461707465722e2e6170692e2e766d5f6170695f6e6f64652e2e566d417069496d706c244754243962695f746f5f693634313768353637653663646563613536393762644585041562696775696e745f6f76657277726974655f75363486040d6269675f75696e745f7a65726f8704136269675f75696e745f66726f6d5f7536345f3188041162696775696e745f66726f6d5f7531323889041c6269675f75696e745f66726f6d5f6d616e616765645f6275666665728a040c6269675f696e745f7a65726f8b04126269675f696e745f66726f6d5f6936345f318c040f6269675f75696e745f65715f7536348d040e6269675f696e745f746f5f6936348e0414626967696e745f6f76657277726974655f6936348f04106269675f696e745f746f5f70617274739004146269675f696e745f66726f6d5f62696775696e7491040b6164645f6269675f696e749204146164645f6269675f696e745f6269675f75696e749304146164645f6269675f75696e745f6269675f696e749404186164645f6269675f696e745f6269675f75696e745f7265669504186164645f6269675f75696e745f6269675f696e745f72656696040f6164645f6269675f696e745f72656697040c6164645f6269675f75696e749804106164645f6269675f75696e745f72656699040b7375625f6269675f696e749a040f7375625f6269675f696e745f7265669b040c7375625f6269675f75696e749c04107375625f6269675f75696e745f7265669d040b6d756c5f6269675f696e749e040f6d756c5f6269675f696e745f7265669f040c6d756c5f6269675f75696e74a004106d756c5f6269675f75696e745f726566a1040b6469765f6269675f696e74a2040f6469765f6269675f696e745f726566a3040c6469765f6269675f75696e74a404106469765f6269675f75696e745f726566a5040b72656d5f6269675f696e74a6040f72656d5f6269675f696e745f726566a7040c72656d5f6269675f75696e74a8041072656d5f6269675f75696e745f726566a904126164645f61737369676e5f6269675f696e74aa04166164645f61737369676e5f6269675f696e745f726566ab04136164645f61737369676e5f6269675f75696e74ac04127375625f61737369676e5f6269675f696e74ad04167375625f61737369676e5f6269675f696e745f726566ae04137375625f61737369676e5f6269675f75696e74af04126d756c5f61737369676e5f6269675f696e74b004136d756c5f61737369676e5f6269675f75696e74b104126469765f61737369676e5f6269675f696e74b204136469765f61737369676e5f6269675f75696e74b3041272656d5f61737369676e5f6269675f696e74b4041372656d5f61737369676e5f6269675f75696e74b504106269745f616e645f6269675f75696e74b604146269745f616e645f6269675f75696e745f726566b7040f6269745f6f725f6269675f75696e74b804136269745f6f725f6269675f75696e745f726566b904106269745f786f725f6269675f75696e74ba04146269745f786f725f6269675f75696e745f726566bb04176269745f616e645f61737369676e5f6269675f75696e74bc04166269745f6f725f61737369676e5f6269675f75696e74bd04176269745f786f725f61737369676e5f6269675f75696e74be040c7368725f6269675f75696e74bf04107368725f6269675f75696e745f726566c0040c73686c5f6269675f75696e74c1041073686c5f6269675f75696e745f726566c204137368725f61737369676e5f6269675f75696e74c3041373686c5f61737369676e5f6269675f75696e74c404136765745f626c6f636b5f74696d657374616d70c5040f6765745f626c6f636b5f6e6f6e6365c6040f6765745f626c6f636b5f726f756e64c7040f6765745f626c6f636b5f65706f6368c804156765745f626c6f636b5f72616e646f6d5f73656564c904186765745f707265765f626c6f636b5f74696d657374616d70ca04146765745f707265765f626c6f636b5f6e6f6e6365cb04146765745f707265765f626c6f636b5f726f756e64cc04146765745f707265765f626c6f636b5f65706f6368cd041a6765745f707265765f626c6f636b5f72616e646f6d5f73656564ce040a6765745f63616c6c6572cf04116765745f6f776e65725f61646472657373d004146765745f73686172645f6f665f61646472657373d1041169735f736d6172745f636f6e7472616374d204136765745f73746174655f726f6f745f68617368d3040b6765745f74785f68617368d4040c6765745f6761735f6c656674d5041f6765745f63756d756c617465645f76616c696461746f725f72657761726473d60410636f6465635f6572725f66696e697368d70415636f6465635f6572725f73746f726167655f6b6579d80415636f6465635f6572725f73746f726167655f676574d90415636f6465635f6572725f73746f726167655f736574da0415636f6465635f6572725f6576656e745f746f706963db0414636f6465635f6572725f6576656e745f64617461dc0417636f6465635f6572725f636f6e74726163745f696e6974dd0417636f6465635f6572725f636f6e74726163745f63616c6cde040e636f6d707574655f736861323536df0411636f6d707574655f6b656363616b323536e00411636f6d707574655f726970656d64313630e104147665726966795f626c735f7369676e6174757265e204187665726966795f656432353531395f7369676e6174757265e3041a7665726966795f736563703235366b315f7369676e6174757265e404217665726966795f637573746f6d5f736563703235366b315f7369676e6174757265e5041f636f6d707574655f736563703235366b315f6465725f7369676e6174757265e604086563686f5f753634e704086563686f5f693634e804086563686f5f693332e904086563686f5f753332ea040a6563686f5f6973697a65eb04076563686f5f6938ec04076563686f5f7538ed04096563686f5f626f6f6cee040d6563686f5f6f70745f626f6f6cef040c6563686f5f6e6f7468696e67f0040d6563686f5f61727261795f7538f104146563686f5f6d756c74695f76616c75655f753332f204176563686f5f6d756c74695f76616c75655f7475706c6573f304126563686f5f7365725f6578616d706c655f32f404106563686f5f73696d706c655f656e756df5041c66696e6973685f73696d706c655f656e756d5f76617269616e745f31f604136563686f5f6e6f6e5f7a65726f5f7573697a65f7041c6563686f5f736f6d655f617267735f69676e6f72655f6f7468657273f8040d6563686f5f6172726179766563f9040d6563686f5f6269675f75696e74fa040c6563686f5f6269675f696e74fb04136563686f5f6d616e616765645f627566666572fc04146563686f5f6d616e616765645f61646472657373fd04186563686f5f6269675f696e745f6d616e616765645f766563fe04126563686f5f6269675f696e745f7475706c65ff04136563686f5f6269675f696e745f6f7074696f6e80051b6563686f5f7475706c655f696e746f5f6d756c7469726573756c7481051f6563686f5f6d616e616765645f7665635f6f665f6d616e616765645f7665638205246563686f5f6d616e616765645f7665635f6f665f746f6b656e5f6964656e74696669657283051f6563686f5f6d616e616765645f6173796e635f726573756c745f656d7074798405176563686f5f7661726167735f6d616e616765645f73756d850512636f6d707574655f6765745f76616c756573860511636f6d707574655f6372656174655f6563870515636f6d707574655f6765745f65635f6c656e677468880520636f6d707574655f6765745f707269765f6b65795f627974655f6c656e67746889050e636f6d707574655f65635f6164648a0511636f6d707574655f65635f646f75626c658b0516636f6d707574655f69735f6f6e5f63757276655f65638c0513636f6d707574655f7363616c61725f6d756c748d0518636f6d707574655f7363616c61725f626173655f6d756c748e0512636f6d707574655f6d61727368616c5f65638f051d636f6d707574655f6d61727368616c5f636f6d707265737365645f6563900514636f6d707574655f756e6d61727368616c5f656391051f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f6563920517636f6d707574655f67656e65726174655f6b65795f65639305096c6f674576656e744194050f6c6f674576656e74415265706561749505096c6f674576656e74429605136f6e6c795f6f776e65725f656e64706f696e7497051a6f6e6c795f757365725f6163636f756e745f656e64706f696e7498050e726571756972655f657175616c7399050873635f70616e69639a05136d616464726573735f66726f6d5f61727261799b051c6d616464726573735f66726f6d5f6d616e616765645f6275666665729c050b6d6275666665725f6e65779d050e6d6275666665725f636f6e6361749e05126d6275666665725f636f70795f736c6963659f05126d6275666665725f7365745f72616e646f6da0050a6d6275666665725f6571a105146d616e616765645f616464726573735f7a65726fa205126d616e616765645f616464726573735f6571a3050f6d616e616765645f7665635f6e6577a405186d616e616765645f7665635f62696775696e745f70757368a505166d616e616765645f7665635f62696775696e745f6571a605186d616e616765645f7665635f616464726573735f70757368a7050f6d616e616765645f7665635f736574a805126d616e616765645f7665635f72656d6f7665a905106d616e616765645f7665635f66696e64aa05146d616e616765645f7665635f636f6e7461696e73ab05166d616e616765645f7665635f61727261795f70757368ac05146d616e616765645f7265665f6578706c69636974ad051073746f726167655f726561645f726177ae051173746f726167655f77726974655f726177af051973746f726167655f726561645f66726f6d5f61646472657373b0050a6c6f61645f6279746573b1050d6c6f61645f6269675f75696e74b2050c6c6f61645f6269675f696e74b305086c6f61645f753634b4050a6c6f61645f7573697a65b505086c6f61645f693634b605096c6f61645f626f6f6cb705096c6f61645f61646472b8050d6c6f61645f6f70745f61646472b9051169735f656d7074795f6f70745f61646472ba050f6765745f6e725f746f5f636c656172bb0513636c6561725f73746f726167655f76616c7565bc050a6c6f61645f7365725f32bd05096c6f61645f6d617031be05096c6f61645f6d617032bf05096c6f61645f6d617033c005156c6f61645f66726f6d5f616464726573735f726177c1050b73746f72655f6279746573c2050e73746f72655f6269675f75696e74c3050d73746f72655f6269675f696e74c4050b73746f72655f7573697a65c5050973746f72655f693332c6050973746f72655f753634c7050973746f72655f693634c8050a73746f72655f626f6f6cc9050a73746f72655f61646472ca050e73746f72655f6f70745f61646472cb050b73746f72655f7365725f32cc050a73746f72655f6d617031cd050a73746f72655f6d617032ce050a73746f72655f6d617033cf051273746f72655f72657365727665645f693634d0051773746f72655f72657365727665645f6269675f75696e74d1051573746f72655f72657365727665645f7665635f7538d2051b616464726573735f746f5f69645f6d61707065725f6765745f6964d30524616464726573735f746f5f69645f6d61707065725f6765745f69645f6e6f6e5f7a65726fd40520616464726573735f746f5f69645f6d61707065725f6765745f61646472657373d5051d616464726573735f746f5f69645f6d61707065725f636f6e7461696e73d60518616464726573735f746f5f69645f6d61707065725f736574d70525616464726573735f746f5f69645f6d61707065725f6765745f69645f6f725f696e73657274d80521616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f6964d90526616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f61646472657373da050d6765744c6973744d6170706572db05126c6973744d6170706572507573684261636bdc05705f5a4e31336d756c746976657273785f73633773746f72616765376d61707065727331386c696e6b65645f6c6973745f6d617070657231344c696e6b65644c697374496e666f323067656e65726174655f6e65775f6e6f64655f69643137683363346437326461656535366530313445dd05136c6973744d61707065725075736846726f6e74de05126c6973744d6170706572506f7046726f6e74df05116c6973744d6170706572506f704261636be0050f6c6973744d617070657246726f6e74e1050e6c6973744d61707065724261636be205136c6973744d6170706572507573684166746572e305146c6973744d6170706572507573684265666f7265e405146c6973744d617070657252656d6f76654e6f6465e505186c6973744d617070657252656d6f76654e6f646542794964e605126c6973744d617070657253657456616c7565e705166c6973744d617070657253657456616c756542794964e805176c6973744d617070657249746572617465427948616e64e905176c6973744d617070657249746572617465427949746572ea050c71756575655f6d6170706572eb051671756575655f6d61707065725f707573685f6261636bec051671756575655f6d61707065725f706f705f66726f6e74ed051271756575655f6d61707065725f66726f6e74ee050a6d61705f6d6170706572ef050f6d61705f6d61707065725f6b657973f005116d61705f6d61707065725f76616c756573f105116d61705f6d61707065725f696e73657274f205176d61705f6d61707065725f636f6e7461696e735f6b6579f3050e6d61705f6d61707065725f676574f405116d61705f6d61707065725f72656d6f7665f5052c6d61705f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e74f605226d61705f6d61707065725f656e7472795f6f725f696e736572745f64656661756c74f7051b6d61705f6d61707065725f656e7472795f616e645f6d6f64696679f805236d61705f6d61707065725f656e7472795f6f725f696e736572745f776974685f6b6579f905176d61705f73746f726167655f6d61707065725f76696577fa05216d61705f73746f726167655f6d61707065725f696e736572745f64656661756c74fb051f6d61705f73746f726167655f6d61707065725f636f6e7461696e735f6b6579fc05166d61705f73746f726167655f6d61707065725f676574fd051f6d61705f73746f726167655f6d61707065725f696e736572745f76616c7565fe051c6d61705f73746f726167655f6d61707065725f6765745f76616c7565ff05196d61705f73746f726167655f6d61707065725f72656d6f76658006186d61705f73746f726167655f6d61707065725f636c6561728106346d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e748206386d61705f73746f726167655f6d61707065725f656e7472795f616e645f6d6f646966795f696e6372656d656e745f6f725f64656661756c7483062a6d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f75706461746584060a7365745f6d61707065728506117365745f6d61707065725f696e736572748606137365745f6d61707065725f636f6e7461696e738706117365745f6d61707065725f72656d6f766588061a6d61705f6d795f73696e676c655f76616c75655f6d61707065728906226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f318a06226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f328b062c6d795f73696e676c655f76616c75655f6d61707065725f73756274726163745f776974685f726571756972658c06236d795f73696e676c655f76616c75655f6d61707065725f7365745f69665f656d7074798d0619636c6561725f73696e676c655f76616c75655f6d61707065728e06246765745f66726f6d5f616464726573735f73696e676c655f76616c75655f6d61707065728f062769735f656d7074795f61745f616464726573735f73696e676c655f76616c75655f6d61707065729006237261775f627974655f6c656e6774685f73696e676c655f76616c75655f6d617070657291060a7665635f6d617070657292060f7665635f6d61707065725f7075736893060e7665635f6d61707065725f6765749406197665635f6d61707065725f6765745f61745f6164647265737395060e7665635f6d61707065725f6c656e9606197665635f6d61707065725f6c656e5f61745f61646472657373970614746f6b656e5f617474726962757465735f736574980617746f6b656e5f617474726962757465735f75706461746599061f746f6b656e5f617474726962757465735f6765745f617474726962757465739a061a746f6b656e5f617474726962757465735f6765745f6e6f6e63659b0616746f6b656e5f617474726962757465735f636c6561729c061f746f6b656e5f617474726962757465735f6861735f617474726962757465739d06106164645f746f5f77686974656c6973749e061572656d6f76655f66726f6d5f77686974656c6973749f060e636865636b5f636f6e7461696e73a00619636865636b5f636f6e7461696e735f61745f61646472657373a10610726571756972655f636f6e7461696e73a2061b726571756972655f636f6e7461696e735f61745f61646472657373a3061f69737375655f66756e6769626c655f64656661756c745f63616c6c6261636ba4061e69737375655f66756e6769626c655f637573746f6d5f63616c6c6261636ba5062069737375655f616e645f7365745f616c6c5f726f6c65735f66756e6769626c65a606187365745f6c6f63616c5f726f6c65735f66756e6769626c65a7060d6d696e745f66756e6769626c65a806166d696e745f616e645f73656e645f66756e6769626c65a9060d6275726e5f66756e6769626c65aa06146765745f62616c616e63655f66756e6769626c65ab061b726571756972655f73616d655f746f6b656e5f66756e6769626c65ac061f726571756972655f616c6c5f73616d655f746f6b656e5f66756e6769626c65ad061267657446756e6769626c65546f6b656e4964ae061c69737375655f616e645f7365745f616c6c5f726f6c65735f6d657461af06176d61707065725f6e66745f7365745f746f6b656e5f6964b006116d61707065725f6e66745f637265617465b1061a6d61707065725f6e66745f6372656174655f616e645f73656e64b206176d61707065725f6e66745f6164645f7175616e74697479b306206d61707065725f6e66745f6164645f7175616e746974795f616e645f73656e64b4060f6d61707065725f6e66745f6275726eb506166d61707065725f6e66745f6765745f62616c616e6365b6061b6d61707065725f6765745f746f6b656e5f61747472696275746573b706156765744e6f6e46756e6769626c65546f6b656e4964b80615696e69745f756e697175655f69645f6d6170706572b90614756e697175655f69645f6d61707065725f676574ba061c756e697175655f69645f6d61707065725f737761705f72656d6f7665bb0614756e697175655f69645f6d61707065725f736574bc0610756e697175655f69645f6d6170706572bd06116d616e616765645f7374727563745f6571be060c6f766572666c6f775f753136bf060f6e6f5f6f766572666c6f775f693136c0060c6f766572666c6f775f693136c10615746f6b656e5f6964656e7469666965725f65676c64c2061b746f6b656e5f6964656e7469666965725f69735f76616c69645f31c3061b746f6b656e5f6964656e7469666965725f69735f76616c69645f32c406136e6f6e5f7a65726f5f7573697a655f69746572c506146e6f6e5f7a65726f5f7573697a655f6d6163726fc606147365745f636f6e74726163745f61646472657373c7061369735f656d7074795f61745f61646472657373c80613636f6e7461696e735f61745f61646472657373c9060e6c656e5f61745f61646472657373ca0625636865636b5f696e7465726e616c5f636f6e73697374656e63795f61745f61646472657373cb060863616c6c4261636bcc06095f5f72646c5f6f6f6dcd06355f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d636d703137683430396261373137316535306132626445ce06066d656d637079cf063a5f5a4e35616c6c6f6335616c6c6f6336476c6f62616c3130616c6c6f635f696d706c31376863363364656230373433333935616338452e323839d0066e5f5a4e32366d756c746976657273785f73635f7761736d5f6164617074657231307761736d5f616c6c6f6331346661696c5f616c6c6f6361746f7232397369676e616c5f616c6c6f636174696f6e5f6e6f745f616c6c6f7765643137686339633663353562343233643532306545071201000f5f5f737461636b5f706f696e74657209110200072e726f6461746101052e6461746100550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e37362e302d6e696768746c79202832316363653231643820323032332d31322d313129002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874" -} diff --git a/test/features/basic-features/output/basic-features-storage-bytes-dbg.mxsc.json b/test/features/basic-features/output/basic-features-storage-bytes-dbg.mxsc.json deleted file mode 100644 index c29cf5cc5..000000000 --- a/test/features/basic-features/output/basic-features-storage-bytes-dbg.mxsc.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "buildInfo": { - "rustc": { - "version": "1.76.0-nightly", - "commitHash": "21cce21d8c012f14cf74d5afddd795d324600dac", - "commitDate": "2023-12-11", - "channel": "Nightly", - "short": "rustc 1.76.0-nightly (21cce21d8 2023-12-11)" - }, - "contractCrate": { - "name": "basic-features", - "version": "0.0.0" - }, - "framework": { - "name": "multiversx-sc", - "version": "0.46.1" - } - }, - "abi": { - "name": "BasicFeatures", - "constructor": { - "inputs": [], - "outputs": [] - }, - "endpoints": [ - { - "name": "load_bytes", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "store_bytes", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "bytes" - } - ], - "outputs": [] - } - ], - "events": [ - { - "identifier": "event_err_topic", - "inputs": [ - { - "name": "err_topic", - "type": "CodecErrorTestType", - "indexed": true - } - ] - }, - { - "identifier": "event_err_data", - "inputs": [ - { - "name": "data", - "type": "CodecErrorTestType" - } - ] - }, - { - "identifier": "event_a", - "inputs": [ - { - "name": "data", - "type": "u32" - } - ] - }, - { - "identifier": "event_b", - "inputs": [ - { - "name": "arg1", - "type": "BigUint", - "indexed": true - }, - { - "name": "arg2", - "type": "Address", - "indexed": true - }, - { - "name": "data", - "type": "List" - } - ] - } - ], - "esdtAttributes": [], - "hasCallback": false, - "types": { - "CodecErrorTestType": { - "type": "struct", - "docs": [ - "Helper type to explore encode/decode errors." - ] - }, - "EsdtTokenPayment": { - "type": "struct", - "fields": [ - { - "name": "token_identifier", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ] - }, - "ExampleEnumSimple": { - "type": "enum", - "docs": [ - "Copied from multiversx-sc serialization tests." - ], - "variants": [ - { - "docs": [ - "Variant 0 doc comment.", - "This will show up in the ABI." - ], - "name": "Variant0", - "discriminant": 0 - }, - { - "name": "Variant1", - "discriminant": 1 - }, - { - "docs": [ - "One line is enough. The one above doesn't have any." - ], - "name": "Variant2", - "discriminant": 2 - } - ] - }, - "ExampleEnumWithFields": { - "type": "enum", - "docs": [ - "Copied from multiversx-sc serialization tests." - ], - "variants": [ - { - "name": "Unit", - "discriminant": 0 - }, - { - "name": "Newtype", - "discriminant": 1, - "fields": [ - { - "name": "0", - "type": "u32" - } - ] - }, - { - "name": "Tuple", - "discriminant": 2, - "fields": [ - { - "name": "0", - "type": "u32" - }, - { - "name": "1", - "type": "u32" - } - ] - }, - { - "name": "Struct", - "discriminant": 3, - "fields": [ - { - "name": "a", - "type": "u32" - } - ] - } - ] - }, - "ExampleStructManaged": { - "type": "struct", - "fields": [ - { - "name": "big_uint", - "type": "BigUint" - }, - { - "name": "int", - "type": "u32" - }, - { - "name": "bytes", - "type": "bytes" - } - ] - }, - "RgbColor": { - "type": "struct", - "fields": [ - { - "name": "r", - "type": "u8" - }, - { - "name": "g", - "type": "u8" - }, - { - "name": "b", - "type": "u8" - } - ] - }, - "TokenAttributesStruct": { - "type": "struct", - "fields": [ - { - "name": "field_biguint", - "type": "BigUint" - }, - { - "name": "field_u64", - "type": "u64" - }, - { - "name": "field_vec_u32", - "type": "List" - } - ] - } - } - }, - "size": 347924, - "code": "0061736d0100000001230760027f7f017f6000017f60027f7f0060037f7f7f017f60000060017f017f60017f0002b4010803656e76126d427566666572476574417267756d656e74000003656e760f6765744e756d417267756d656e7473000103656e760b7369676e616c4572726f72000203656e760f6d4275666665725365744279746573000303656e760e636865636b4e6f5061796d656e74000403656e76126d42756666657253746f726167654c6f6164000003656e760d6d42756666657246696e697368000503656e76136d42756666657253746f7261676553746f7265000003090801010601040404040405017001010105030100030616037f01418080080b7f0041ac80080b7f0041b080080b075207066d656d6f7279020004696e6974000c0a6c6f61645f6279746573000d0b73746f72655f6279746573000e0863616c6c4261636b000f0a5f5f646174615f656e6403010b5f5f686561705f6261736503020ae501081701017f410010898080800022001080808080001a20000b1d01017f410041002802a880888000417f6a22003602a88088800020000b200002401081808080002000470d000f0b4180808880004119108280808000000b1d01017f1089808080002200419980888000410d1083808080001a20000b10001084808080004100108a808080000b3001017f1084808080004100108a80808000108b8080800010898080800022001085808080001a20001086808080001a0b2901017f1084808080004101108a808080001088808080002100108b8080800020001087808080001a0b02000b0b390200418080080b2677726f6e67206e756d626572206f6620617267756d656e747373746f726167655f62797465730041a880080b049cffffff00cb040d2e64656275675f616262726576011101250e1305030e10171b0eb44219110112060000023901030e0000032e006e0e030e3a0b3b05200b0000042e006e0e030e3a0b3b0b200b0000052e011101120640186e0e030e3a0b3b0b360b0000061d01311311011206580b590b570b0000071d01311311011206580b5905570b0000081d00311311011206580b590b570b0000091d0131135517580b5905570b00000a1d0031135517580b5905570b00000b1d00311311011206580b5905570b00000c1d0131135517580b590b570b00000d1d0031135517580b590b570b00000e1d00311011011206580b5905570b00000f1101250e1305030e10171b0eb442190000101101250e1305030e10171b0eb44219110155170000112e011101120640186e0e030e3a0b3b053f190000121d01311011011206580b590b570b0000131d00311011011206580b590b570b0000141d0031135517580b590b0000151d0031105517580b590b570b0000162e006e0e030e3a0b3b0b3f19200b0000172e006e0e030e3a0b3b053f19200b0000182e011101120640186e0e030e3a0b3b0b0000192e01110112064018311300001a1d01311311011206580b590b00001b2e01110112064018030e3a0b3b053f1900001c1d01311011011206580b5905570b00001d1d0131105517580b5905570b00001e1d0131105517580b590b570b00001f1d0031105517580b5905570b0000201d00311011011206580b590b0000211d01311011011206580b590b0000222e00110112064018030e3a0b3b053f190000231d0031105517580b590b00000000f0bc050b2e64656275675f696e666f2e0b00000400000000000401e31601001c0086160100000000002dfa0000ffffffffd80e0000025a0a0000023a050000023405000002bd02000003702200007fb4000002ab030103a29600003fb8000002ab030103643600003eb9000002ab03010000022c05000002bd020000031e1e00003fb800000410040103248100003eb900000410040100000002770a000002cd020000020c02000004aa1d00006ab400000be30104774f0000e5b700000bf301040c9f00002cb800000be301040e2600002bb900000be301044e7200000ab900000bf301000002bd02000003e361000095b400000c930201038e750000cbb400000cbd02010368780000e9b400000c93020103ae8d000021b500000c93020103f16d000003b500000cbd02010000020504000002710a0000024b0a000003d835000025b400000321020103d835000025b4000003210201000000028c05000002710a0000028901000003fa66000035b400000668040103dd1a000054b4000006950401000239010000031c2500003ab4000006c704010002ef000000036b9a000059b400000628050100021502000004e00c0000ff0a000006bf0100024301000003baa1000035b4000006d802010002f900000003c01c00003ab4000006330301000002fc03000002f7020000025f02000004cc5b000055b500000d21010000000002bf0500000234040000027501000003d08f00003a03000005ed050100000002d2060000024902000003ca4900002e0b00000ee50101000002c1e9000002bd020000029003000003e98c0000b7e900000ac804010003a69d0000900300000a9904010000000222040000027f080000023207000002b90600000496a40000b90600000702010002620a000005ffffffffd80e000004ed00059f3d580000620a000001e20306dc000000ffffffff080000000f0a1a0799000000ffffffff080000000c9a021a083a000000ffffffff080000000bee1c0000097a010000000000000104010e095a0100002000000006c804090a2e01000040000000066904110b02020000ffffffff07000000066c041c000006e9000000ffffffff020000000f0e1507a5000000ffffffff020000000cc4021e086d000000ffffffff020000000bf925000006f6000000ffffffff020000000f0a1a07b1000000ffffffff020000000c9a021a0847000000ffffffff020000000bee1c000006f6000000ffffffff020000000f0a1a07b1000000ffffffff020000000c9a021a0847000000ffffffff020000000bee1c0000077a010000ffffffff1600000001100112075a010000ffffffff1600000006c804090b02020000ffffffff07000000066c041c0b2e010000ffffffff0700000006690411000006e9000000ffffffff0c0000000f0e1507a5000000ffffffff0c0000000cc4021e086d000000ffffffff0c0000000bf9250000077a010000ffffffff18000000010e010e075a010000ffffffff1800000006c804090b02020000ffffffff09000000066c041c0b2e010000ffffffff0700000006690411000006f6000000ffffffff110000000f0a1a07b1000000ffffffff110000000c9a021a0847000000ffffffff110000000bee1c000007e3010000ffffffff19000000011c0112068d010000ffffffff190000000d22130767010000ffffffff19000000062905090b02020000ffffffff010000000699041c0a3b01000060000000069604110000000cf6000000780000000f0a1a09b1000000900000000c9a021a0d47000000a80000000bee1c00000b6c020000ffffffff120000000124010d0e640b0000ffffffff0a000000012501140603010000ffffffff0a0000000f0a1a07bd000000ffffffff0a0000000c9a021a0854000000ffffffff0a0000000bee1c00000603010000ffffffff0a0000000f0a1a07bd000000ffffffff0a0000000c9a021a0854000000ffffffff0a0000000bee1c00000c03010000c00000000f0a1a09bd000000e80000000c9a021a0d54000000100100000bee1c000009c5010000380100000139011609b2010000600100000634030e09a00100008801000006dc02230d1c020000a801000006c11c0000000610010000ffffffff0a000000011d1507c9000000ffffffff0a0000000cc4021e087a000000ffffffff0a0000000bf925000009e3010000c8010000015c01160c8d010000e00100000d22130967010000f8010000062905090a3b01000010020000069604110b02020000ffffffff050000000699041c0000000603010000ffffffff100000000f0a1a07bd000000ffffffff100000000c9a021a0854000000ffffffff100000000bee1c0000097a010000300200000166011a095a0100004802000006c804090a2e01000060020000066904110a0202000078020000066c041c000006e9000000ffffffff020000000f0e1507a5000000ffffffff020000000cc4021e086d000000ffffffff020000000bf92500000603010000ffffffff080000000f0a1a07bd000000ffffffff080000000c9a021a0854000000ffffffff080000000bee1c000006f6000000ffffffff020000000f0a1a07b1000000ffffffff020000000c9a021a0847000000ffffffff020000000bee1c000006f6000000ffffffff020000000f0a1a07b1000000ffffffff020000000c9a021a0847000000ffffffff020000000bee1c0000077a010000ffffffff18000000016a011e075a010000ffffffff1800000006c804090b02020000ffffffff05000000066c041c0a2e0100009002000006690411000006e9000000ffffffff0c0000000f0e1507a5000000ffffffff0c0000000cc4021e086d000000ffffffff0c0000000bf9250000076c020000ffffffff140000000181010d0648020000ffffffff010000000720090b3a020000ffffffff010000000acf041200000610010000ffffffff1c0000000f0e1507c9000000ffffffff1c0000000cc4021e087a000000ffffffff1c0000000bf92500000610010000ffffffff1c000000010e1507c9000000ffffffff1c0000000cc4021e087a000000ffffffff1c0000000bf9250000076c020000ffffffffa8000000018e010a0648020000ffffffff010000000720090b3a020000ffffffff010000000acf0412000009e3010000a8020000018f010e0c8d010000d00200000d22130967010000f8020000062905090a3b01000020030000069604110a02020000400300000699041c00000006e9000000ffffffff0c0000000f0e1507a5000000ffffffff0c0000000cc4021e086d000000ffffffff0c0000000bf925000006f6000000ffffffff080000000f0a1a07b1000000ffffffff080000000c9a021a0847000000ffffffff080000000bee1c00000cf6000000580300000f0a1a09b1000000700300000c9a021a0d47000000880300000bee1c000006e9000000ffffffff0c0000000f0e1507a5000000ffffffff0c0000000cc4021e086d000000ffffffff0c0000000bf925000007e3010000ffffffff1d0000000195010e068d010000ffffffff1d0000000d22130767010000ffffffff1d000000062905090a3b010000a00300000696041100000009e3010000b803000001a301160c8d010000d80300000d22130967010000f8030000062905090a3b01000018040000069604110b02020000ffffffff0e0000000699041c00000009e30100003804000001aa01160c8d010000580400000d2213096701000078040000062905090a3b01000098040000069604110b02020000ffffffff0e0000000699041c00000006f6000000ffffffff100000000f0a1a07b1000000ffffffff100000000c9a021a0847000000ffffffff100000000bee1c0000077a010000ffffffff1600000001b10116075a010000ffffffff1600000006c804090b02020000ffffffff07000000066c041c0b2e010000ffffffff070000000669041100000000000000003f000000040000000000040fe31601001c0074f50000590b00002dfa00000222040000027f080000023207000002550500000467b3000055050000010a010000000000fa0e00000400000000000410e31601001c00eb040100980b00002dfa000000000000202c0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a0040100000205040000023d030000022a020000049a8c0000f80a000002ab0100029c01000003511a00004f050000020f010100022401000003c732000048050000027301010002a6010000038554000088050000024b020100027a00000003ad6b0000ba07000002d50101000291000000032370000083060000029b030100020201000003e353000060060000021603010002f801000004266f0000f80a000002ab0100024c01000003d03700004f050000020f01010002da0000000386240000480500000273010100023e02000003ba25000088050000024b020100021901000003b8870000ba07000002d50101000253020000031755000083060000029b03010002ce000000032a3400006006000002160301000002690800000200000000030f8a00009c06000008f702010002b202000003754b00009c06000008f7020100000002bf05000002340400000272020000032c5a0000740a000003f1050103ce7000004103000003f3050103435300003a03000003ed050100027f0100000347230000ae05000003990501036a2b00005f0a0000039b05010002ee0100000352660000740a000003f1050103393a00004103000003f30501033b8600003a03000003ed050100022f01000003173e0000ae0500000399050103036400005f0a0000039b050100000002d2060000027100000003c73c0000690b000009cd040100023f0000000351980000690b000009cd0401000002c1e9000002bd02000002880300000371a800009ee900000b670401000315800000880300000b510401029003000003e98c0000b7e900000bc804010003a69d0000900300000b9904010000000222040000028203000002bd02000004276d000043050000077b010447ad00003e0500000794010002480b000004688a000093b9000004050111ffffffff9402000007ed03000000009fe83100003ff1000005ea010c03030000b804000004c30906e5020000ffffffff0e000000041d150648000000ffffffff0e000000077c160b3a000000ffffffff0e0000000175041200000886000000ffffffff03000000041f1108c6010000ffffffff0800000004220808d3010000ffffffff0100000004240c08d3010000ffffffff0100000004280c08f3010000ffffffff01000000042c0c08f3010000ffffffff0300000004370c0898000000ffffffff0100000004252106f1020000ffffffff010000000425140668000000ffffffff010000000795110b5a000000ffffffff0100000001d1041200000898000000ffffffff0100000004292106f1020000ffffffff010000000429140668000000ffffffff010000000795110b5a000000ffffffff0100000001d10412000008ab000000ffffffff0d000000042e1008f3010000ffffffff01000000042e100886000000ffffffff05000000043f2506f1020000ffffffff03000000043f180668000000ffffffff030000000795110b5a000000ffffffff0300000001d10412000008d3010000ffffffff09000000044c080886000000ffffffff0300000004561d120a1b0000ffffffff12000000045b2713a01a0000ffffffff0300000007a01613cc1a0000ffffffff0b00000007a31a13ac1a0000ffffffff0100000007a11600120a1b0000ffffffff1200000004602713a01a0000ffffffff0300000007a01613cc1a0000ffffffff0b00000007a31a13ac1a0000ffffffff0100000007a1160008ab000000ffffffff0b00000004681808d1000000ffffffff0d000000046f1508d1000000ffffffff03000000046e150800020000ffffffff0b00000004740808e0010000ffffffff0100000004750c08be000000ffffffff0900000004781d0898000000ffffffff0300000004781d06aa0e0000ffffffff030000000477340867020000ffffffff030000000ab30d0008d1000000ffffffff030000000477230800020000ffffffff010000000477230894010000ffffffff0d000000048e090886000000ffffffff0100000004920c08be000000ffffffff0500000004941d0898000000ffffffff0700000004941d0886000000ffffffff0100000004932c06aa0e0000ffffffff07000000047e190867020000ffffffff070000000ab30d0008e0010000ffffffff0100000004860c12891b0000ffffffff0700000004881113591b0000ffffffff070000000ac70d0008e4000000ffffffff0900000004890d0898000000ffffffff01000000049b1d06f1020000ffffffff01000000049b100668000000ffffffff010000000795110b5a000000ffffffff0100000001d10412000006aa0e0000ffffffff0700000004a3310867020000ffffffff070000000ab30d0008be000000ffffffff0500000004a4190898000000ffffffff0300000004a41908d1000000ffffffff0700000004a31f0800020000ffffffff0100000004a31f08be000000ffffffff0800000004ad160886000000ffffffff0500000004ad1608d1000000ffffffff0100000004b00f08f7000000ffffffff0100000004b00508f7000000ffffffff0b00000004b1050886000000ffffffff0100000004b9130894010000ffffffff0300000004b9090cf10200000805000004bc050c68000000200500000795110a5a0000003805000001d1041200000894010000ffffffff0100000004b6090800020000ffffffff0100000004681708be000000ffffffff0d00000004551f08be000000ffffffff0500000004541f0886000000ffffffff09000000041e1106e5020000ffffffff0f000000041c150648000000ffffffff0f000000077c160b3a000000ffffffff0f0000000175041200000000042eb300003fb8000004050111ffffffff1d03000007ed03000000009fcc12000063f1000005ea010c780800005005000004c90906860e0000ffffffff17000000041d1506a6020000ffffffff17000000077c160b98020000ffffffff170000000b6e04120000080a010000ffffffff03000000041f110813020000ffffffff0d0000000422080820020000ffffffff0100000004240c0820020000ffffffff0100000004280c0840020000ffffffff01000000042c0c0840020000ffffffff0300000004370c081c010000ffffffff0100000004252106920e0000ffffffff0100000004251406c6020000ffffffff010000000795110bb8020000ffffffff010000000bcf04120000081c010000ffffffff0100000004292106920e0000ffffffff0100000004291406c6020000ffffffff010000000795110bb8020000ffffffff010000000bcf04120000082f010000ffffffff12000000042e100840020000ffffffff01000000042e100840020000ffffffff07000000043c0c1440020000a00500000400080a010000ffffffff05000000043f2506920e0000ffffffff03000000043f1806c6020000ffffffff030000000795110bb8020000ffffffff030000000bcf041200000820020000ffffffff09000000044c08080a010000ffffffff0300000004561d121c1b0000ffffffff15000000045b2715ec1a0000b805000007a01613b91a0000ffffffff0100000007a11613d91a0000ffffffff0300000007a31a00121c1b0000ffffffff1500000004602715ec1a0000d005000007a01613b91a0000ffffffff0100000007a11613d91a0000ffffffff0300000007a31a00082f010000ffffffff0b0000000468180855010000ffffffff12000000046f150855010000ffffffff03000000046e15084d020000ffffffff0b000000047408082d020000ffffffff0100000004750c0842010000ffffffff0a00000004781d081c010000ffffffff0300000004781d06cf0e0000ffffffff05000000047734087a020000ffffffff050000000ab30d000855010000ffffffff05000000047723084d020000ffffffff0100000004772308db0e0000ffffffff0100000004771108a7010000ffffffff11000000048e09080a010000ffffffff0100000004920c084d020000ffffffff0100000004920c0842010000ffffffff0500000004941d081c010000ffffffff0700000004941d080a010000ffffffff0100000004932c06cf0e0000ffffffff07000000047e19087a020000ffffffff070000000ab30d000840020000ffffffff0300000004800c082d020000ffffffff0100000004860c129b1b0000ffffffff08000000048811136b1b0000ffffffff080000000ac70d000868010000ffffffff0a00000004890d081c010000ffffffff01000000049b1d06920e0000ffffffff01000000049b1006c6020000ffffffff010000000795110bb8020000ffffffff010000000bcf041200000842010000ffffffff0900000004a419081c010000ffffffff0700000004a41906cf0e0000ffffffff0300000004a331087a020000ffffffff030000000ab30d000855010000ffffffff0500000004a31f084d020000ffffffff0100000004a31f08db0e0000ffffffff0100000004a30d08ed0e0000ffffffff0500000004b00f0855010000ffffffff0500000004b00f087b010000ffffffff0100000004b005087b010000ffffffff0500000004b105080a010000ffffffff0100000004b91308a7010000ffffffff0300000004b9090c920e0000e805000004bc050cc6020000000600000795110ab8020000180600000bcf0412000008a7010000ffffffff0100000004b6090842010000ffffffff0c00000004ad16080a010000ffffffff0100000004ad1608bc0e0000ffffffff0700000004a922084d020000ffffffff010000000468170842010000ffffffff0100000004551f08bc0e0000ffffffff0d00000004551f0842010000ffffffff0100000004541f08bc0e0000ffffffff0500000004541f080a010000ffffffff0e000000041e1106860e0000ffffffff14000000041c1506a6020000ffffffff14000000077c160b98020000ffffffff140000000b6e04120000000000025f02000004b94c000043050000077b0104ff8d00003e0500000794010000021d03000002f90000000437a20000690b00000ab20100021f020000030e170000fb0200000a740101000271000000044c940000690b00000ab201049e820000940700000a9a0100029d0200000323510000fb0200000a74010100000000b5000000040000000000040fe31601001c0046f30000b91400002dfa0000025a0a000002d20600000271000000046a2100000904000001940103c73c0000690b000001cd040103c73c0000690b000001cd040100020c02000003dd6f0000690b000003d0040103dd6f0000690b000003d0040100023f000000045b330000090400000194010000000222040000028203000002bd02000016e53f0000390a0000029e0100025f020000160f2b0000390a0000029e01000000007b000000040000000000040fe31601001c00dcea0000531500002dfa0000025a0a000002d20600000271000000046a2100000904000001940100023f000000045b330000090400000194010000000222040000021d03000002f900000016433d00000904000002c60100027100000016744300000904000002c60100000000a10200000400000000000401e31601001c00f2ef0000da1500002dfa0000ffffffff4a0000000222040000022e070000023404000003d538000054040000020e010103728700006f080000021c010104267d0000d80a0000027c0102d80a0000040f780000750400000280010455440000b704000002980104a8450000f1040000028a01000438950000cb0a0000021c0102cb0a0000046564000062040000021e0104ef1900009904000002360104846e0000d604000002280100049e5c00003a04000002e101023a04000004f66b00004404000002e301042b9700008904000002ec01000011ffffffff4a00000007ed03000000009f3a220000b70500000190010835000000ffffffff3f000000033609001779790000a70600000190010117834d0000430a000001900101178f5a0000740300000190010117e16a0000be05000001900101178f5e0000c6020000019001010000025a0a000002d2060000024902000003e50e0000690b000004cd040103e50e0000690b000004cd0401035e9d0000970800000471050103e50e0000690b000004cd0401035e9d000097080000047105010000023a050000023405000002bd02000003af7d00008eb5000005ab030103516a000083b5000005d00101036510000003b600000501040103af7d00008eb5000005ab03010000022c05000002bd02000003ad9300008eb5000006100401034d5c000083b5000006dd010103a923000003b600000666040103662f000046b4000006dd010103317100008ab400000666040103662f000046b4000006dd010103317100008ab400000666040103ad9300008eb500000610040103d6b000007fb400000610040103d6b000007fb400000610040103ad9300008eb500000610040103ad9300008eb500000610040103d6b000007fb40000061004010000000000dd0500000400000000000410e31601001c0028e60000221700002dfa000000000000382c0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000026704010003158000008803000002510401029003000003e98c0000b7e9000002c8040103e98c0000b7e9000002c804010003a69d0000900300000299040103a69d000090030000029904010000023a050000023405000002bd02000003a29600003fb8000005ab030100000002770a000002cd020000020c020000040c9f00002cb8000007e301000002bd0200000368780000e9b40000089302010000000222040000027f080000023207000003ce540000aa0a00000660010103a79400007d0a0000066801010330480000bd0a00000656010102d802000018ffffffff9308000007ed03000000009f1d310000d8020000015d0648000000ffffffff090000000162240b3a000000ffffffff09000000026e0412001363240000ffffffff0300000001bf1813a6240000ffffffff0500000001c4170cd200000030060000060a1a09bf00000048060000089a021a0da00000006006000007ee1c000006d2000000ffffffff09000000060a1a07bf000000ffffffff09000000089a021a08a0000000ffffffff0900000007ee1c000006d2000000ffffffff0b000000060a1a07bf000000ffffffff0b000000089a021a08a0000000ffffffff0b00000007ee1c000007fe000000ffffffff09000000014f010e0748000000ffffffff07000000066901150b3a000000ffffffff07000000026e0412000775000000ffffffff01000000066c01050b5a000000ffffffff0100000002cf0412000007fe000000ffffffff09000000014801180748000000ffffffff07000000066901150b3a000000ffffffff07000000026e0412000775000000ffffffff01000000066c01050b5a000000ffffffff0100000002cf0412000007fe000000ffffffff09000000014001180748000000ffffffff07000000066901150b3a000000ffffffff07000000026e0412000775000000ffffffff01000000066c01050b5a000000ffffffff0100000002cf0412000007f1000000ffffffff05000000013401180775000000ffffffff01000000066401050b5a000000ffffffff0100000002cf0412000007fe000000ffffffff0b000000013101130748000000ffffffff09000000066901150b3a000000ffffffff09000000026e0412000775000000ffffffff01000000066c01050b5a000000ffffffff0100000002cf0412000007f1000000ffffffff14000000012b010e0775000000ffffffff01000000066401050b5a000000ffffffff0100000002cf0412000748000000ffffffff09000000066101150b3a000000ffffffff09000000026e0412000007fe000000ffffffff09000000010d010e0748000000ffffffff07000000066901150b3a000000ffffffff07000000026e0412000775000000ffffffff01000000066c01050b5a000000ffffffff0100000002cf0412000007fe000000ffffffff02000000015401130775000000ffffffff01000000066c01050b5a000000ffffffff0100000002cf041200000748000000ffffffff03000000015801190b3a000000ffffffff03000000026e04120007f1000000ffffffff05000000017d01160775000000ffffffff01000000066401050b5a000000ffffffff0100000002cf0412000009fe00000078060000018501120748000000ffffffff03000000066901150b3a000000ffffffff03000000026e0412000775000000ffffffff0c000000066c01050b5a000000ffffffff0c00000002cf04120000070b010000ffffffff09000000018e01090748000000ffffffff07000000065701080b3a000000ffffffff07000000026e0412000007f1000000ffffffff150000000195010d0775000000ffffffff05000000066401050b5a000000ffffffff0500000002cf04120000000002b906000018ffffffffae00000007ed03000000009f96a40000b906000009020682000000ffffffff010000000920090b67000000ffffffff0100000002cf0412000000000000003f000000040000000000040fe31601001c00c7e70000622000002dfa00000222040000027f08000002320700000200030000049e1a00000003000001520100000000003f000000040000000000040fe31601001c009fdb0000a02000002dfa00000222040000027f0800000232070000020d050000041cb000000d0500000107010000000000710100000400000000000401e31601001c00fed30000de2000002dfa0000ffffffff0f010000025a0a000002e800010002bd020000028803000003e3750000d0000100016e040103e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a0040103262f000088030000014604010000000222040000027f0800000232070000028809000019ffffffff0f01000007ed03000000009f220100000655000000ffffffff17000000021c140b3a000000ffffffff1700000001750412000655000000ffffffff0a000000022a100b3a000000ffffffff0a00000001750412000675000000ffffffff060000000235090b67000000ffffffff0600000001d10412000004f14700008809000002190100029805000004c68b000098050000036701043faf00002008000003530100024409000004be620000440900000418010002ce080000047b950000ce0800000518010000000000cd0400000400000000000410e31601001c00b5c10000842200002dfa000000000000502c0000025a0a000002d2060000023f000000045b330000090400000494010316330000eb020000046f02010351980000690b000004cd04010002a8020000033e540000690b000004cd0401000271000000046a2100000904000004940103de290000eb020000046f020103c73c0000690b000004cd0401033c490000ab07000004aa030103788300009e070000048e050103aba60000210b000004a404010000000222040000021d03000002e706000004245d000044030000033101045f6900000807000005800118ffffffff2d03000004ed00059f27790000fb06000001140861000000ffffffff1400000001ab2706d3000000ffffffff1200000001a51f0835000000ffffffff0800000003401c0835000000ffffffff04000000034032001adf000000ffffffff1700000001000841000000ffffffff1700000005811c0006df000000ffffffff0f000000016e320841000000ffffffff0f00000005811c0006df000000ffffffff130000000171320841000000ffffffff1300000005811c0006df000000ffffffff15000000012a1f0841000000ffffffff1500000005811c0006df000000ffffffff190000000163230841000000ffffffff1900000005811c000861000000ffffffff16000000018b2b06df000000ffffffff0500000001932f0841000000ffffffff0500000005811c0006d3000000ffffffff0a00000001382a0835000000ffffffff040000000340320835000000ffffffff0600000003401c000861000000ffffffff1600000001522b06df000000ffffffff05000000015a2f0841000000ffffffff0500000005811c000004155900005c030000033101044d4100001b07000005dc0118ffffffff8602000007ed03000000009f9a8400000f0700000114067c020000ffffffff0700000001a51f0874000000ffffffff0300000003401c0874000000ffffffff0300000003403200084e000000ffffffff0f00000001ab271a88020000ffffffff1700000001000880000000ffffffff1700000005dd1c000688020000ffffffff0f000000016e320880000000ffffffff0f00000005dd1c000688020000ffffffff0d0000000171320880000000ffffffff0d00000005dd1c00084e000000ffffffff0f000000018b2b0688020000ffffffff0500000001932f0880000000ffffffff0500000005dd1c00067c020000ffffffff0800000001382a0874000000ffffffff030000000340320874000000ffffffff0500000003401c00084e000000ffffffff0f00000001522b0688020000ffffffff05000000015a2f0880000000ffffffff0500000005dd1c000688020000ffffffff05000000012a1f0880000000ffffffff0500000005dd1c000688020000ffffffff050000000163230880000000ffffffff0500000005dd1c000018ffffffff6c01000007ed03000000009f466c0000220700000617077c020000ffffffff120000000691011b0874000000ffffffff0300000003401c0874000000ffffffff03000000034032000b8d000000ffffffff03000000069301170b8d000000ffffffff07000000069e011f09a70000009006000006b3011b0a9a000000c006000004920516000a8d000000f006000006b3012b0ab40000002007000006b7011b00000000000d0200000400000000000401e31601001c0016f90000622800002dfa0000ffffffffde070000025a0a000002c1e9000002bd02000002880300000371a800009ee900000267040100031580000088030000025104010000023a050000023405000002bd02000003a29600003fb8000004ab0301000003ad0f000062b90000052506010002770a000002cd020000020c020000040c9f00002cb8000008e301000002bd0200000368780000e9b40000099302010000000222040000027f0800000232070000028e0b000004466e00002a05000001720104f58200001a080000011f0118ffffffffde07000004ed00019f189600008e0b000001860648000000ffffffff110000000187140b3a000000ffffffff11000000026e04120013402d0000ffffffff09000000019c0d06a5000000ffffffff010000000a0a1a0792000000ffffffff01000000099a021a0866000000ffffffff0100000008ee1c00000875000000ffffffff080000000a031213402d0000ffffffff0100000001ac220dc90000005007000001c40906d5000000ffffffffa202000001c81413402d0000ffffffff0500000001251408ee010000ffffffff620000000131120800020000ffffffff90000000012e0e0dee01000068070000012f0e0800020000ffffffff8c00000001300f000000024c060000042d0f00004c060000062f0100021c04000004973500001c04000007370100000000003f000000040000000000040fe31601001c0074f50000162e00002dfa00000222040000027f080000023207000002550500000467b3000055050000010a0100000000006a0200000400000000000401e31601001c00fcdb0000552e00002dfa0000ffffffff8d090000025a0a000002c1e9000002bd02000002880300000371a800009ee90000026704010371a800009ee90000026704010003158000008803000002510401029003000003e98c0000b7e9000002c804010003a69d00009003000002990401031580000088030000025104010000000222040000027f080000023207000002bcfa000002bcfa000004b5390000d60600000133010018ffffffff8d09000004ed00029fb9ae0000bcfa0000012d0655000000ffffffff130000000130110b3a000000ffffffff13000000026e0412000675000000ffffffff0c00000001ac110b67000000ffffffff0c00000002cf04120006ab000000ffffffff3d010000019d100682000000ffffffff050000000149170b47000000ffffffff05000000026e0412000682000000ffffffff05000000013f120b47000000ffffffff05000000026e0412000006ab000000ffffffff41010000018c180682000000ffffffff0e000000013f120b47000000ffffffff0e000000026e0412000682000000ffffffff0e0000000149170b47000000ffffffff0e000000026e0412000006ab000000ffffffff3d010000015b140682000000ffffffff050000000149170b47000000ffffffff05000000026e0412000682000000ffffffff05000000013f120b47000000ffffffff05000000026e0412000006ab000000ffffffff3f010000017c180682000000ffffffff0e000000013f120b47000000ffffffff0e000000026e0412000682000000ffffffff0e0000000149170b47000000ffffffff0e000000026e04120000000000000000a80100000400000000000401e31601001c0052140100c03300002dfa0000ffffffffa2010000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f00008803000002460401037d6d0000cb06000002e601010000023a05000003ad0f000062b9000004250601023405000002bd020000035b50000093b9000005ab030100000002770a000002cd020000020c020000048874000080b9000006e301000002bd02000003fd7100003bb50000079302010000000222040000027f0800000232070000026309000018ffffffffa201000004ed00019f0253000063090000012d0648000000ffffffff0f0000000132140b3a000000ffffffff0f0000000275041200139d310000ffffffff0d000000014a0d0869000000ffffffff0600000008031206b2000000ffffffff0a000000080a1a079f000000ffffffff0a000000079a021a0880000000ffffffff0a00000006ee1c000006b2000000ffffffff09000000080a1a079f000000ffffffff09000000079a021a0880000000ffffffff0900000006ee1c00000855000000ffffffff0500000001380e0000000000003f000000040000000000040fe31601001c006ee50000a73600002dfa00000222040000027f0800000232070000022309000004016300002309000001050100000000004c0100000400000000000401e31601001c00bd020100e63600002dfa0000ffffffff62030000025a0a000002c1e9000002bd02000002880300000371a800009ee9000002670401000315800000880300000251040103d4600000cb06000002e50101029003000003e98c0000b7e9000002c804010003a69d000090030000029904010000023a05000003c14700000eb800000325060100000222040000027f0800000232070000024805010018ffffffff6203000004ed00019f814000004805010001220648000000ffffffff19000000012a140b3a000000ffffffff19000000026e0412000855000000ffffffff0500000001310e0889000000ffffffff060000000403120675000000ffffffff070000000175110b67000000ffffffff0700000002cf0412000675000000ffffffff0b00000001810e0b67000000ffffffff0b00000002cf0412000000000000002f0100000400000000000401e31601001c005cf80000253a00002dfa0000ffffffffd2020000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f00008803000002460401029003000003940e0000de00010002ca04010003134a00009003000002a004010000023a05000003ad0f000062b900000325060100000222040000027f0800000232070000022b0a000018ffffffffd202000004ed00019f907700002b0a000001240648000000ffffffff190000000127140b3a000000ffffffff190000000275041200087c000000ffffffff080000000403120668000000ffffffff070000000175110b5a000000ffffffff0700000002d10412000668000000ffffffff0b00000001800e0b5a000000ffffffff0b00000002d1041200000000000000e70100000400000000000401e31601001c00c4ed0000453d00002dfa0000ffffffffe1020000025a0a000002c1e9000002bd02000002880300000371a800009ee9000002670401000315800000880300000251040103d4600000cb06000002e50101029003000003e98c0000b7e9000002c804010003a69d000090030000029904010000023a05000003ad0f000062b9000003250601023405000002bd02000003a29600003fb8000004ab0301000003c14700000eb80000032506010002770a000002cd020000020c020000040c9f00002cb8000006e301000002bd0200000368780000e9b40000079302010000000222040000027f080000023207000002b90600000496a40000b90600000502010002b305000018ffffffffe102000004ed00019fe2810000b305000001550648000000ffffffff0700000001620d0b3a000000ffffffff07000000026e0412000855000000ffffffff0700000001690e0889000000ffffffff1c00000008031206df000000ffffffff08000000080a1a07cc000000ffffffff08000000079a021a08a0000000ffffffff0800000006ee1c000008af000000ffffffff110000000803120603010000ffffffffa10000000198090675000000ffffffff010000000520090b67000000ffffffff0100000002cf04120000000000000000a80100000400000000000401e31601001c00e5da0000864000002dfa0000ffffffff24020000025a0a000002c1e9000002bd02000002880300000371a800009ee9000002670401000315800000880300000251040103d4600000cb06000002e501010000023a05000003ad0f000062b9000004250601023405000002bd02000003a29600003fb8000005ab030100000002770a000002cd020000020c020000040c9f00002cb8000006e301000002bd0200000368780000e9b40000079302010000000222040000027f080000023207000002c006000018ffffffff2402000004ed00019ff3550000c006000001440648000000ffffffff130000000146150b3a000000ffffffff13000000026e04120013fa370000ffffffff0d00000001600d0855000000ffffffff05000000014a0e0869000000ffffffff0600000008031206b2000000ffffffff0a000000080a1a079f000000ffffffff0a000000079a021a0880000000ffffffff0a00000006ee1c000006b2000000ffffffff09000000080a1a079f000000ffffffff09000000079a021a0880000000ffffffff0900000006ee1c00000000000000003f000000040000000000040fe31601001c009fdb0000914300002dfa00000222040000027f0800000232070000020d050000041cb000000d0500000107010000000000bd0100000400000000000401e31601001c00d0d10000cf4300002dfa0000ffffffff61020000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f00008803000002460401029003000003940e0000de00010002ca04010003134a00009003000002a004010000023a05000003ad0f000062b9000003250601023405000002bd020000035b50000093b9000004ab030100000002770a000002cd020000020c020000048874000080b9000006e301000002bd02000003fd7100003bb50000079302010000000222040000027f0800000232070000025b090000047a9200005b09000005020100023209000018ffffffff6102000004ed00019f32a800003209000001220648000000ffffffff070000000125140b3a000000ffffffff070000000275041200087c000000ffffffff1500000008031206c5000000ffffffff08000000080a1a07b2000000ffffffff08000000079a021a0893000000ffffffff0800000006ee1c0000087c000000ffffffff0d00000008031206e9000000ffffffff930000000163090668000000ffffffff01000000051c090b5a000000ffffffff0100000002d1041200000000000000000f0100000400000000000401e31601001c00cce10000eb4600002dfa0000ffffffffa1010000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000000222040000027f0800000232070000029308000018ffffffffa101000007ed03000000009f6338000093080000024a0648000000ffffffff19000000024d140b3a000000ffffffff19000000016e0412000648000000ffffffff05000000025c100b3a000000ffffffff05000000016e0412000668000000ffffffff0a0000000269090b5a000000ffffffff0a00000001cf041200000000000000c50000000400000000000401e31601001c002ece0000bc4800002dfa0000fffffffff0000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000000222040000028203000002dc02000003a69c0000be07000001ea010102be0700001bfffffffff000000004ed00029fbe07000001f3010767000000ffffffffb300000001f401110748000000ffffffff0d000000031a01170b3a000000ffffffff0d000000027504120000000000000000c40000000400000000000401e31601001c0019c50000cb4900002dfa0000ffffffff80000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000000222040000028203000002dc020000031f6900003b08000001ea0101023b0800001bffffffff8000000007ed03000000009f3b08000001f30109670000008007000001f401110748000000ffffffff0f000000030901170b3a000000ffffffff0f000000027504120000000000000000c50000000400000000000401e31601001c0042bc0000da4a00002dfa0000ffffffff00010000025a0a000002c1e9000002bd02000002880300000371a800009ee900000267040100031580000088030000025104010000000222040000028203000002dc020000032ba30000d507000001ea010102d50700001bffffffff0001000004ed00029fd507000001f3010767000000ffffffffc500000001f401110748000000ffffffff12000000034d01170b3a000000ffffffff12000000026e04120000000000000000c40000000400000000000401e31601001c00990f0100e64b00002dfa0000ffffffff86000000025a0a000002c1e9000002bd02000002880300000371a800009ee900000267040100031580000088030000025104010000000222040000028203000002dc02000003a36100000308000001ea010102030800001bffffffff8600000007ed03000000009f0308000001f30109670000009807000001f401110748000000ffffffff14000000032b01170b3a000000ffffffff14000000026e04120000000000000000c30000000400000000000401e31601001c003e070100f24c00002dfa0000ffffffff6e000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000000222040000028203000002dc02000003f0110000ec07000001ea010102ec0700001bffffffff6e00000007ed03000000009fec07000001f3010967000000b007000001f401110648000000ffffffff0f00000003f8170b3a000000ffffffff0f000000027504120000000000000000c40000000400000000000401e31601001c008bfd0000004e00002dfa0000ffffffff8b000000025a0a000002c1e9000002bd02000002880300000371a800009ee900000267040100031580000088030000025104010000000222040000028203000002dc020000031f8200005208000001ea010102520800001bffffffff8b00000007ed03000000009f5208000001f3010967000000c807000001f401110748000000ffffffff14000000033c01170b3a000000ffffffff14000000026e04120000000000000000c30000000400000000000401e31601001c003be900000f4f00002dfa0000ffffffff5b000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000000222040000028203000002dc02000003b63600004508000001ea010102450800001bffffffff5b00000007ed03000000009f4508000001f3010967000000e007000001f401110648000000ffffffff0d00000003a5170b3a000000ffffffff0d000000027504120000000000000000c30000000400000000000401e31601001c0041df0000105000002dfa0000ffffffff61000000025a0a000002c1e9000002bd02000002880300000371a800009ee900000267040100031580000088030000025104010000000222040000028203000002dc02000003022900000d08000001ea0101020d0800001bffffffff6100000007ed03000000009f0d08000001f3010967000000f807000001f401110648000000ffffffff1100000003c5170b3a000000ffffffff11000000026e04120000000000000000c40000000400000000000401e31601001c002cd600000d5100002dfa0000ffffffffb3000000025a0a000002c1e9000002bd02000002880300000371a800009ee900000267040100031580000088030000025104010000000222040000028203000002dc0200000348b20000df07000001ea010102df0700001bffffffffb300000004ed00029fdf07000001f3010767000000ffffffff7a00000001f401110648000000ffffffff1100000003e5170b3a000000ffffffff11000000026e04120000000000000000c40000000400000000000401e31601001c0074cd0000025200002dfa0000ffffffffa7000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000000222040000028203000002dc02000003c55e0000c807000001ea010102c80700001bffffffffa700000004ed00029fc807000001f3010767000000ffffffff6c00000001f401110648000000ffffffff0d00000003b5170b3a000000ffffffff0d000000027504120000000000000000c30000000400000000000401e31601001c005fc40000fb5200002dfa0000ffffffff4f000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000000222040000028203000002dc020000034fa00000f607000001ea010102f60700001bffffffff4f00000007ed03000000009ff607000001f30109670000001008000001f401110648000000ffffffff0d0000000395170b3a000000ffffffff0d000000027504120000000000000000c30000000400000000000401e31601001c0088bb0000fb5300002dfa0000ffffffff62000000025a0a000002c1e9000002bd02000002880300000371a800009ee900000267040100031580000088030000025104010000000222040000028203000002dc02000003114400005c08000001ea0101025c0800001bffffffff6200000007ed03000000009f5c08000001f30109670000002808000001f401110648000000ffffffff1100000003d5170b3a000000ffffffff11000000026e04120000000000000000cd0000000400000000000401e31601001c00df0e0100fd5400002dfa0000ffffffff3d000000025a0a000002c1e9000002bd02000003d4600000cb06000001e501010000000222040000027f080000023207000002e2060000043e520000e2060000020c0100000335210000e206000003ea010102e20600001bffffffff3d00000007ed03000000009fe206000003f30109670000004008000003f401110c5900000060080000040b150835000000ffffffff0a000000020d0a0835000000ffffffff07000000020f1100000000000000cd0000000400000000000401e31601001c00840601000e5600002dfa0000ffffffff39000000025a0a000002e800010002bd020000037d6d0000cb06000001e601010000000222040000027f0800000232070000027009000004f921000070090000020c010000030d3d00007009000003ea010102700900001bffffffff3900000007ed03000000009f7009000003f30109670000008008000003f401110c59000000a0080000040b150835000000ffffffff0a000000020d0a0835000000ffffffff07000000020f1100000000000000c50000000400000000000401e31601001c0087de0000205700002dfa0000ffffffff140000000222040000027f080000023207000002a40800000401280000a4080000020201000003ef4f0000a408000001ea010102a40800001bffffffff1400000007ed03000000009fa408000001f3010748000000ffffffff0700000001f40111063a000000ffffffff07000000040b1508b8000000ffffffff05000000020b0b000000000000025a0a000002e800010002bd020000037d6d0000cb06000003e6010100000000c50000000400000000000401e31601001c0072d50000fb5700002dfa0000ffffffff140000000222040000027f0800000232070000024b090000046ba300004b090000020201000003886200004b09000001ea0101024b0900001bffffffff1400000007ed03000000009f4b09000001f3010748000000ffffffff0700000001f40111063a000000ffffffff07000000040b1508b8000000ffffffff05000000020b0b000000000000025a0a000002e800010002bd020000037d6d0000cb06000003e6010100000000c50000000400000000000401e31601001c00bacc0000d65800002dfa0000ffffffff140000000222040000027f080000023207000002520600000455800000520600000202010000035bb000005206000001ea010102520600001bffffffff1400000007ed03000000009f5206000001f3010748000000ffffffff0700000001f40111063a000000ffffffff07000000040b1508b8000000ffffffff05000000020b0b000000000000025a0a000002c1e9000002bd02000003d4600000cb06000003e5010100000000c50000000400000000000401e31601001c00a5c30000b05900002dfa0000ffffffff140000000222040000027f080000023207000002d302000004cc2b0000d3020000020201000003d58a0000d302000001ea010102d30200001bffffffff1400000007ed03000000009fd302000001f3010748000000ffffffff0700000001f40111063a000000ffffffff07000000040b1508b8000000ffffffff05000000020b0b000000000000025a0a000002c1e9000002bd02000003d4600000cb06000003e5010100000000a40000000400000000000401e31601001c00cddd00008a5a00002dfa0000ffffffffae0000000222040000027f08000002b10500001bffffffffae00000007ed03000000009fb105000001f3011c594a0000ffffffff9f00000001f4011112ee490000ffffffff9f000000041d0112dc490000ffffffff9f00000005030512204a0000ffffffff010000000220090e124a0000ffffffff0100000003cf041200000000000000000083000000040000000000040fe31601001c00f8070100c15b00002dfa00000222040000027f080000023207000002b90600000496a40000b90600000102010002b105000004ef1e0000b105000002020100000000025a0a000002c1e9000002bd020000029003000003e98c0000b7e9000003c804010003a69d000090030000039904010000000034000000040000000000040fe31601001c00540c01005c5c00002dfa00000222040000027f08000017ba4d0000b105000001ea0101000000c90100000400000000000401e31601001c00b8d400008b5c00002dfa0000ffffffff650000000222040000021d030000026e03000002b9f000001bffffffff6500000007ed03000000009fb9f0000001f3011d754c0000c008000001f401111e684c0000d8080000025d0915884c0000f008000002272e1eb54c0000080900000227111e184d000020090000039f311f0b4d00003809000006b30516000012c14c0000ffffffff0500000002281112384d0000ffffffff0500000003bb0d0e2b4d0000ffffffff0500000007bb051600001e954c00005009000002260d0edf4c0000ffffffff05000000033a012a0eec4c0000ffffffff01000000033a01180012cd4c0000ffffffff0d00000002272e12524d0000ffffffff0d00000003b70d0e454d0000ffffffff0d000000079d0516000013a24c0000ffffffff0100000002271113704d0000ffffffff050000000227111e954c000068090000021e0d0edf4c0000ffffffff0a000000033a012a0eec4c0000ffffffff01000000033a01180013884c0000ffffffff05000000021f1112c14c0000ffffffff06000000021f1112384d0000ffffffff0600000003bb0d0e2b4d0000ffffffff0600000007bb05160000000000000000000048010000040000000000040fe31601001c0011e500003d5e00002dfa00000222040000021d030000026e030000028705000004ee79000021b90000011b01001791370000b9f0000002ea01010002b100000003fb930000380800000333010103be970000270800000339010103d4260000f60500000330010100024301000004743b00005b050000039e01043f8400006705000003ba0104269e00009e07000003b60100022f010000034c61000032080000034d0101031d9b0000ae060000034a0101000000025a0a000002d206000002bb00000003bc4600007405000004da0301030c8800006705000004af050100025f0200000369b10000740500000559030103327600006705000005b7050103990b0000ab0700000529030103942000009e0700000599050100000205040000023d030000024800000003321500004f050000060f01010000000000210100000400000000000401e31601001c0000cc0000415f00002dfa0000ffffffff730000000222040000028203000002bf05000002d9fa00001bffffffff7300000007ed03000000009fd9fa000001f3011dc64f00008009000001f401111eba4f00009809000005780912a84f0000ffffffff0d000000052c1112e74e0000ffffffff0d000000067c160ed94e0000ffffffff0d00000002750412000013054f0000ffffffff09000000052e1113484f0000ffffffff0100000005320813174f0000ffffffff07000000053708132a4f0000ffffffff0b000000054008135b4f0000ffffffff0100000005400813684f0000ffffffff05000000054c0f13754f0000ffffffff0500000005410c20884f0000ffffffff07000000050000000000000000002c010000040000000000040fe31601001c00dbee0000326100002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f0000880300000146040100000205040000023d030000022a020000049a8c0000f80a000005ab0100029c01000003511a00004f050000050f010100029d00000004a0190000f80a000005ab0100000002bf0500000234040000027202000003ce7000004103000006f305010002e401000003c8a20000740a000006f10501038a6700004103000006f3050103ec7e00003a03000006ed0501000293020000039c570000ae05000006990501000000000222040000028203000002bd02000004276d000043050000027b010002bf05000004d39e000050b9000003220117fb1b0000d9fa000004ea010100000000130100000400000000000401e31601001c00ebc20000686200002dfa0000ffffffff080100000222040000027f080000020d0300001bffffffff0801000007ed03000000009f0d03000003f3011d80510000b009000003f401111e72510000c8090000041d01122e510000ffffffff100000000225190e20510000ffffffff10000000016e041200122e510000ffffffff0500000002421a0e20510000ffffffff05000000016e041200124e510000ffffffff01000000024d090e40510000ffffffff0100000001cf041200122e510000ffffffff0700000002660c0e20510000ffffffff07000000016e041200124e510000ffffffff010000000268090e40510000ffffffff0100000001cf041200000000000000009e000000040000000000040fe31601001c00540c0100016400002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000000222040000027f0800000232070000020d03000004359000000d030000022201000017863000000d03000003ea0101000000ca0100000400000000000401e31601001c0014ba00009f6400002dfa0000ffffffff450000000222040000021d030000026e0300000210f100001bffffffff4500000007ed03000000009f10f1000001f3011d9d530000e009000001f401111e90530000f809000002520913b0530000ffffffff02000000020f4012dd530000ffffffff03000000020f401241540000ffffffff0300000003b70d0e34540000ffffffff0300000006920516000013bd530000ffffffff07000000020e11134e540000ffffffff03000000020f2b12e9530000ffffffff01000000020f111268540000ffffffff01000000039f310e5b540000ffffffff0100000006b3051600001386540000ffffffff01000000020f111eca530000100a0000020d0d0efb530000ffffffff04000000033a012a0e08540000ffffffff01000000033a01180012dd530000ffffffff05000000020e111241540000ffffffff0500000003b70d0e34540000ffffffff0500000006920516000013bd530000ffffffff0300000002090d12dd530000ffffffff0300000002090d1241540000ffffffff0300000003b70d0e34540000ffffffff030000000692051600001315540000ffffffff0400000002090d000000000000000036010000040000000000040fe31601001c0011e50000396600002dfa00000222040000021d030000026e03000002b907000004fb1f00003cb70000010501001700af000010f1000002ea010100028901000003b263000038080000033301010394800000f605000003300101033a20000027080000033901010002f900000004462e00009e07000003b6010496aa00005b050000039e01000202020000032527000032080000034d010103d9a40000ae060000034a0101032527000032080000034d0101000000025a0a000002d20600000271000000033c490000ab07000004aa030103788300009e070000048e050103c73c0000690b000004cd0401037d5200007405000004da030103dc1300006705000004af050100000205040000023d030000029c01000003511a00004f050000050f01010000000000350100000400000000000401e31601001c00291601002c6700002dfa0000ffffffffd10100000222040000027f08000002d4fa00001bffffffffd101000007ed03000000009fd4fa000003f3011dbf560000280a000003f401111e86560000500a0000051d011211560000ffffffff190000000224190e03560000ffffffff19000000016e0412001211560000ffffffff050000000241100e03560000ffffffff05000000016e0412001231560000ffffffff0a000000024e090e23560000ffffffff0a00000001cf0412001211560000ffffffff07000000025b0d0e03560000ffffffff07000000016e0412001231560000ffffffff0c000000025d0a0e23560000ffffffff0c00000001cf0412001262560000ffffffff0100000002640b0e4f560000ffffffff0100000006f502090000000000000000c2000000040000000000040fe31601001c003b130100bd6900002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000020503000002d206000002150000000472810000dd060000033401000002d1010000031410000053b8000004f402010000000222040000027f080000023207000002d4fa0000046b4e0000d4fa0000022101000000000034000000040000000000040fe31601001c00540c0100a76a00002dfa00000222040000027f0800001746460000d4fa000001ea0101000000d30000000400000000000401e31601001c000e0d0100d66a00002dfa0000ffffffff370000000222040000021d03000002520b000002f90500001bffffffff3700000007ed03000000009ff905000002f3011d72580000780a000002f401111e65580000980a0000034e091e53580000b80a0000032b131e41580000d00a0000031c1d1e1e580000e80a000003051b15d3570000000b000005c30d00122a580000ffffffff0700000003061213e0570000ffffffff0700000005ab0d00000013fe570000ffffffff0f000000032c270000000000000000d9000000040000000000040fe31601001c00830a0100046c00002dfa0000025a0a000002d2060000023f00000003ef940000110b000001f0050103b9440000210b000001a40401000002bf0500000234040000026b01000003b76900003a03000005ed0501000000000222040000021d03000002710000000442190000110b000002c2010449130000210b000002aa010002520b000002860b000004140e000051b600000304010002870b000004731b000052b60000031b0100021b060000044016000021b60000032a010017de2e0000f905000004ea0101000000002b0100000400000000000401e31601001c008e040100f46c00002dfa0000ffffffffcf0400000222040000027f080000026b0900001bffffffffcf04000004ed00019f6b09000001f3011c745a0000ffffffffa204000001f4011112e4590000ffffffffa2040000071d0112285a0000ffffffff0f0000000221140e1a5a0000ffffffff0f00000003750412001eb65a0000180b0000024c1212e85a0000ffffffff01000000043d0d0eda5a0000ffffffff0100000003d10412000015f6590000300b0000024d0513f6590000ffffffff6700000002421413f6590000ffffffff6800000002401413f6590000ffffffff6700000002391413f6590000ffffffff6800000002371413f6590000ffffffff67000000023110133c5a0000ffffffff060000000803120000000000000096000000040000000000040fe31601001c00ffcf00001d7100002dfa00000222040000027f0800000232070000026b09000004095f00006b090000011c0100026909000004954a00006909000003170100000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000023a05000003ad0f000062b900000425060100000034000000040000000000040fe31601001c00540c0100067200002dfa00000222040000027f08000017bc6d00006b09000001ea010100000071000000040000000000040fe31601001c00fcbc0000357200002dfa00000222040000027f080000023207000002140a000004647a0000140a000001230100000000025a0a000002e800010002bd020000029003000003940e0000de00010002ca04010003134a00009003000002a00401000000008e0100000400000000000401e31601001c00d0f90000c77200002dfa0000fffffffff40100000222040000021d030000028c0700000285e600001bfffffffff401000004ed00069f85e6000001f3011cc45c0000ffffffffb401000001f4011112b85c0000ffffffffac010000027e1812d65c0000ffffffff1901000002501c13e95c0000ffffffff0300000002231015e95c0000480b000002232512fb5c0000ffffffff2c00000002252013385d0000ffffffff2c00000003af0d001e195d0000600b0000022d1e1f455d0000800b000003540122001e195d0000a00b0000022e1e1f455d0000c00b0000035401220012075d0000ffffffff06000000022f2013525d0000ffffffff0600000003c30d001e195d0000e00b000002271e1f455d0000000c000003540122001e195d0000200c000002281e1f455d0000400c0000035401220012075d0000ffffffff0600000002292013525d0000ffffffff0600000003c30d0012195d0000ffffffff2500000002331e0e455d0000ffffffff250000000354012200000000000000000000d4000000040000000000040fe31601001c006f150100497400002dfa00000222040000021d030000028c070000046011000046070000013e01177b89000085e6000002ea010102f305000004d65d000016b600000122010000027100000004f2ac0000c905000003a2010002a8020000043aa400008307000003ae010432990000110b000003c2010002bd010000030a3500003c07000003530101000000025a0a000002d206000002a802000003744800008307000004e4040103744800008307000004e4040103dd6c0000110b000004f0050100000000fb0000000400000000000401e31601001c0095ef0000eb7400002dfa0000ffffffff7e0100000222040000027f08000002120300001bffffffff7e01000007ed03000000009f1203000003f3011d2b5f0000600c000003f401111ee65e0000880c0000051d0112a25e0000ffffffff130000000219150e945e0000ffffffff13000000016e04120012c25e0000ffffffff0b000000022d090eb45e0000ffffffff0b00000001cf04120015f25e0000b00c000002471413f25e0000ffffffff46000000024814136d5f0000ffffffff0100000002490912a25e0000ffffffff10000000021a150e945e0000ffffffff10000000016e041200000000000000009d000000040000000000040fe31601001c00eac60000c37600002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000000222040000027f0800000232070000021203000004473c00001203000002150104e89d0000ab050000020701000000000034000000040000000000040fe31601001c00540c0100517700002dfa00000222040000027f08000017af3f00001203000001ea01010000003f000000040000000000040fe31601001c00c7e70000807700002dfa00000222040000027f08000002320700000200030000049e1a0000000300000152010000000000cf0000000400000000000401e31601001c00cbe50000be7700002dfa0000ffffffff0f0100000222040000027f08000002880900001bffffffff0f01000007ed03000000009f8809000003f3011de3600000c80c000003f401111ed5600000e80c0000041d011291600000ffffffff17000000021c140e83600000ffffffff1700000001750412001291600000ffffffff0a000000022a100e83600000ffffffff0a000000017504120012b1600000ffffffff060000000235090ea3600000ffffffff0600000001d1041200000000000000009e000000040000000000040fe31601001c00540c0100647900002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a004010000000222040000027f0800000232070000028809000004f1470000880900000219010000177d6300008809000003ea0101000000e20000000400000000000401e31601001c00b6dc0000027a00002dfa0000ffffffffcf0000000222040000028203000002dc02000002a30900001bffffffffcf00000004ed00029fa309000001f3011d5e620000080d000001f401111213620000ffffffff20000000038d390e06620000ffffffff2000000005f10513001ed9620000200d0000038d18139c620000ffffffff12000000033f1312b5620000ffffffff1e0000000340130ea8620000ffffffff1e000000069205160000123f620000ffffffff01000000038d090e31620000ffffffff0100000004cf0412000000000000000092000000040000000000040fe31601001c0013be0000327b00002dfa0000025a0a000002d2060000029301000003381c00001205000001d6050103b41b00001f05000001f00501000002c1e9000002bd020000029003000003e98c0000b7e9000003c804010003a69d000090030000039904010000000222040000028203000002dc0200001793a00000a309000002ea01010000000077000000040000000000040fe31601001c00cdbe0000c17b00002dfa0000025a0a000002d206000002a802000004b12100000904000001940103301f0000ab07000001aa030103e19900009e070000018e05010000000222040000028203000002dc020000027b03000004c55a00009a030000023e0100000000007d0000000400000000000401e31601001c00a1d300004b7c00002dfa0000ffffffffd90000000222040000022e0700000212c200001bffffffffd900000007ed03000000009f12c20000030d021c9f630000ffffffffd8000000030e02111293630000ffffffffd800000001940915c2630000380d0000014d4b0000000000000065000000040000000000040fe31601001c00f2ef0000897d00002dfa00000222040000022e070000049e86000062b7000001480117e9ad000012c20000020502010000025a0a0000023a050000023405000002bd02000003819e000059b7000003ab03010000000000cb0000000400000000000401e31601001c00e9ca00001f7e00002dfa0000ffffffff200100000222040000027f080000023e0900001bffffffff2001000007ed03000000009f3e09000005f3011d4c650000600d000005f401111e07650000880d0000061d0112e3640000ffffffff18000000022a100ed5640000ffffffff180000000175041200138e650000ffffffff0300000002401313d1650000ffffffff1900000002410d1313650000ffffffff1e0000000242201313650000ffffffff1e000000023c18000000000000007d000000040000000000040fe31601001c0017f50000e97f00002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f000088030000014604010000000222040000027f0800000232070000023e09000004537c00003e0900000227010451910000a9050000021b01000000000034000000040000000000040fe31601001c00540c0100778000002dfa00000222040000027f080000171b6a00003e09000001ea01010000003f000000040000000000040fe31601001c006ee50000a68000002dfa00000222040000027f0800000232070000022309000004016300002309000001050100000000003f000000040000000000040fe31601001c00c7e70000e58000002dfa00000222040000027f08000002320700000200030000049e1a00000003000001520100000000005f0000000400000000000401e31601001c0058c10000238100002dfa0000ffffffff0a0000000222040000027f08000002930800001bffffffff0a00000007ed03000000009f9308000002f3010e6d660000ffffffff0900000002f40111000000000034000000040000000000040fe31601001c00540c0100778100002dfa00000222040000027f08000017756f00009308000001ea0101000000d60000000400000000000401e31601001c0012150100a68100002dfa0000ffffffff180000000222040000027f080000029c0900001bffffffff1800000007ed03000000009f9c09000005f3011c26680000ffffffff1700000005f4011112ed670000ffffffff17000000061d0112db670000ffffffff130000000307101297670000ffffffff0a0000000208100e89670000ffffffff0a000000017504120012b7670000ffffffff01000000020b050ea9670000ffffffff0100000001d1041200001368680000ffffffff0100000003070500000000000000a3000000040000000000040fe31601001c0081e80000ab8200002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a004010000000222040000027f0800000232070000025109000004857000005109000002060100029c09000004289a00009c090000030601000000000034000000040000000000040fe31601001c00540c01004a8300002dfa00000222040000027f080000172d7a00009c09000001ea01010000003f000000040000000000040fe31601001c00cfd50000798300002dfa00000222040000027f080000023207000002f109000004639c0000f10900000104010000000000cd0000000400000000000401e31601001c0077030100b98300002dfa0000ffffffff230200000222040000027f08000002e60a00001bffffffff2302000007ed03000000009fe60a000003f3011d206a0000b00d000003f401111ee7690000e00d0000051d01128a690000ffffffff100000000205150e7c690000ffffffff10000000016e04120013c3690000ffffffff0d00000002301113c3690000ffffffff0b000000023a0d12aa690000ffffffff01000000024f050e9c690000ffffffff0100000001cf04120000000000000000aa000000040000000000040fe31601001c0045f70000168600002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d00009003000001990401000002d2060000023f0000000351980000690b000003cd04010000000222040000027f080000023207000002e60a00000470420000e60a0000020401000000000034000000040000000000040fe31601001c00540c0100b58600002dfa00000222040000027f0800001751300000e60a000001ea01010000006b0000000400000000000401e31601001c00b9f80000e48600002dfa0000ffffffff730000000222040000021d03000002e602000002bfe600001bffffffff7300000004ed00039fbfe6000001f3011d0a6b0000100e000001f4011115cc6a0000280e0000037501000000000000003a000000040000000000040fe31601001c00e6d60000818700002dfa00000222040000021d03000002e102000017e8330000b2e6000001eb0101000000003a000000040000000000040fe31601001c009ec00000b08700002dfa00000222040000021d03000002e602000017f1140000bfe6000001eb010100000000cd0000000400000000000401e31601001c007eee0000df8700002dfa0000ffffffffe20100000222040000027f08000002960900001bffffffffe201000007ed03000000009f9609000003f3011dc26c0000400e000003f401111e896c0000700e0000051d01122c6c0000ffffffff0e0000000206150e1e6c0000ffffffff0e000000017504120013656c0000ffffffff0d00000002361113656c0000ffffffff0b00000002420d124c6c0000ffffffff010000000258050e3e6c0000ffffffff0100000001d104120000000000000000aa000000040000000000040fe31601001c00e3e200002b8a00002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a00401000002d2060000027100000003c73c0000690b000003cd04010000000222040000027f08000002320700000296090000040074000096090000020501000000000034000000040000000000040fe31601001c00540c0100cb8a00002dfa00000222040000027f080000174d4d00009609000001ea0101000000850100000400000000000401e31601001c00b4e40000fa8a00002dfa0000ffffffffd60300000222040000027f08000002c70600001bffffffffd603000004ed00019fc706000001f3011c636f0000ffffffffa903000001f40111120c6f0000ffffffffa9030000061d0112a86e0000ffffffff11000000032e0f0e8d6e0000ffffffff11000000026e0412001e1e6f0000a00e000003450512b56e0000ffffffff10000000043f0f0e9a6e0000ffffffff10000000026e041200122a6f0000ffffffff0d00000004630e12b56e0000ffffffff0b0000000468140e9a6e0000ffffffff0b000000026e04120012d56e0000ffffffff010000000468050ec76e0000ffffffff0100000002cf04120000122a6f0000ffffffff0d00000004600e12b56e0000ffffffff0b0000000468140e9a6e0000ffffffff0b000000026e04120012d56e0000ffffffff010000000468050ec76e0000ffffffff0100000002cf0412000000151e6f0000c00e0000033b1013e96e0000ffffffff0800000007031200000000000000dc000000040000000000040fe31601001c0016d100006b8e00002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010371a800009ee9000001670401000315800000880300000151040103158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000023a05000003c14700000eb800000425060100000222040000027f080000023207000002c706000004156b0000c7060000022b010002c506000004c02c0000c5060000033e0104701700009c0a0000036701000000000034000000040000000000040fe31601001c00540c0100528f00002dfa00000222040000027f08000017a96f0000c706000001ea0101000000fa0500000400000000000401e31601001c008ad20000818f00002dfa0000ffffffff4c02000002220400000282030000028c0700000236f100001bffffffff4c02000007ed03000000009f36f1000008f3011d11790000d80e000008f401111e05790000380f000004bf0912e7780000ffffffff0f00000004201112b1750000ffffffff0f000000067c160ea3750000ffffffff0f00000001750412000013ef750000ffffffff0300000004271d137b770000ffffffff05000000042b0813ef750000ffffffff09000000042e151388770000ffffffff0100000004320c1388770000ffffffff0100000004360c13a8770000ffffffff01000000043a0c13a8770000ffffffff0100000004440c1395770000ffffffff03000000045b0c12a07a0000ffffffff12000000045c2b13367a0000ffffffff0300000006a01613627a0000ffffffff0b00000006a31a13427a0000ffffffff0100000006a116001395770000ffffffff0300000004610c1ea07a0000980f000004622b13367a0000ffffffff0500000006a01613427a0000ffffffff0100000006a1160021f3780000ffffffff03000000040012d1750000ffffffff030000000695110ec3750000ffffffff0300000001d104120000134d760000ffffffff0400000004472512f3780000ffffffff0100000004471812d1750000ffffffff010000000695110ec3750000ffffffff0100000001d104120000134d760000ffffffff04000000043d2512f3780000ffffffff01000000043d1812d1750000ffffffff010000000695110ec3750000ffffffff0100000001d104120000134d760000ffffffff0100000004332112f3780000ffffffff0100000004331412d1750000ffffffff010000000695110ec3750000ffffffff0100000001d104120000134d760000ffffffff0100000004372112f3780000ffffffff0100000004371412d1750000ffffffff010000000695110ec3750000ffffffff0100000001d1041200001327760000ffffffff080000000474141e6e790000b00f000004732f0e61790000ffffffff08000000075401330e61790000ffffffff010000000754011a0e0f780000ffffffff010000000754012200133a760000ffffffff01000000046b051e8e790000c80f000004732f0e81790000ffffffff050000000737011b0e9b790000ffffffff090000000737012600132f780000ffffffff05000000047a0a132f780000ffffffff09000000047b0a13ef750000ffffffff03000000047f08134d760000ffffffff0d0000000482181360760000ffffffff08000000048309132f780000ffffffff0300000004802d1327760000ffffffff0800000004a7191373760000ffffffff0100000004a609133a760000ffffffff0500000004a70912ae790000ffffffff070000000492151369780000ffffffff0700000007b30d00154d760000e00f0000049b1b1314760000ffffffff05000000049b3c1386760000ffffffff09000000049c0d12f3780000ffffffff0300000004941412d1750000ffffffff030000000695110ec3750000ffffffff0300000001d104120000134d760000ffffffff0100000004881d12f3780000ffffffff0100000004881012d1750000ffffffff010000000695110ec3750000ffffffff0100000001d104120000133a760000ffffffff1100000004ab051388770000ffffffff0100000004b0081349770000ffffffff0100000004b1091ef37800000010000004b8051ed1750000181000000695111fc37500003010000001d10412000013a8770000ffffffff0100000004b40813ef750000ffffffff0100000004b5191349770000ffffffff0300000004b509133c780000ffffffff05000000047c0a13ef750000ffffffff0300000004261d1301760000ffffffff0b00000004241813ef750000ffffffff070000000424181314760000ffffffff0400000004231613ef750000ffffffff230000000423161314760000ffffffff0400000004221613ef750000ffffffff0600000004221612e7780000ffffffff0a000000041f1112b1750000ffffffff0a000000067c160ea3750000ffffffff0a000000017504120000000000000000000094040000040000000000040fe31601001c0013dd00005f9400002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a0040100000205040000023d030000022a020000049a8c0000f80a000005ab0100022401000003c732000048050000057301010002a6010000038554000088050000054b020100027a00000003ad6b0000ba07000005d5010100020201000003e3530000600600000516030100029c01000003511a00004f050000050f0101000291000000032370000083060000059b03010002290000000394ab00008e06000005cf02010002b101000003232a00006d06000005ed03010002f801000004266f0000f80a000005ab010002da0000000386240000480500000573010100023e02000003ba25000088050000054b020100021901000003b8870000ba07000005d501010002ce000000032a340000600600000516030100024c01000003d03700004f050000050f0101000253020000031755000083060000059b030100027c020000030c4c00008e06000005cf0201000285000000035b1800006d06000005ed0301000002690800000200000000030f8a00009c0600000af702010002b202000003754b00009c0600000af7020100000002bf05000002340400000272020000032c5a0000740a000006f1050103ce7000004103000006f3050103435300003a03000006ed050100027f0100000347230000ae050000069905010002ee0100000352660000740a000006f1050103393a00004103000006f30501033b8600003a03000006ed050100022f01000003173e0000ae0500000699050103036400005f0a0000069b050100000002d2060000023f00000003bc3e00008307000008e404010351980000690b000008cd040100020c02000003976c0000210b000009a8040103dd6f0000690b000009d0040103976c0000210b000009a8040103dd6f0000690b000009d0040100027100000003c73c0000690b000008cd04010002a802000003744800008307000008e40401000002c1e9000002bd02000002880300000371a800009ee900000b670401000315800000880300000b510401029003000003e98c0000b7e900000bc804010003a69d0000900300000b9904010000000222040000028203000002bd02000004276d000043050000027b010447ad00003e05000002940100028c07000004ee78000059b9000003040117e7b3000036f1000004ea010104f164000005b8000003040117f98e00005af1000004ea010100025f02000004b94c000043050000027b0104ff8d00003e0500000294010000021d030000020202000003c8af0000b306000007470101031b5b00003c070000075301010002890100000394800000f60500000730010103468c00002c0800000736010103b263000038080000073301010002f90000000437a20000690b000007b2010002bd010000030a3500003c0700000753010100021f020000030e170000fb0200000774010100029d0200000323510000fb02000007740101000271000000044c940000690b000007b20100000000b5000000040000000000040fe31601001c0046f30000e09500002dfa0000025a0a000002d20600000271000000046a2100000904000001940103c73c0000690b000001cd040103c73c0000690b000001cd040100020c02000003dd6f0000690b000003d0040103dd6f0000690b000003d0040100023f000000045b330000090400000194010000000222040000028203000002bd02000016e53f0000390a0000029e0100025f020000160f2b0000390a0000029e01000000009e0100000400000000000401e31601001c00d2c900007a9600002dfa0000ffffffff520000000222040000021d030000026e03000002c3f000001bffffffff5200000007ed03000000009fc3f0000001f3011da37c00004810000001f401111e967c000060100000024b0913b67c0000ffffffff05000000020f401ee37c000078100000020e111e477d00009010000003b70d1f3a7d0000a810000006920516000012e37c0000ffffffff09000000020f4012477d0000ffffffff0900000003b70d0e3a7d0000ffffffff0900000006920516000013c37c0000ffffffff03000000020e1112ef7c0000ffffffff07000000020f1112617d0000ffffffff07000000039f310e547d0000ffffffff0700000006b305160000137f7d0000ffffffff03000000020f111ed07c0000c0100000020d0d0e017d0000ffffffff01000000033a012a0e0e7d0000ffffffff01000000033a01180012e37c0000ffffffff0400000002090d12477d0000ffffffff0400000003b70d0e3a7d0000ffffffff04000000069205160000131b7d0000ffffffff0100000002090d000000000000000029010000040000000000040fe31601001c0011e500000c9800002dfa00000222040000021d030000026e03000002b9070000045260000087b800000105010017cfa50000c3f0000002ea01010002c70100000397310000380800000333010103ff440000f6050000033001010397980000270800000339010100029301000004aa4e00009e07000003b60104c67200005b050000039e0100023402000003017e000032080000034d0101035b390000ae060000034a010103017e000032080000034d0101000000025a0a000002d206000002bb000000038cb20000ab07000004aa030103fc1800009e070000048e050103bc4600007405000004da0301030c8800006705000004af050100000205040000023d03000002da010000037a2a00004f050000050f01010000000000cf0000000400000000000401e31601001c0041c00000ff9800002dfa0000ffffffffb20000000222040000027f08000002b50800001bffffffffb200000007ed03000000009fb508000003f3011df67e0000d810000003f401111ee87e0000f0100000041d0112a47e0000ffffffff140000000222190e967e0000ffffffff14000000017504120012a47e0000ffffffff0900000002301a0e967e0000ffffffff09000000017504120012c47e0000ffffffff01000000023e090eb67e0000ffffffff0100000001d1041200000000000000009e000000040000000000040fe31601001c00540c01006f9a00002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a004010000000222040000027f080000023207000002b508000004b5900000b5080000021d010000175a770000b508000003ea0101000000530100000400000000000401e31601001c00f51301000e9b00002dfa0000ffffffff460000000222040000021d03000002520b000002310600001bffffffff4600000007ed03000000009f3106000002f3011d5f8100000811000002f401111e52810000281100000456091e40810000481100000438131e2281000060110000041f1d1e16810000781100000411091ef38000009011000004051b158a800000a811000006c30d0012ff800000ffffffff010000000406121397800000ffffffff0100000006ab0d000013b5800000ffffffff01000000041014122e810000ffffffff0700000004101412ff800000ffffffff03000000040d1e1397800000ffffffff0300000006ab0d0012f3800000ffffffff03000000040b1b138a800000ffffffff0300000006c30d0000000013d3800000ffffffff0100000004390f13d3800000ffffffff1000000004392700000000000000000f010000040000000000040fe31601001c00830a0100b19c00002dfa0000025a0a000002d2060000023f00000003ef940000110b000001f0050103b9440000210b000001a4040100000205040000023d03000002bb0000000476a9000018030000053d0100000002bf050000023404000002c400000003ff9b00003a03000006ed0501000000000222040000021d03000002710000000442190000110b000002c2010449130000210b000002aa010002520b000002860b000004140e000051b600000304010485af00005cb60000030f01045b96000042b60000030a010002870b000004334300009cb60000031e0100024206000004554a00007db600000337010017b92700003106000004ea010100000000620000000400000000000401e31601001c003d0b0100f09d00002dfa0000ffffffff4b0000000222040000021d03000002e1020000024ff000001bffffffff4b00000004ed00059f4ff0000001f3010e03820000ffffffff2100000001f401110000000000003a000000040000000000040fe31601001c00e6d60000559e00002dfa00000222040000021d03000002e102000017893200004ff0000001eb010100000000ba0000000400000000000401e31601001c0060020100849e00002dfa0000ffffffff1d0100000222040000027f080000028e0800001bffffffff1d01000004ed00019f8e08000001f3011da2830000c011000001f401111e69830000d8110000051d011212830000ffffffff0500000003130a0e04830000ffffffff0500000002cf0412001346830000ffffffff080000000603121232830000ffffffff16000000030a170e24830000ffffffff16000000026e04120000000000000000a4000000040000000000040fe31601001c00b5e0000051a000002dfa0000025a0a000002c1e9000002bd020000029003000003e98c0000b7e9000001c804010003a69d0000900300000199040102880300000371a800009ee900000167040100031580000088030000015104010000023a05000003ad0f000062b900000325060100000222040000027f0800000232070000028e08000004462900008e080000020801000000000034000000040000000000040fe31601001c00540c01002da100002dfa00000222040000027f08000017184100008e08000001ea0101000000c70000000400000000000401e31601001c00fff700005ca100002dfa0000ffffffff630000000222040000028203000002dc02000002ef0800001bffffffff6300000007ed03000000009fef08000004f3011c0b850000ffffffff6200000004f401111eaf840000f0110000016f1813ce840000ffffffff05000000010c13001237850000ffffffff07000000016f380e2a850000ffffffff0700000005f10513001263850000ffffffff01000000016f090e55850000ffffffff0100000003d1041200000000000000005d000000040000000000040fe31601001c00cdbe000069a200002dfa00000222040000028203000002dc020000027b03000004b5760000ec03000001080100000000025a0a000002d20600000271000000046a210000090400000294010000000092000000040000000000040fe31601001c0013be0000f3a200002dfa00000222040000028203000002dc02000017af420000ef08000001ea0101000000025a0a000002d2060000020c020000031d3800001205000002d6050103785600001f05000002f00501000002e800010002bd020000029003000003940e0000de00010003ca04010003134a00009003000003a00401000000007d0000000400000000000401e31601001c0067ed000082a300002dfa0000ffffffffd90000000222040000022e07000002eee600001bffffffffd900000007ed03000000009feee60000030d021c29860000ffffffffd8000000030e0211121d860000ffffffffd8000000019009154c86000008120000014d4b0000000000000065000000040000000000040fe31601001c00f2ef0000c0a400002dfa00000222040000022e07000004875f00009ab800000148011753a70000eee60000020502010000025a0a0000023a050000023405000002bd020000038226000091b8000003ab03010000000000ba0000000400000000000401e31601001c009de3000056a500002dfa0000fffffffff50000000222040000027f08000002820900001bfffffffff500000004ed00019f8209000001f3011dec8700003012000001f401111eb387000048120000051d01125c870000ffffffff050000000309090e4e870000ffffffff0500000002d10412001390870000ffffffff08000000060312127c870000ffffffff110000000306140e6e870000ffffffff11000000027504120000000000000000a4000000040000000000040fe31601001c00d3c500001ca700002dfa0000025a0a000002e800010002bd020000029003000003940e0000de00010001ca04010003134a00009003000001a00401028803000003e3750000d0000100016e04010003262f000088030000014604010000023a05000003ad0f000062b900000325060100000222040000027f0800000232070000028209000004ad50000082090000020401000000000034000000040000000000040fe31601001c00540c0100f9a700002dfa00000222040000027f08000017019200008209000001ea0101000000000100000400000000000401e31601001c0088da000028a800002dfa0000ffffffff500300000222040000027f080000024e0600001bffffffff5003000004ed00019f4e06000001f3011cd4890000ffffffff2b03000001f401111277890000ffffffff2b030000071d011240890000ffffffff0900000003300f0e32890000ffffffff09000000026e0412001389890000ffffffff85000000034c0f139b890000ffffffff7700000003490e1389890000ffffffff89000000034a0e139b890000ffffffff73000000034b0f139b890000ffffffff62000000033e101354890000ffffffff080000000803121354890000ffffffff0600000008031200000000000000a8000000040000000000040fe31601001c0001c800004fab00002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee900000167040100031580000088030000015104010000023a05000003c14700000eb800000525060100000222040000027f0800000232070000024e06000004543700004e060000022c0100021c04000004973500001c04000003370100024c060000042d0f00004c060000042f01000000000034000000040000000000040fe31601001c00540c010042ac00002dfa00000222040000027f08000017a18a00004e06000001ea0101000000bd0000000400000000000401e31601001c0073d1000071ac00002dfa0000ffffffffa10000000222040000027f080000027c0900001bffffffffa100000007ed03000000009f7c09000001f3011d628b00006012000001f401111ed78a000080120000051d0112098b0000ffffffff05000000020d100efb8a0000ffffffff0500000003d104120013a48b0000ffffffff13000000021d0e12298b0000ffffffff0b0000000207140e1b8b0000ffffffff0b00000003750412000000000000000091000000040000000000040fe31601001c0045fe0000d3ad00002dfa00000222040000027f0800000232070000027c09000004d04300007c09000001050100000000025a0a000002e800010002bd020000029003000003940e0000de00010002ca04010003134a00009003000002a00401028803000003e3750000d0000100026e04010003262f000088030000024604010000000034000000040000000000040fe31601001c00540c010061ae00002dfa00000222040000027f08000017a56500007c09000001ea01010000003f000000040000000000040fe31601001c00250e010090ae00002dfa00000222040000027f0800000232070000020b0a000004f75100000b0a000001080100000000000d0100000400000000000401e31601001c00bbc80000d2ae00002dfa0000ffffffff390000000222040000028203000002bf0500000233fb00001bffffffff3900000007ed03000000009f33fb000005f3011c808d0000ffffffff3800000005f4011112748d0000ffffffff3800000004970912628d0000ffffffff0f000000045d1112068d0000ffffffff0f000000067c160ef88c0000ffffffff0f000000016e0412000013248d0000ffffffff0c000000045f1113428d0000ffffffff0100000004620513248d0000ffffffff0c00000004601112628d0000ffffffff0e000000045e1112068d0000ffffffff0e000000067c160ef88c0000ffffffff0e000000016e041200000000000000000000c7000000040000000000040fe31601001c00dbee00004bb000002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee9000001670401000315800000880300000151040100000205040000023d03000002f801000004266f0000f80a000005ab0100000002bf050000023404000002ee01000003393a00004103000006f305010000000002220400000282030000025f02000004b94c000043050000027b010002bf050000044263000021b80000035501178b12000033fb000004ea010100000000210100000400000000000401e31601001c0087bf000081b100002dfa0000ffffffff730000000222040000028203000002bf05000002f8fa00001bffffffff7300000007ed03000000009ff8fa000001f3011dd58f0000a012000001f401111ec98f0000b8120000056d0912b78f0000ffffffff0d000000052c1112f68e0000ffffffff0d000000067c160ee88e0000ffffffff0d00000002750412000013148f0000ffffffff09000000052e1113578f0000ffffffff0100000005320813268f0000ffffffff0700000005370813398f0000ffffffff0b000000054008136a8f0000ffffffff0100000005400813778f0000ffffffff05000000054c0f13848f0000ffffffff0500000005410c20978f0000ffffffff07000000050000000000000000002c010000040000000000040fe31601001c00dbee000072b300002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f0000880300000146040100000205040000023d030000022a020000049a8c0000f80a000005ab0100029c01000003511a00004f050000050f010100029d00000004a0190000f80a000005ab0100000002bf0500000234040000027202000003ce7000004103000006f305010002e401000003c8a20000740a000006f10501038a6700004103000006f3050103ec7e00003a03000006ed0501000293020000039c570000ae05000006990501000000000222040000028203000002bd02000004276d000043050000027b010002bf05000004d39e000050b9000003220117054f0000f8fa000004ea0101000000005f0000000400000000000401e31601001c00de120100a8b400002dfa0000ffffffff0a0000000222040000027f08000002630900001bffffffff0a00000007ed03000000009f6309000002f3010e71900000ffffffff0900000002f40111000000000034000000040000000000040fe31601001c00540c0100fcb400002dfa00000222040000027f08000017033a00006309000001ea0101000000700000000400000000000401e31601001c00490101002bb500002dfa0000ffffffff0c0000000222040000027f08000002f80900001bffffffff0c00000007ed03000000009ff809000002f3011c60910000ffffffff0b00000002f401111327910000ffffffff0b000000031d010000000000003f000000040000000000040fe31601001c0017fc0000a5b500002dfa00000222040000027f080000023207000002f809000004264e0000f8090000010401000000000034000000040000000000040fe31601001c00540c0100e6b500002dfa00000222040000027f08000017a4130000f809000001ea0101000000e00000000400000000000401e31601001c00e8f6000015b600002dfa0000ffffffffb20300000222040000027f080000021e0400001bffffffffb203000004ed00019f1e04000001f3011c15930000ffffffff8903000001f4011112b8920000ffffffff89030000061d011294920000ffffffff13000000032e0f0e86920000ffffffff13000000026e04120013dc920000ffffffff7700000003470e13ca920000ffffffff8900000003440e13dc920000ffffffff7300000003450f13ca920000ffffffff8500000003460f13ca920000ffffffff900000000339100000000000000095000000040000000000040fe31601001c00a6010100dcb800002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee900000167040100031580000088030000015104010000000222040000027f0800000232070000021e04000004c52800001e040000022d0100021c04000004973500001c04000003370100024c060000042d0f00004c060000042f01000000000034000000040000000000040fe31601001c00540c010080b900002dfa00000222040000027f08000017be8300001e04000001ea0101000000c70000000400000000000401e31601001c0050ec0000afb900002dfa0000ffffffff4a0000000222040000028203000002dc02000002bd0900001bffffffff4a00000007ed03000000009fbd09000004f3011c7e940000ffffffff4900000004f401111e22940000d01200000175181341940000ffffffff030000000118130012aa940000ffffffff070000000175380e9d940000ffffffff0700000005f105130012d6940000ffffffff010000000175090ec8940000ffffffff0100000003cf041200000000000000005d000000040000000000040fe31601001c00cdbe0000baba00002dfa00000222040000028203000002dc020000027b03000004bf920000bb03000001140100000000025a0a000002d20600000271000000046a210000090400000294010000000092000000040000000000040fe31601001c0013be000044bb00002dfa00000222040000028203000002dc020000177b970000bd09000001ea0101000000025a0a000002d2060000020c020000031d3800001205000002d6050103785600001f05000002f00501000002c1e9000002bd020000029003000003e98c0000b7e9000003c804010003a69d0000900300000399040100000000990000000400000000000401e31601001c0086e20000d3bb00002dfa0000ffffffff720100000222040000022e07000002a00501001bffffffff7201000007ed03000000009fa0050100040d021cb8950000ffffffff71010000040e021112ac950000ffffffff71010000019d0913db950000ffffffff0700000001632d15f4950000e812000001634f15f495000010130000015d4f000000000000007e000000040000000000040fe31601001c00f2ef00009abd00002dfa00000222040000022e07000004ce680000deb50000015501176c8b0000a0050100020502010000025a0a0000023a050000022c05000002bd02000003ad9300008eb50000031004010000023405000002bd02000003af7d00008eb5000004ab030100000000007d0000000400000000000401e31601001c0071d900003ebe00002dfa0000ffffffffd90000000222040000022e070000023efb00001bffffffffd900000007ed03000000009f3efb0000030d021cbb960000ffffffffd8000000030e021112af960000ffffffffd8000000018c0915de96000038130000014d4b0000000000000065000000040000000000040fe31601001c00f2ef00007cbf00002dfa00000222040000022e0700000452880000afb6000001480117fc7400003efb0000020502010000025a0a0000023a050000023405000002bd020000030e110000a6b6000003ab03010000000000700000000400000000000401e31601001c00b9d0000012c000002dfa0000ffffffffe20000000222040000022e070000023bc200001bffffffffe200000007ed03000000009f3bc20000020d021c98970000ffffffffe1000000020e0211138c970000ffffffffe100000001be0900000000000040000000040000000000040fe31601001c00f2ef0000a9c000002dfa00000222040000022e070000044c57000087b70000016c0117735b00003bc2000002050201000000620000000400000000000401e31601001c00a4c70000eac000002dfa0000ffffffff350000000222040000021d03000002e102000002e0f000001bffffffff3500000004ed00029fe0f0000001f3010e3b980000ffffffff1300000001f401110000000000003a000000040000000000040fe31601001c00e6d600004fc100002dfa00000222040000021d03000002e102000017d67b0000e0f0000001eb010100000000ff0300000400000000000401e31601001c006c0901007ec100002dfa0000ffffffffc50600000222040000027f08000002aa0800001bffffffffc506000007ed03000000009faa08000001f3011d889d00006013000001f401111e3d9d000008140000081d01128f9c0000ffffffff14000000034b0c0e819c0000ffffffff14000000027504120013ca9d0000ffffffff1900000003920a1e199d0000b0140000090a1a1d069d0000c81400000a9a021a15e79c0000e01400000bee1c000012199d0000ffffffff09000000090a1a1c069d0000ffffffff090000000a9a021a13e79c0000ffffffff090000000bee1c000012bc9c0000ffffffff0500000003ee0e0ea19c0000ffffffff0500000002d104120012bc9c0000ffffffff0100000003f90f0ea19c0000ffffffff0100000002d1041200128f9c0000ffffffff0600000003f5120e819c0000ffffffff06000000027504120012bc9c0000ffffffff0100000003f60f0ea19c0000ffffffff0100000002d10412001c8f9c0000ffffffff04000000030201120e819c0000ffffffff0400000002750412001cbc9c0000ffffffff010000000303010f0ea19c0000ffffffff0100000002d10412001c8f9c0000ffffffff04000000030a01120e819c0000ffffffff0400000002750412001cbc9c0000ffffffff01000000030b010f0ea19c0000ffffffff0100000002d104120012199d0000ffffffff0b000000090a1a1c069d0000ffffffff0b0000000a9a021a13e79c0000ffffffff0b0000000bee1c00001c8f9c0000ffffffff04000000031201110e819c0000ffffffff0400000002750412001cbc9c0000ffffffff010000000313010e0ea19c0000ffffffff0100000002d1041200128f9c0000ffffffff0400000003ce110e819c0000ffffffff04000000027504120012bc9c0000ffffffff0100000003cf0e0ea19c0000ffffffff0100000002d1041200130d9e0000ffffffff03000000038f101cbc9c0000ffffffff010000000319010a0ea19c0000ffffffff0100000002d10412001c8f9c0000ffffffff0b000000031d010b0e819c0000ffffffff0b00000002750412001cbc9c0000ffffffff01000000033b010d0ea19c0000ffffffff0100000002d10412001c8f9c0000ffffffff030000000343010c0e819c0000ffffffff0300000002750412001cbc9c0000ffffffff08000000034401090ea19c0000ffffffff0800000002d10412001c8f9c0000ffffffff03000000034d010b0e819c0000ffffffff0300000002750412001cbc9c0000ffffffff050000000353010d0ea19c0000ffffffff0500000002d10412001c4f9d0000ffffffff930000000351010d12c99c0000ffffffff01000000071c090eae9c0000ffffffff0100000002d104120000000000000000000d010000040000000000040fe31601001c0052fa0000b7c900002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca040103940e0000de00010001ca04010003134a00009003000001a0040103134a00009003000001a004010000023a050000023405000002bd020000035b50000093b9000003ab030100000002770a000002cd020000020c020000048874000080b9000004e301000002bd02000003fd7100003bb50000059302010000000222040000027f080000023207000002aa08000004be710000aa080000022f0100025b090000047a9200005b090000060201000000000034000000040000000000040fe31601001c00540c010004cb00002dfa00000222040000027f08000017e69c0000aa08000001ea01010000003f000000040000000000040fe31601001c006ee5000033cb00002dfa00000222040000027f0800000232070000022309000004016300002309000001050100000000003f000000040000000000040fe31601001c00d2f1000072cb00002dfa00000222040000027f080000023207000002af08000004f2420000af0800000111010000000000530000000400000000000401e31601001c0016000100b1cb00002dfa0000ffffffff0c0000000222040000028203000002480b00000263f1000022ffffffff0c00000007ed03000000009f63f1000001f3010000000000bd0000000400000000000401e31601001c00d1f50000f6cb00002dfa0000ffffffffc20000000222040000027f08000002890800001bffffffffc200000007ed03000000009f8908000001f3011df39f0000f814000001f401111e689f000018150000051d01129a9f0000ffffffff05000000021a0a0e8c9f0000ffffffff0500000003cf0412001335a00000ffffffff1b000000022f1312ba9f0000ffffffff10000000020e170eac9f0000ffffffff10000000036e0412000000000000000091000000040000000000040fe31601001c00e8ce00005bcd00002dfa00000222040000027f080000023207000002890800000401a900008908000001080100000000025a0a000002c1e9000002bd020000029003000003e98c0000b7e9000002c804010003a69d0000900300000299040102880300000371a800009ee900000267040100031580000088030000025104010000000034000000040000000000040fe31601001c00540c0100e8cd00002dfa00000222040000027f0800001705a400008908000001ea01010000003f000000040000000000040fe31601001c00ceba000017ce00002dfa00000222040000027f080000023207000002b6fa000004c0a80000b6fa00000105010000000000630100000400000000000401e31601001c006fe1000056ce00002dfa0000ffffffff480200000222040000027f08000002affa00001bffffffff4802000004ed00019faffa000001f3011df3a200003815000001f401111ea7a2000068150000081d011ceda10000ffffffff0b0000000357010e0edfa10000ffffffff0b000000026e0412001521a20000981500000903121ceda10000ffffffff030000000375010e0edfa10000ffffffff03000000026e0412000e52a20000ffffffff050000000377010d1283a20000ffffffff0e000000090a1a1c70a20000ffffffff0e0000000a9a021a1338a20000ffffffff0e0000000bee1c00001283a20000ffffffff01000000090a1a1c70a20000ffffffff010000000a9a021a1338a20000ffffffff010000000bee1c00001cbaa20000ffffffffa200000003830105120da20000ffffffff010000000720090effa10000ffffffff0100000002cf04120000000000000000001a010000040000000000040fe31601001c00fae30000acd100002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000023a05000003ad0f000062b9000003250601023405000002bd02000003819e000059b7000005ab030100000002d2060000027100000003aba60000210b000004a40401000002770a000002cd020000020c020000043a8d000046b7000006e301000002bd02000003c30d0000b1b40000079302010000000222040000027f080000023207000002affa0000036ca60000affa0000024601010002b90600000496a40000b9060000080201000000000034000000040000000000040fe31601001c00540c010014d300002dfa00000222040000027f08000017b9780000affa000001ea0101000000bb0200000400000000000401e31601001c005ad8000043d300002dfa0000ffffffffa40000000222040000028203000002f10a0000021dfb00001bffffffffa400000007ed03000000009f1dfb000009f3011c40a70000ffffffffa300000009f401111234a70000ffffffffa3000000054c091222a70000ffffffff140000000523111202a60000ffffffff140000000a7c160ef4a50000ffffffff140000000175041200001320a60000ffffffff08000000052311126ba70000ffffffff07000000052608138ba60000ffffffff0700000006b30d0013c9a60000ffffffff0100000005260813d6a60000ffffffff01000000052e0f1332a60000ffffffff16000000053809137da70000ffffffff03000000053e1f1290a70000ffffffff0b00000005401612aba60000ffffffff0b00000006b70d0e9ea60000ffffffff0b0000000b92051600001345a60000ffffffff040000000541161290a70000ffffffff0100000005413612aba60000ffffffff0100000006b70d0e9ea60000ffffffff010000000b92051600001358a60000ffffffff05000000054116137da70000ffffffff03000000053f2012eba70000ffffffff07000000053d1513cda70000ffffffff0700000006c70d00137da70000ffffffff05000000052a1f1290a70000ffffffff0b000000052c1612aba60000ffffffff0b00000006b70d0e9ea60000ffffffff0b0000000b92051600001371a60000ffffffff03000000052d091320a60000ffffffff0100000005441f137da70000ffffffff0300000005441f1290a70000ffffffff0100000005451f12aba60000ffffffff0100000006b70d0e9ea60000ffffffff010000000b92051600001358a60000ffffffff010000000545121253a70000ffffffff010000000545051203a70000ffffffff010000000a95110ef5a60000ffffffff0100000008cf041200000000000000000000da010000040000000000040fe31601001c00c9090100bbd500002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f0000880300000146040100000205040000023d030000022a020000049a8c0000f80a000005ab010002ce000000032a34000060060000051603010002da0000000386240000480500000573010100024c01000003d03700004f050000050f01010000026908000002b202000003754b00009c06000009f7020100000002d2060000027100000003c73c0000690b000006cd040100023f00000003a2ad0000ab07000006aa0301033e0d00009e070000068e0501000002bf0500000234040000027202000003435300003a03000008ed0501032c5a0000740a000008f1050100000002c1e9000002bd020000029003000003e98c0000b7e900000ac804010003a69d0000900300000a9904010000000222040000028203000002bd02000004276d000043050000027b010002f10a000004378f000062b8000003050117c71600001dfb000004ea010100025f02000004ff8d00003e0500000294010000021d03000002f90000000437a20000690b000007b201000266000000030a8b0000fb0200000774010100027100000004301200009e07000007b6010000000057000000040000000000040fe31601001c00dcea00002ed700002dfa0000025a0a000002d20600000271000000046a210000090400000194010000000222040000021d03000002f900000016433d00000904000002c60100000000b50000000400000000000401e31601001c00a2cf0000b5d700002dfa0000ffffffff9b0000000222040000027f08000002000a00001bffffffff9b00000007ed03000000009f000a000003f3011cf4a80000ffffffff9a00000003f4011112e6a80000ffffffff9a000000041d011225a90000ffffffff0b0000000139110e17a90000ffffffff0b000000026e0412001245a90000ffffffff030000000168050e37a90000ffffffff0300000002cf041200000000000000009e000000040000000000040fe31601001c00540c0100ded800002dfa00000222040000027f080000023207000002000a0000046e0f0000000a0000013101000017424f0000000a000002ea01010000025a0a000002c1e9000002bd02000002880300000371a800009ee90000036704010003158000008803000003510401029003000003e98c0000b7e9000003c804010003a69d00009003000003990401000000006f0000000400000000000401e31601001c008dc600007cd900002dfa0000ffffffffa40000000222040000021d03000002e60200000259f000001bffffffffa400000004ed00059f59f0000001f3011df6a90000b015000001f401111334aa0000ffffffff1900000002a801000000000000003a000000040000000000040fe31601001c009ec000000eda00002dfa00000222040000021d03000002e6020000175a31000059f0000001eb0101000000003a000000040000000000040fe31601001c00e6d600003dda00002dfa00000222040000021d03000002e102000017893200004ff0000001eb010100000000c00000000400000000000401e31601001c00b6bd00006cda00002dfa0000ffffffff9d0000000222040000028203000002dc02000002e10800001bffffffff9d00000004ed00029fe108000001f3011db1ab0000c815000001f401111e73ab0000e01500000361181336ab0000ffffffff16000000033513124fab0000ffffffff180000000336130e42ab0000ffffffff1800000005920516000012e3ab0000ffffffff010000000361090ed5ab0000ffffffff0100000004d10412000000000000000077000000040000000000040fe31601001c00cdbe00008bdb00002dfa0000025a0a000002d206000002a802000004b12100000904000001940103301f0000ab07000001aa030103e19900009e070000018e05010000000222040000028203000002dc020000027b03000004c2400000cb03000002340100000000006c000000040000000000040fe31601001c0013be000015dc00002dfa00000222040000028203000002dc02000017f7480000e108000001ea0101000000025a0a000002e800010002bd020000029003000003940e0000de00010002ca04010003134a00009003000002a0040100000000680000000400000000000401e31601001c000d11010093dc00002dfa0000ffffffff380000000222040000022e07000002a70600001bffffffff3800000007ed03000000009fa70600000299011dbe1c0000f8150000029a011115ed1b000010160000034209000000000000a80000000400000000000401e31601001c00fffe00001edd00002dfa0000ffffffff6a0000000222040000028203000002d802000002e1fa00001bffffffff6a00000007ed03000000009fe1fa000001f3011c9bad0000ffffffff5500000001f40111128fad0000ffffffff55000000031e091277ad0000ffffffff0b0000000308131339ad0000ffffffff0b00000005f42a001357ad0000ffffffff1400000003120900000000000000009c000000040000000000040fe31601001c00a0d7000063de00002dfa0000025a0a000002d2060000020c020000031d3800001205000001d60501000002050400000269080000026001000003852900007806000005740301000000000222040000021d03000002bb00000004967e00008d09000002f3010000028203000002d8020000045575000047b9000003050117883c0000e1fa000004ea010100000000bd0000000400000000000401e31601001c00baf400005fdf00002dfa0000ffffffff7a0100000222040000027f080000021e0a00001bffffffff7a01000007ed03000000009f1e0a000002f3011d0aaf00002816000002f401111e9fae000078160000051d0112d1ae0000ffffffff0d0000000120140ec3ae0000ffffffff0d0000000375041200134caf0000ffffffff0100000001530f12d1ae0000ffffffff090000000121140ec3ae0000ffffffff0900000003750412000000000000000071000000040000000000040fe31601001c006a1101009de100002dfa00000222040000027f0800000232070000021e0a000004793e00001e0a0000011c0100000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000000034000000040000000000040fe31601001c00540c01002ce200002dfa00000222040000027f08000017976800001e0a000001ea01010000003f000000040000000000040fe31601001c006ee500005be200002dfa00000222040000027f080000023207000002230900000401630000230900000105010000000000d60000000400000000000401e31601001c007fea00009ae200002dfa0000ffffffff210000000222040000027f08000002eb0a00001bffffffff2100000007ed03000000009feb0a000005f3011c06b10000ffffffff2000000005f4011112cdb00000ffffffff20000000061d0112bbb00000ffffffff1c00000003070f1277b00000ffffffff0f0000000208100e69b00000ffffffff0f000000016e0412001297b00000ffffffff01000000020b050e89b00000ffffffff0100000001cf041200001348b10000ffffffff0100000003070500000000000000a3000000040000000000040fe31601001c00d1fc00009ce300002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000000222040000027f0800000232070000025706000004be560000570600000206010002eb0a000004fa850000eb0a0000030601000000000034000000040000000000040fe31601001c00540c010039e400002dfa00000222040000027f08000017f04d0000eb0a000001ea01010000003f000000040000000000040fe31601001c002bbb000068e400002dfa00000222040000027f0800000232070000024c0b000004378300004c0b000001040100000000005f0000000400000000000401e31601001c0058e00000a7e400002dfa0000ffffffff0a0000000222040000027f080000028e0b00001bffffffff0a00000007ed03000000009f8e0b000002f3010ee4b10000ffffffff0900000002f40111000000000034000000040000000000040fe31601001c00540c0100fbe400002dfa00000222040000027f080000178e9100008e0b000001ea0101000000d20000000400000000000401e31601001c0043d700002ae500002dfa0000ffffffff120100000222040000027f08000002840800001bffffffff1201000004ed00019f8408000001f3011c9ab30000ffffffffeb00000001f401111261b30000ffffffffeb000000061d01120ab30000ffffffff05000000030f090efcb20000ffffffff0500000002cf04120013dcb30000ffffffff1f000000032505133eb30000ffffffff11000000070312122ab30000ffffffff12000000030d140e1cb30000ffffffff12000000026e04120000000000000000a4000000040000000000040fe31601001c0022ea0000cfe600002dfa0000025a0a000002c1e9000002bd020000029003000003e98c0000b7e9000001c804010003a69d0000900300000199040102880300000371a800009ee900000167040100031580000088030000015104010000023a05000003c14700000eb800000325060100000222040000027f0800000232070000028408000004c22d000084080000020b01000000000034000000040000000000040fe31601001c00540c0100abe700002dfa00000222040000027f08000017c25100008408000001ea01010000003f000000040000000000040fe31601001c0027060100dae700002dfa00000222040000027f080000023207000002b4fa00000424b10000b4fa00000108010000000000620000000400000000000401e31601001c008bce00001be800002dfa0000ffffffff470000000222040000021d03000002e102000002d5e600001bffffffff4700000004ed00039fd5e6000001f3010e80b40000ffffffff2400000001f401110000000000003a000000040000000000040fe31601001c00e6d6000098e800002dfa00000222040000021d03000002e10200001719390000d5e6000001eb010100000000b60000000400000000000401e31601001c0076c50000c7e800002dfa0000ffffffff1f0000000222040000021d03000002520b0000023c0b00001bffffffff1f00000007ed03000000009f3c0b000002f3011de6b50000c816000002f401111ed9b50000e01600000342091ec7b50000f8160000031c1d1ea4b500001017000003051b1578b500002817000004c30d0012b0b50000ffffffff070000000306121385b50000ffffffff0700000004ab0d00000000000000000000a8000000040000000000040fe31601001c00830a01009ae900002dfa0000025a0a000002d2060000023f00000003ef940000110b000001f0050103b9440000210b000001a404010000000222040000021d03000002710000000442190000110b000002c2010449130000210b000002aa010002520b000002860b000004140e000051b600000304010002870b000004f198000092b60000031b010017ba1700003c0b000004ea010100000000620000000400000000000401e31601001c009fbc00003fea00002dfa0000ffffffff720000000222040000021d03000002e1020000028fe600001bffffffff7200000004ed00069f8fe6000001f3010e8ab60000ffffffff4300000001f401110000000000003a000000040000000000040fe31601001c00e6d60000baea00002dfa00000222040000021d03000002e102000017779b00008fe6000001eb0101000000006f0000000400000000000401e31601001c00f60f0100e9ea00002dfa0000ffffffffdc0000000222040000021d03000002e6020000029ce600001bffffffffdc00000004ed00069f9ce6000001f3011d3bb700004017000001f401111379b70000ffffffff2a00000002a101000000000000003a000000040000000000040fe31601001c009ec0000082eb00002dfa00000222040000021d03000002e602000017404000009ce6000001eb0101000000003a000000040000000000040fe31601001c00e6d60000b1eb00002dfa00000222040000021d03000002e102000017779b00008fe6000001eb010100000000160600000400000000000401e31601001c009b070100e0eb00002dfa0000ffffffff1c03000002220400000282030000028c070000025af100001bffffffff1c03000004ed00029f5af1000001f3011c2a790000fffffffff102000001f40111121e790000fffffffff102000005c509123d790000ffffffff0e00000005201112a8780000ffffffff0e000000077c160e9a780000ffffffff0e000000026e041200001399760000ffffffff0300000005271d13bb770000ffffffff05000000052b081399760000ffffffff0e000000052e1513c8770000ffffffff0100000005320c13c8770000ffffffff0100000005360c13e8770000ffffffff01000000053a0c13e8770000ffffffff0100000005440c13e8770000ffffffff0300000005540c13d5770000ffffffff03000000055b0c12b27a0000ffffffff15000000055c2b15827a00005817000007a016134f7a0000ffffffff0100000007a116136f7a0000ffffffff0300000007a31a0013d5770000ffffffff0300000005610c12b27a0000ffffffff1200000005622b15827a00007017000007a016134f7a0000ffffffff0100000007a1160013f5770000ffffffff03000000053b102149790000ffffffff07000000050012c8780000ffffffff070000000795110eba780000ffffffff0700000002cf0412000013f7760000ffffffff040000000547251249790000ffffffff0500000005471812c8780000ffffffff050000000795110eba780000ffffffff0500000002cf0412000013f7760000ffffffff04000000053d251249790000ffffffff05000000053d1812c8780000ffffffff050000000795110eba780000ffffffff0500000002cf0412000013f7760000ffffffff010000000533211249790000ffffffff0500000005331412c8780000ffffffff050000000795110eba780000ffffffff0500000002cf0412000013f7760000ffffffff010000000537211249790000ffffffff0500000005371412c8780000ffffffff050000000795110eba780000ffffffff0500000002cf0412000013d1760000ffffffff1a00000005741413e4760000ffffffff03000000056b051ec07900008817000005732f1f7c780000a0170000085401220013d3790000ffffffff0300000005781f1349780000ffffffff01000000057a0a1349780000ffffffff05000000057b0a1399760000ffffffff01000000057f0813f5770000ffffffff04000000057f0813f7760000ffffffff0d000000058218130a770000ffffffff080000000583091349780000ffffffff0300000005802d13e6790000ffffffff0500000005a71913d1760000ffffffff0c00000005a719131d770000ffffffff0100000005a60913e4760000ffffffff0500000005a70912f9790000ffffffff07000000059215131c780000ffffffff0700000008b30d0015f7760000b8170000059b1b13be760000ffffffff08000000059b3c1330770000ffffffff09000000059c0d13d1760000ffffffff01000000059a1a1249790000ffffffff0700000005941412c8780000ffffffff070000000795110eba780000ffffffff0700000002cf0412000013f7760000ffffffff0100000005881d1249790000ffffffff0500000005881012c8780000ffffffff050000000795110eba780000ffffffff0500000002cf0412000013e4760000ffffffff1600000005ab0513c8770000ffffffff0100000005b008135c770000ffffffff0100000005b1091e49790000d817000005b8051ec8780000f01700000795111fba7800000818000002cf0412000013e8770000ffffffff0100000005b4081399760000ffffffff0100000005b519135c770000ffffffff0300000005b5091356780000ffffffff05000000057c0a13d3790000ffffffff0300000005771f1399760000ffffffff0300000005261d13ab760000ffffffff100000000524181399760000ffffffff0700000005241813be760000ffffffff040000000523161399760000ffffffff2500000005231613be760000ffffffff040000000522161399760000ffffffff06000000052216123d790000ffffffff0e000000051f1112a8780000ffffffff0e000000077c160e9a780000ffffffff0e000000026e0412000000000000000000000d0100000400000000000401e31601001c00e8fd000090f000002dfa0000ffffffff250000000222040000028203000002bf0500000200fb00001bffffffff2500000007ed03000000009f00fb000005f3011c6fbf0000ffffffff2400000005f401111263bf0000ffffffff240000000473091251bf0000ffffffff0a000000045d1112f5be0000ffffffff0a000000067c160ee7be0000ffffffff0a0000000175041200001313bf0000ffffffff07000000045f111331bf0000ffffffff010000000462051313bf0000ffffffff070000000460111251bf0000ffffffff09000000045e1112f5be0000ffffffff09000000067c160ee7be0000ffffffff090000000175041200000000000000000000c7000000040000000000040fe31601001c00dbee000009f200002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f0000880300000146040100000205040000023d030000022a020000049a8c0000f80a000005ab0100000002bf0500000234040000027202000003ce7000004103000006f30501000000000222040000028203000002bd02000004276d000043050000027b010002bf05000004a288000075b90000035501177b46000000fb000004ea0101000000009e0100000400000000000401e31601001c00a3f300003ff300002dfa0000ffffffff540000000222040000021d030000026e03000002aff000001bffffffff5400000007ed03000000009faff0000001f3011d61c100002018000001f401111e54c1000038180000026f091374c10000ffffffff07000000023c2e1ea1c1000050180000023c111ef8c1000068180000039f311febc100008018000006b30516000012a1c10000ffffffff05000000023d1112f8c10000ffffffff05000000039f310eebc10000ffffffff0500000006b3051600001e81c1000098180000023b0d0ebfc10000ffffffff05000000033a012a0eccc10000ffffffff01000000033a01180012adc10000ffffffff0d000000023c2e1212c20000ffffffff0d00000003b70d0e05c20000ffffffff0d000000069205160000138ec10000ffffffff01000000023c111330c20000ffffffff05000000023c111374c10000ffffffff0500000002370d12a1c10000ffffffff0200000002370d12f8c10000ffffffff02000000039f310eebc10000ffffffff0200000006b30516000000000000000000001c010000040000000000040fe31601001c0011e50000d1f400002dfa00000222040000021d030000026e0300000282050000042073000073b8000001340100175f820000aff0000002ea01010002c7010000039731000038080000033301010397980000270800000339010103ff440000f60500000330010100029301000004c67200005b050000039e0104aa4e00009e07000003b60100023402000003017e000032080000034d0101035b390000ae060000034a0101000000025a0a000002d206000002bb00000003bc4600007405000004da0301030c8800006705000004af0501038cb20000ab07000004aa030103fc1800009e070000048e050100000205040000023d03000002da010000037a2a00004f050000050f01010000000000dc0000000400000000000401e31601001c00c5e90000c4f500002dfa0000ffffffff270200000222040000027f08000002c30500001bffffffff2702000004ed00019fc305000001f3011df2c30000b018000001f401111eb9c30000e0180000051d011262c30000ffffffff070000000346190e54c30000ffffffff07000000026e0412001262c30000ffffffff070000000372170e54c30000ffffffff07000000026e0412001282c30000ffffffff0a00000003840d0e74c30000ffffffff0a00000002cf0412001396c30000ffffffff0800000006031200000000000000a4000000040000000000040fe31601001c00adec000064f800002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000023a05000003ad0f000062b900000325060100000222040000027f080000023207000002c3050000047f1c0000c3050000024501000000000034000000040000000000040fe31601001c00540c010041f900002dfa00000222040000027f0800001742ae0000c305000001ea01010000006b0000000400000000000401e31601001c009edf000070f900002dfa0000ffffffff5c0000000222040000021d03000002e602000002a6f000001bffffffff5c00000004ed00029fa6f0000001f3011ddcc400001019000001f40111159ec4000028190000038c11000000000000003a000000040000000000040fe31601001c00e6d6000000fa00002dfa00000222040000021d03000002e102000017482400009cf0000001eb0101000000003a000000040000000000040fe31601001c009ec000002ffa00002dfa00000222040000021d03000002e602000017012d0000a6f0000001eb010100000000000100000400000000000401e31601001c0089d600005efa00002dfa0000ffffffff6f0100000222040000021d03000002e102000002b2e600001bffffffff6f01000007ed03000000009fb2e6000001f3011cb9c60000ffffffff6401000001f40111121ec60000ffffffff550100000519171c2ac60000ffffffff120000000291011b1348c60000ffffffff0300000004401c1348c60000ffffffff03000000044032000e54c60000ffffffff03000000029301170e54c60000ffffffff07000000029e011f1d6ec600004019000002b3011b1f61c600007019000006920516001f54c60000a019000002b3012b1f7bc60000d019000002b7011b000000000000000097000000040000000000040fe31601001c00b5c100009efc00002dfa00000222040000021d03000002e706000004466c00002207000001170104155900005c030000033101000000025a0a000002d20600000271000000046a2100000904000002940103c73c0000690b000002cd0401033c490000ab07000002aa030103788300009e070000028e050103aba60000210b000002a40401000000003a000000040000000000040fe31601001c00e6d6000052fd00002dfa00000222040000021d03000002e102000017e8330000b2e6000001eb010100000000770100000400000000000401e31601001c00d1cd000081fd00002dfa0000ffffffffb80500000222040000027f08000002460900001bffffffffb805000004ed00019f4609000001f3011c19c90000ffffffff8b05000001f401111277c80000ffffffff8b050000081d0112cdc80000ffffffff0f0000000221140ebfc80000ffffffff0f00000003750412001e5bc90000001a0000025612128dc90000ffffffff01000000043d0d0e7fc90000ffffffff0100000003d1041200001389c80000ffffffff4b000000025b0f139bc80000ffffffff4b00000002580e1389c80000ffffffff4f00000002590e159bc80000181a0000025a0e139bc80000ffffffff4b000000024d101389c80000ffffffff4b000000024a191389c80000ffffffff4f000000024818159bc80000301a0000023d101389c80000ffffffff4f000000023a181389c80000ffffffff4b000000023819139bc80000ffffffff4b00000002311013e1c80000ffffffff0600000009031200000000000000a8000000040000000000040fe31601001c00e7d200005e0201002dfa00000222040000027f0800000232070000024609000004fe57000046090000011c010002ce080000047b950000ce08000003180100024409000004be6200004409000004180100000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000023a05000003ad0f000062b900000525060100000034000000040000000000040fe31601001c00540c0100540301002dfa00000222040000027f08000017623500004609000001ea010100000071000000040000000000040fe31601001c00fcbc0000830301002dfa00000222040000027f080000023207000002140a000004647a0000140a000001230100000000025a0a000002e800010002bd020000029003000003940e0000de00010002ca04010003134a00009003000002a0040100000000dc0000000400000000000401e31601001c00bcc40000150401002dfa0000ffffffff920100000222040000027f08000002370900001bffffffff9201000004ed00019f3709000001f3011d4ecb0000481a000001f401111e15cb0000781a0000051d0112beca0000ffffffff170000000319190eb0ca0000ffffffff17000000027504120012beca0000ffffffff080000000345170eb0ca0000ffffffff08000000027504120012deca0000ffffffff0600000003570d0ed0ca0000ffffffff0600000002d104120013f2ca0000ffffffff0800000006031200000000000000a4000000040000000000040fe31601001c0024120100720601002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a004010000023a05000003ad0f000062b900000325060100000222040000027f0800000232070000023709000004d43d000037090000021801000000000034000000040000000000040fe31601001c00540c0100500701002dfa00000222040000027f08000017837f00003709000001ea0101000000e90100000400000000000401e31601001c00e5bb00007f0701002dfa0000ffffffff520000000222040000021d030000026e03000002fdf000001bffffffff5200000007ed03000000009ffdf0000001f3011d8acd0000a81a000001f401111e7dcd0000c01a0000026409139dcd0000ffffffff0200000002272e12cacd0000ffffffff05000000022811122dce0000ffffffff0500000003bb0d0e20ce0000ffffffff0500000006bb051600001eaacd0000d81a000002260d0ef4cd0000ffffffff08000000033a012a0e01ce0000ffffffff01000000033a011800135ace0000ffffffff0300000002274912d6cd0000ffffffff0100000002272e1247ce0000ffffffff0100000003b70d0e3ace0000ffffffff01000000069d0516000013b7cd0000ffffffff0300000002271112e2cd0000ffffffff030000000227111274ce0000ffffffff03000000039f310e67ce0000ffffffff0300000007b3051600001392ce0000ffffffff010000000227111eaacd0000f01a0000021e0d0ef4cd0000ffffffff0c000000033a012a0e01ce0000ffffffff01000000033a011800139dcd0000ffffffff02000000021f1112cacd0000ffffffff03000000021f11122dce0000ffffffff0300000003bb0d0e20ce0000ffffffff0300000006bb05160000000000000000000055010000040000000000040fe31601001c0011e50000300901002dfa00000222040000021d030000026e03000002870500000457aa0000d2b70000011b010017bb850000fdf0000002ea010100025c00000003ed670000380800000333010103be95000027080000033901010333a50000f6050000033001010002bb00000004f69000006705000003ba01045fa100009e07000003b60104011800005b050000039e010002e500000003b710000032080000034d010103fa360000ae060000034a0101000000025a0a000002d2060000020c02000003dd5c0000740500000459030103145e00006705000004b7050103d5240000ab0700000429030103b99b00009e0700000499050100027100000003c73c0000690b000005cd0401037d5200007405000005da030103dc1300006705000005af050100000205040000023d030000020b00000003f28300004f050000060f01010000000000eb0100000400000000000401e31601001c003c0f0100340a01002dfa0000ffffffff000100000222040000021d030000028c07000002a8e600001bffffffff0001000007ed03000000009fa8e6000001f3011dccd00000081b000001f401111ec0d00000201b000002711812ded00000ffffffff8a00000002501c13f1d00000ffffffff0100000002231015f1d00000381b00000223251203d10000ffffffff0d000000022520135ad10000ffffffff0d00000003af0d00122ed10000ffffffff0a000000022d1e0e21d10000ffffffff01000000035401330e67d10000ffffffff090000000354012200122ed10000ffffffff07000000022e1e0e67d10000ffffffff070000000354012200133bd10000ffffffff01000000022f37120fd10000ffffffff0d000000022f201374d10000ffffffff0d00000003c30d00122ed10000ffffffff0a00000002271e0e21d10000ffffffff01000000035401330e67d10000ffffffff090000000354012200122ed10000ffffffff0700000002281e0e67d10000ffffffff070000000354012200133bd10000ffffffff01000000022937120fd10000ffffffff0d0000000229201374d10000ffffffff0d00000003c30d00122ed10000ffffffff0b00000002331e0e67d10000ffffffff0b0000000354012200000000000000000000ee000000040000000000040fe31601001c006f150100130c01002dfa00000222040000021d030000028c07000004980c00006f070000013e0117570e0000a8e6000002ea010102f305000004b11e00007db800000122010000029301000004551d0000c905000003a2010002f900000004526b00008307000003ae01045a8e0000110b000003c2010002340200000334620000b30600000347010103504500003c0700000353010103017e000032080000034d0101000000025a0a000002d206000002710000000390b000008307000004e404010390b000008307000004e4040103f0aa0000110b000004f0050100000000c70000000400000000000401e31601001c00e1060100b50c01002dfa0000ffffffff6f0000000222040000028203000002dc02000002d70900001bffffffff6f00000007ed03000000009fd709000004f3011cded20000ffffffff6e00000004f401111e82d20000501b000001811813a1d20000ffffffff05000000012c1300120ad30000ffffffff070000000181380efdd20000ffffffff0700000005f10513001236d30000ffffffff010000000181090e28d30000ffffffff0100000003cf041200000000000000005d000000040000000000040fe31601001c00cdbe0000c40d01002dfa00000222040000028203000002dc020000027b0300000466850000ab03000001280100000000025a0a000002d2060000023f000000045b330000090400000294010000000092000000040000000000040fe31601001c0013be00004e0e01002dfa00000222040000028203000002dc0200001791600000d709000001ea0101000000025a0a000002d206000002d1010000032a4200001205000002d6050103012300001f05000002f00501000002c1e9000002bd020000029003000003e98c0000b7e9000003c804010003a69d00009003000003990401000000005f0000000400000000000401e31601001c002efd0000dd0e01002dfa0000ffffffff0a0000000222040000027f08000002b30500001bffffffff0a00000007ed03000000009fb305000002f3010ed2d30000ffffffff0900000002f40111000000000034000000040000000000040fe31601001c00540c0100310f01002dfa00000222040000027f0800001744470000b305000001ea0101000000000100000400000000000401e31601001c00e9f20000600f01002dfa0000ffffffff1a0100000222040000021d03000002e102000002cdf000001bffffffff1a01000007ed03000000009fcdf0000004f3011caed50000ffffffff1601000004f401111213d50000ffffffff160100000512091c1fd50000ffffffff160000000191011b133dd50000ffffffff0700000003401c133dd50000ffffffff03000000034032000e49d50000ffffffff03000000019301170e49d50000ffffffff09000000019e011f1d63d50000681b000001b3011b1f56d50000981b000006920516001f49d50000c81b000001b3012b1f70d50000f81b000001b7011b000000000000000097000000040000000000040fe31601001c00b5c100006c1101002dfa00000222040000021d03000002e706000004466c00002207000001170104155900005c030000033101000000025a0a000002d20600000271000000046a2100000904000002940103c73c0000690b000002cd0401033c490000ab07000002aa030103788300009e070000028e050103aba60000210b000002a40401000000003a000000040000000000040fe31601001c00e6d60000201201002dfa00000222040000021d03000002e1020000170f4d0000cdf0000001eb010100000000530000000400000000000401e31601001c00dee800004f1201002dfa0000ffffffff0c0000000222040000028203000002480b0000023ff1000022ffffffff0c00000007ed03000000009f3ff1000001f3010000000000260100000400000000000401e31601001c00e4de0000941201002dfa0000ffffffff290000000222040000021d03000002520b000002760b00001bffffffff2900000007ed03000000009f760b000002f3011d11d80000281c000002f401111e04d80000401c00000452091ee6d70000581c0000041f1d1edad70000701c00000411091eb7d70000881c000004051b156dd70000a01c000005c30d0012c3d70000ffffffff01000000040612137ad70000ffffffff0100000005ab0d00001398d70000ffffffff0100000004101412f2d70000ffffffff0700000004101412c3d70000ffffffff03000000040d1e137ad70000ffffffff0300000005ab0d0012b7d70000ffffffff03000000040b1b136dd70000ffffffff0300000005c30d0000000000000000000000de000000040000000000040fe31601001c00830a0100d11301002dfa0000025a0a000002d2060000023f00000003ef940000110b000001f0050103b9440000210b000001a4040100000205040000023d03000002bb0000000476a9000018030000053d01000000000222040000021d03000002710000000442190000110b000002c2010449130000210b000002aa010002520b000002860b000004140e000051b600000304010485af00005cb60000030f01045b96000042b60000030a010002870b000004334300009cb60000031e01001741740000760b000004ea010100000000e80000000400000000000401e31601001c0017cd0000c51401002dfa0000ffffffff620900000222040000027f08000002a20500001bffffffff6209000007ed03000000009fa205000004f3011ddbd90000b81c000004f401111e72d90000d81c0000036811124ed90000ffffffff1c00000002a9140e40d90000ffffffff1c000000016e041200127ed90000ffffffffa202000002cb0d131dda0000ffffffff0500000002981a1390d90000ffffffff6200000002a31213a2d90000ffffffff9000000002a00e1590d90000081d000002a10e13a2d90000ffffffff8c00000002a20f0000000000000000a1000000040000000000040fe31601001c0046cb0000c01a01002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee900000167040100031580000088030000015104010000000222040000027f080000023207000002a20500000480160000a205000002a80104012e00002008000002940100024c060000042d0f00004c060000032f0100021c04000004973500001c040000043701000000000034000000040000000000040fe31601001c00540c0100691b01002dfa00000222040000027f0800001718980000a205000001ea01010000003f000000040000000000040fe31601001c0074f50000981b01002dfa00000222040000027f080000023207000002550500000467b3000055050000010a010000000000b80200000400000000000401e31601001c0002c40000d71b01002dfa0000ffffffffac0200000222040000022e07000002430a00001bffffffffac02000007ed03000000009f430a00000699011ccb1c0000ffffffffa9020000069a011113101d0000ffffffff100000000221251efa1b0000201d000002270d13621d0000ffffffff0700000005c7171e0b1c0000381d000005cd091ebc1d0000501d000005811f0eaf1d0000ffffffff090000000471041b0012bc1d0000ffffffff010000000583190eaf1d0000ffffffff010000000471041b000012171c0000ffffffff5800000005d70d12d61d0000ffffffff0100000005b3250ec91d0000ffffffff010000000471041b00001e231c0000681d000005d50d12f01d0000ffffffff010000000590250ee31d0000ffffffff010000000471041b0000127c1d0000ffffffff0b00000005cf130e6f1d0000ffffffff0b000000030c041b00120b1c0000ffffffff3f00000005dd0512bc1d0000ffffffff010000000583190eaf1d0000ffffffff010000000471041b000013a21d0000ffffffff0d00000005c6190012301c0000ffffffff3101000002250d122a1d0000ffffffff050000000567310e1d1d0000ffffffff050000000772051b0012411c0000ffffffff3500000005680913fd1d0000ffffffff05000000051f1d13891d0000ffffffff0700000005231713fd1d0000ffffffff0100000005221900124d1c0000ffffffff5800000005720d130a1e0000ffffffff010000000552250012591c0000ffffffff2c00000005700d13171e0000ffffffff0700000005302313171e0000ffffffff01000000052f250013891d0000ffffffff0700000005751313891d0000ffffffff0d000000056a1312411c0000ffffffff2100000005780513891d0000ffffffff0700000005231713fd1d0000ffffffff0100000005221900000000000000005f0000000400000000000401e31601001c00820e01005a1f01002dfa0000ffffffff0a0000000222040000027f080000022b0a00001bffffffff0a00000007ed03000000009f2b0a000002f3010e75dd0000ffffffff0900000002f40111000000000034000000040000000000040fe31601001c00540c0100ae1f01002dfa00000222040000027f08000017bc5500002b0a000001ea0101000000e20000000400000000000401e31601001c0074fc0000dd1f01002dfa0000ffffffffcb0000000222040000028203000002dc02000002d50800001bffffffffcb00000004ed00029fd508000001f3011df0de0000801d000001f4011112a5de0000ffffffff200000000387390e98de0000ffffffff2000000005f10513001e6bdf0000981d0000038718132edf0000ffffffff120000000335131247df0000ffffffff180000000336130e3adf0000ffffffff1800000006920516000012d1de0000ffffffff010000000387090ec3de0000ffffffff0100000004d10412000000000000000092000000040000000000040fe31601001c0013be0000192101002dfa0000025a0a000002d2060000029301000003381c00001205000001d6050103b41b00001f05000001f00501000002e800010002bd020000029003000003940e0000de00010003ca04010003134a00009003000003a004010000000222040000028203000002dc02000017e36e0000d508000002ea01010000000077000000040000000000040fe31601001c00cdbe0000a82101002dfa0000025a0a000002d206000002a802000004b12100000904000001940103301f0000ab07000001aa030103e19900009e070000018e05010000000222040000028203000002dc020000027b03000004c2400000cb03000002340100000000008d0000000400000000000401e31601001c002ff20000322201002dfa0000ffffffffb60000000222040000022e070000024e0501001bffffffffb600000007ed03000000009f4e050100040d021c41e00000ffffffffb5000000040e02111235e00000ffffffffb50000000188091364e00000ffffffff07000000014d29157de00000b01d0000014d4b000000000000007e000000040000000000040fe31601001c00f2ef00006e2301002dfa00000222040000022e070000049199000096b5000001480117cd7c00004e050100020502010000025a0a0000023a050000022c05000002bd02000003ad9300008eb50000031004010000023405000002bd02000003af7d00008eb5000004ab03010000000000310100000400000000000401e31601001c002ade0000122401002dfa0000ffffffff870000000222040000028203000002bf050000022bfb00001bffffffff8700000007ed03000000009f2bfb000001f3011df6e20000d81d000001f401111eeae20000f01d000005910912d8e20000ffffffff12000000052c111204e20000ffffffff12000000067c160ef6e10000ffffffff12000000026e041200001322e20000ffffffff0e000000052e111365e20000ffffffff010000000532081334e20000ffffffff070000000537081378e20000ffffffff010000000537081347e20000ffffffff0b000000054008138be20000ffffffff010000000540081398e20000ffffffff05000000054c0f13a5e20000ffffffff0500000005410c20b8e20000ffffffff07000000050000000000000000003f010000040000000000040fe31601001c00dbee00000c2601002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee9000001670401000315800000880300000151040100000205040000023d03000002f801000004266f0000f80a000005ab0100024c01000003d03700004f050000050f010100025200000004a5410000f80a000005ab0100000002bf050000023404000002ee01000003393a00004103000006f3050100022f01000003173e0000ae050000069905010002560100000326320000740a000006f1050103124b00004103000006f30501034cac00003a03000006ed050100022a02000003bb300000ae050000069905010000000002220400000282030000025f02000004b94c000043050000027b010002bf0500000413610000fcb7000003220117d85800002bfb000004ea010100000000890000000400000000000401e31601001c0015d50000422701002dfa0000ffffffffbd0100000222040000022e0700000240e700001bffffffffbd01000007ed03000000009f40e70000010d021cc8e30000ffffffffb5010000010e021112bce30000ffffffffb501000002a50915ebe30000081e000002634f15ebe30000301e0000025d4f0000000000000065000000040000000000040fe31601001c00f2ef0000122901002dfa00000222040000022e070000045e3f0000e4b8000001550117768f000040e70000020502010000025a0a0000023a050000023405000002bd020000038226000091b8000003ab030100000000005f0000000400000000000401e31601001c005dcc0000a82901002dfa0000ffffffff0a0000000222040000027f08000002480501001bffffffff0a00000007ed03000000009f4805010002f3010e88e40000ffffffff0900000002f40111000000000034000000040000000000040fe31601001c00540c0100fc2901002dfa00000222040000027f08000017255000004805010001ea0101000000a80000000400000000000401e31601001c0048c300002b2a01002dfa0000ffffffff760000000222040000028203000002d80200000213fb00001bffffffff7600000007ed03000000009f13fb000001f3011cd3e50000ffffffff5d00000001f4011112c7e50000ffffffff5d00000003220912afe50000ffffffff0b0000000308131371e50000ffffffff0b00000005f42a00138fe50000ffffffff1800000003120900000000000000009c000000040000000000040fe31601001c00a0d70000702b01002dfa0000025a0a000002d2060000020c020000031d3800001205000001d60501000002050400000269080000020e01000003ad7a00007806000005740301000000000222040000021d03000002bb00000004967e00008d09000002f3010000028203000002d802000004947c0000dcb7000003050117840d000013fb000004ea010100000000990000000400000000000401e31601001c0071ba00006c2c01002dfa0000ffffffff0d0000000222040000028203000002820b0000026cf100001bffffffff0d00000007ed03000000009f6cf1000003f3011cf2e60000ffffffff0c00000003f4011112e0e60000ffffffff06000000020d1512c1e60000ffffffff060000000495110eb3e60000ffffffff0600000001cf04120000000000000000007e000000040000000000040fe31601001c008cf200002b2d01002dfa0000025a0a000002c1e9000002bd020000029003000003e98c0000b7e9000001c804010003a69d0000900300000199040100000002220400000282030000025f02000004ff8d00003e0500000294010002820b000017c45200006cf1000003ea0101000000006f0000000400000000000401e31601001c00c80d0100bd2d01002dfa0000ffffffff580000000222040000021d03000002e60200000224f100001bffffffff5800000004ed00029f24f1000001f3011da3e70000501e000001f4011113e1e70000ffffffff0d000000029e01000000000000003a000000040000000000040fe31601001c009ec00000492e01002dfa00000222040000021d03000002e602000017be1f000024f1000001eb0101000000003a000000040000000000040fe31601001c00e6d60000782e01002dfa00000222040000021d03000002e102000017ce4b00001af1000001eb0101000000005f0000000400000000000401e31601001c00ca050100a72e01002dfa0000ffffffff0a0000000222040000027f08000002c00600001bffffffff0a00000007ed03000000009fc006000002f3010e7de80000ffffffff0900000002f40111000000000034000000040000000000040fe31601001c00540c0100fb2e01002dfa00000222040000027f08000017ee500000c006000001ea0101000000570100000400000000000401e31601001c00bafb00002a2f01002dfa0000ffffffff570000000222040000021d030000026e030000027ff000001bffffffff5700000007ed03000000009f7ff0000001f3011c27ea0000ffffffff3b00000001f40111121aea0000ffffffff3b0000000257091e3aea0000681e0000020e111e64ea0000801e000005b70d1f71ea0000981e0000069205160000123aea0000ffffffff07000000020f401264ea0000ffffffff0700000005b70d0e71ea0000ffffffff07000000069205160000139eea0000ffffffff05000000020f2b1246ea0000ffffffff03000000020f11127eea0000ffffffff03000000059f310e8bea0000ffffffff0200000006b30516000013bcea0000ffffffff03000000020f11123aea0000ffffffff0900000002090d1264ea0000ffffffff0900000005b70d0e71ea0000ffffffff080000000692051600000000000000000000e2000000040000000000040fe31601001c0011e50000843001002dfa00000222040000021d030000026e03000002b907000004147c000037b6000001050100177f7100007ff0000002ea010100027100000004301200009e07000004b60104eeb100005b050000049e01000000025a0a000002d2060000023f000000033e0d00009e070000038e050103a2ad0000ab07000003aa030103781f00006705000003af050103853400007405000003da030100027100000003c73c0000690b000003cd040100000205040000023d030000024c01000003d03700004f050000050f01010000000000fe0600000400000000000401e31601001c0075f10000773101002dfa0000ffffffffb30200000222040000028203000002f3020000022df100001bffffffffb302000007ed03000000009f2df1000009f3011d44f60000b01e000009f401111d38f60000001f0000048b0309121af60000ffffffff0f000000042e111210f20000ffffffff0f000000067c160e02f20000ffffffff0f000000017504120000134ef20000ffffffff0300000004351d13d8f30000ffffffff05000000043908134ef20000ffffffff09000000043c1513e5f30000ffffffff0100000004400c13e5f30000ffffffff0100000004440c1305f40000ffffffff0100000004480c2305f40000501f0000040013f2f30000ffffffff0100000004690c1202f80000ffffffff12000000046a2b1398f70000ffffffff0300000006a01613c4f70000ffffffff0b00000006a31a13a4f70000ffffffff0100000006a1160013f2f30000ffffffff01000000046f0c1e02f80000681f000004702b1398f70000ffffffff0300000006a01613c4f70000ffffffff0700000006a31a13a4f70000ffffffff0100000006a1160013d2f20000ffffffff04000000044e251226f60000ffffffff03000000044e181230f20000ffffffff030000000695110e22f20000ffffffff0300000001d10412000013d2f20000ffffffff010000000441211226f60000ffffffff010000000441141230f20000ffffffff010000000695110e22f20000ffffffff0100000001d10412000013d2f20000ffffffff010000000445211226f60000ffffffff010000000445141230f20000ffffffff010000000695110e22f20000ffffffff0100000001d1041200001226f60000ffffffff030000000454141230f20000ffffffff030000000695110e22f20000ffffffff0300000001d10412000013d2f20000ffffffff010000000463211226f60000ffffffff010000000463141230f20000ffffffff010000000695110e22f20000ffffffff0100000001d10412000012a8f60000ffffffff07000000047d09135ff40000ffffffff0700000008b30d0012b4f60000ffffffff1a000000047d09136cf40000ffffffff1a00000008ab0d001386f20000ffffffff05000000047a051399f20000ffffffff010000000482111ca8f60000ffffffff0300000004350128135ff40000ffffffff0300000008b30d000e82f30000ffffffff07000000046401111debf60000801f00000468012b0edef60000ffffffff080000000854011a0edef60000ffffffff03000000085401330ef4f40000ffffffff0300000008540122000e99f20000ffffffff010000000468013b0efef60000ffffffff090000000468012b0ef2f30000ffffffff01000000046d012f0e99f20000ffffffff05000000047a011b0eacf20000ffffffff01000000047901090e79f40000ffffffff05000000047b012e1ca8f60000ffffffff08000000047a011b135ff40000ffffffff0800000008b30d000e99f20000ffffffff010000000470011b0e79f40000ffffffff050000000471012e1ca8f60000ffffffff080000000470011b135ff40000ffffffff0800000008b30d000e7cf50000ffffffff07000000047501281cc0f60000ffffffff0700000004af010d12a0f40000ffffffff0700000008b70d0e93f40000ffffffff070000000a92051600000ec7f40000ffffffff0500000004b3010a1cccf60000ffffffff0100000004ad011312baf40000ffffffff0100000008bb0d0eadf40000ffffffff010000000ab3051600001c26f60000ffffffff0300000004ab01141230f20000ffffffff030000000695110e22f20000ffffffff0300000001d1041200000e86f20000ffffffff0700000004a601090ebff20000ffffffff0300000004a701090e4ef20000ffffffff0100000004a501170e4ef20000ffffffff0100000004bb01150e94f30000ffffffff0300000004bb01090ee5f30000ffffffff0300000004be010c0ed2f20000ffffffff0300000004c401121c26f60000ffffffff0100000004c401051230f20000ffffffff010000000695110e22f20000ffffffff0100000001d1041200000ed2f20000ffffffff01000000049e011d1c26f60000ffffffff01000000049e01101230f20000ffffffff010000000695110e22f20000ffffffff0100000001d1041200001386f20000ffffffff050000000479051386f40000ffffffff05000000048106134ef20000ffffffff0300000004341d1360f20000ffffffff0b000000043219134ef20000ffffffff070000000432191373f20000ffffffff04000000043116134ef20000ffffffff190000000431161373f20000ffffffff04000000043016134ef20000ffffffff06000000043016121af60000ffffffff0a000000042d111210f20000ffffffff0a000000067c160e02f20000ffffffff0a000000017504120000000000000000000097050000040000000000040fe31601001c006b0d0100b73601002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a0040100000205040000023d030000022a020000049a8c0000f80a000005ab0100022401000003c732000048050000057301010002a6010000038554000088050000054b020100020201000003e3530000600600000516030100027a00000003ad6b0000ba07000005d501010002b101000003232a00006d06000005ed0301000291000000032370000083060000059b030100029c01000003511a00004f050000050f01010002f801000004266f0000f80a000005ab010002da0000000386240000480500000573010100023e02000003ba25000088050000054b02010002ce000000032a340000600600000516030100021901000003b8870000ba07000005d50101000285000000035b1800006d06000005ed0301000253020000031755000083060000059b030100024c01000003d03700004f050000050f010100000269080000021f0000000465140000820b000009d401000200000000030f8a00009c06000009f702010002720200000484a50000820b000009d4010002b202000003754b00009c06000009f7020100000002bf05000002340400000272020000032c5a0000740a000006f1050103ce7000004103000006f3050103435300003a03000006ed050100027f0100000347230000ae050000069905010002ee0100000352660000740a000006f1050103393a00004103000006f30501033b8600003a03000006ed050100022f01000003173e0000ae0500000699050100000002d2060000027100000003c73c0000690b000007cd040103aba60000210b000007a404010390b000008307000007e4040103aba60000210b000007a40401033c490000ab07000007aa030103788300009e070000078e0501037d5200007405000007da030103dc1300006705000007af050103c73c0000690b000007cd040103c73c0000690b000007cd040103aba60000210b000007a4040100023f00000003bc3e00008307000007e4040103bc3e00008307000007e4040103b9440000210b000007a404010351980000690b000007cd040103b9440000210b000007a4040103a2ad0000ab07000007aa0301033e0d00009e070000078e050103853400007405000007da030103781f00006705000007af05010351980000690b000007cd040100020c02000003dd6f0000690b00000ad004010002d10100000332560000690b00000ad00401035f730000970800000a7f05010002a802000003744800008307000007e40401000002c1e9000002bd02000002880300000371a800009ee900000b670401000315800000880300000b510401029003000003e98c0000b7e900000bc804010003a69d0000900300000b9904010000000222040000028203000002bd02000004276d000043050000027b010447ad00003e0500000294010002f302000004067b00009cb9000003080117cc3400002df1000004ea010103a66a000048b8000003c7010117587e000051f1000004ea01010298e90000032b870000ace9000003eb01010000025f02000004b94c000043050000027b0104ff8d00003e0500000294010000021d03000002f90000000437a20000690b000008b20104dd880000210b000008aa0104462e00009e07000008b60104f1ab00006705000008ba0100020202000003c8af0000b306000008470101031b5b00003c0700000853010100028901000003b263000038080000083301010002bd010000030a3500003c07000008530101000271000000044c940000690b000008b2010449130000210b000008aa0104301200009e07000008b60104da2000006705000008ba0100029d0200000323510000fb0200000874010100000000b5000000040000000000040fe31601001c0046f30000383801002dfa0000025a0a000002d20600000271000000046a2100000904000001940103c73c0000690b000001cd040103c73c0000690b000001cd040100020c02000003dd6f0000690b000003d0040103dd6f0000690b000003d0040100023f000000045b330000090400000194010000000222040000028203000002bd02000016e53f0000390a0000029e0100025f020000160f2b0000390a0000029e01000000004e0300000400000000000401e31601001c006ae70000d23801002dfa0000ffffffff5b01000002220400000282030000024c0b000002ebfa00001bffffffff5b01000007ed03000000009febfa000009f3011c53fd0000ffffffff5a01000009f401111247fd0000ffffffff5a0100000576091235fd0000ffffffff21000000052e1112b6fb0000ffffffff210000000a7c160ea8fb0000ffffffff21000000016e0412000013d4fb0000ffffffff0d000000052e11127efd0000ffffffff0e0000000532081377fc0000ffffffff0e00000006b30d00127efd0000ffffffff010000000532281377fc0000ffffffff0100000006b30d0013affc0000ffffffff0100000005320813bcfc0000ffffffff0100000005420f13c9fc0000ffffffff01000000054a0f13e6fb0000ffffffff0100000005511a139cfd0000ffffffff0300000005511a13e6fb0000ffffffff0a000000055f3413e6fb0000ffffffff01000000056111139cfd0000ffffffff0b00000005611115d4fb0000981f000005621e13bcfc0000ffffffff0100000005641013e9fc0000ffffffff01000000056815131ffc0000ffffffff0100000005691f135dfc0000ffffffff07000000056911135dfc0000ffffffff05000000056511130cfc0000ffffffff03000000055a1d13dcfc0000ffffffff01000000055a1d13d4fb0000ffffffff0a00000005541b13f9fb0000ffffffff0100000005541b13e6fb0000ffffffff01000000053616139cfd0000ffffffff0b00000005361613d4fb0000ffffffff09000000053a1a13bcfc0000ffffffff01000000053b0c13e9fc0000ffffffff01000000053e13131ffc0000ffffffff0100000005401b135dfc0000ffffffff0500000005400d135dfc0000ffffffff03000000053d0d13e6fb0000ffffffff0100000005490f139cfd0000ffffffff0d00000005490f1331fc0000ffffffff05000000054809128afd0000ffffffff01000000056f1f1291fc0000ffffffff0100000006bb0d0e84fc0000ffffffff010000000bb305160000139cfd0000ffffffff08000000056f1f1344fc0000ffffffff01000000056f121266fd0000ffffffff01000000056f051216fd0000ffffffff010000000a95110e08fd0000ffffffff0100000008d104120000000000000000000033020000040000000000040fe31601001c009a0b01001e3c01002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee9000001670401000315800000880300000151040100000205040000023d03000002f801000004266f0000f80a000005ab0100023e02000003ba25000088050000054b020100024c01000003d03700004f050000050f010100021901000003b8870000ba07000005d5010100022a020000049a8c0000f80a000005ab0100020201000003e3530000600600000516030100029c01000003511a00004f050000050f0101000002690800000200000000030f8a00009c06000009f7020100000002d2060000023f0000000351980000690b000006cd040103853400007405000006da030103781f00006705000006af0501000002bf050000023404000002ee010000033b8600003a03000008ed050103393a00004103000008f305010352660000740a000008f1050100022f01000003036400005f0a0000089b050103173e0000ae0500000899050100000002e800010002bd020000029003000003940e0000de0001000aca04010003134a0000900300000aa0040100000002220400000282030000025f02000004b94c000043050000027b0100024c0b0000047c270000a7b90000030401176a7d0000ebfa000004ea01010002bd0200000447ad00003e0500000294010000021d0300000271000000044c940000690b000007b20104da2000006705000007ba0100028802000003f1a60000fb02000007740101000000007d0700000400000000000401e31601001c0070dd0000903d01002dfa0000ffffffffa70300000222040000028203000002f30200000251f100001bffffffffa703000004ed00029f51f1000001f3011c5ef60000ffffffff7e03000001f401111c51f60000ffffffff7e030000059003091c84f60000ffffffff0e00000005f0011112dbf50000ffffffff0e000000077c160ecdf50000ffffffff0e000000026e041200000ee5f20000ffffffff0300000005f7011d0e18f40000ffffffff0500000005fb01080ee5f20000ffffffff0e00000005fe01150e25f40000ffffffff010000000502020c0e25f40000ffffffff010000000506020c0e45f40000ffffffff01000000050a020c2345f40000b01f000005000e45f40000ffffffff030000000519020c0e32f40000ffffffff01000000052b020c1c14f80000ffffffff15000000052c022b15e4f70000d81f000007a01613b1f70000ffffffff0100000007a11613d1f70000ffffffff0300000007a31a000e32f40000ffffffff010000000531020c1c14f80000ffffffff150000000532022b15e4f70000f01f000007a01613b1f70000ffffffff0100000007a11613d1f70000ffffffff0500000007a31a000e69f30000ffffffff04000000051002251c90f60000ffffffff050000000510021812fbf50000ffffffff050000000795110eedf50000ffffffff0500000002cf041200000e69f30000ffffffff01000000050302211c90f60000ffffffff050000000503021412fbf50000ffffffff050000000795110eedf50000ffffffff0500000002cf041200000e69f30000ffffffff01000000050702211c90f60000ffffffff050000000507021412fbf50000ffffffff050000000795110eedf50000ffffffff0500000002cf041200001c90f60000ffffffff070000000516021412fbf50000ffffffff070000000795110eedf50000ffffffff0700000002cf041200000e69f30000ffffffff01000000052502211c90f60000ffffffff050000000525021412fbf50000ffffffff050000000795110eedf50000ffffffff0500000002cf041200000e1df30000ffffffff05000000053c02050ed4f40000ffffffff090000000579022a1f01f5000008200000059902371f01f500002820000005a8022f0ed4f40000ffffffff0700000005c602161c70f60000ffffffff0600000005d902181c9cf50000ffffffff0600000005ec01090e8ff50000ffffffff060000000a80051b00000e0ef50000ffffffff0400000005e0020e0ea7f30000ffffffff0e000000052503110e30f30000ffffffff050000000529033b1d11f70000482000000529032b1faff500006020000009540122000e32f40000ffffffff01000000052e032f0e30f30000ffffffff05000000053b031b0e43f30000ffffffff01000000053a03090e01f50000ffffffff05000000053c032e1c24f70000ffffffff08000000053b031b131bf50000ffffffff0800000009b30d000e30f30000ffffffff010000000531031b0e01f50000ffffffff050000000532032e1c24f70000ffffffff080000000531031b131bf50000ffffffff0800000009b30d000e8ff50000ffffffff07000000053603280ee1f40000ffffffff01000000057203221c3cf70000ffffffff070000000571030d1242f50000ffffffff0700000009b70d0e35f50000ffffffff070000000b92051600000e69f50000ffffffff050000000575030a1c48f70000ffffffff01000000056f030d125cf50000ffffffff0100000009bb0d0e4ff50000ffffffff010000000bb3051600001c90f60000ffffffff07000000056c031412fbf50000ffffffff070000000795110eedf50000ffffffff0700000002cf041200000e1df30000ffffffff07000000056703090e56f30000ffffffff03000000056803090ee5f20000ffffffff01000000056603170ee5f20000ffffffff01000000057d03150eb9f30000ffffffff03000000057d03090e25f40000ffffffff03000000057f030c0e69f30000ffffffff03000000058503121c90f60000ffffffff050000000585030512fbf50000ffffffff050000000795110eedf50000ffffffff0500000002cf041200000e69f30000ffffffff01000000055f031d1c90f60000ffffffff03000000055f031012fbf50000ffffffff030000000795110eedf50000ffffffff0300000002cf041200000e30f30000ffffffff07000000054402110e1df30000ffffffff05000000053b02051c24f70000ffffffff05000000053f0209131bf50000ffffffff0500000009b30d000e5af70000ffffffff030000000541021b1c30f70000ffffffff0b000000053f02091328f50000ffffffff0b00000009ab0d000e0ef50000ffffffff05000000054302060ee5f20000ffffffff0300000005f6011d0ef7f20000ffffffff1000000005f401190ee5f20000ffffffff0700000005f401190e0af30000ffffffff0400000005f301160ee5f20000ffffffff1b00000005f301160e0af30000ffffffff0400000005f201160ee5f20000ffffffff0600000005f201161c84f60000ffffffff0e00000005ef011112dbf50000ffffffff0e000000077c160ecdf50000ffffffff0e000000026e041200000000000000000000c00000000400000000000401e31601001c005bd40000574301002dfa0000ffffffffa00000000222040000028203000002dc02000002af0900001bffffffffa000000004ed00029faf09000001f3011d9a0601007820000001f401111e5c06010090200000036618131f060100ffffffff16000000033f131238060100ffffffff1e0000000340130e2b060100ffffffff1e00000005920516000012cc060100ffffffff010000000366090ebe060100ffffffff0100000004cf0412000000000000000077000000040000000000040fe31601001c00cdbe00006a4401002dfa0000025a0a000002d206000002a802000004b12100000904000001940103301f0000ab07000001aa030103e19900009e070000018e05010000000222040000028203000002dc020000027b03000004c55a00009a030000023e0100000000006c000000040000000000040fe31601001c0013be0000f44401002dfa00000222040000028203000002dc02000017d59f0000af09000001ea0101000000025a0a000002c1e9000002bd020000029003000003e98c0000b7e9000002c804010003a69d00009003000002990401000000006f0000000400000000000401e31601001c00a3cb0000724501002dfa0000ffffffff9c0000000222040000021d03000002e60200000293f000001bffffffff9c00000004ed00059f93f0000001f3011d7d070100a820000001f4011113bb070100ffffffff1900000002a901000000000000003a000000040000000000040fe31601001c009ec00000084601002dfa00000222040000021d03000002e602000017ee86000093f0000001eb0101000000003a000000040000000000040fe31601001c00e6d60000374601002dfa00000222040000021d03000002e1020000176f93000089f0000001eb010100000000310100000400000000000401e31601001c008ec20000664601002dfa0000ffffffff8f0000000222040000028203000002bf050000020bfb00001bffffffff8f00000007ed03000000009f0bfb000001f3011d330a0100c020000001f401111e270a0100d8200000059c0912150a0100ffffffff12000000052c111241090100ffffffff12000000067c160e33090100ffffffff12000000026e04120000135f090100ffffffff0e000000052e1113a2090100ffffffff010000000532081371090100ffffffff0700000005370813b5090100ffffffff010000000537081384090100ffffffff0b00000005400813c8090100ffffffff0100000005400813d5090100ffffffff05000000054c0f13e2090100ffffffff0500000005410c20f5090100ffffffff07000000050000000000000000003f010000040000000000040fe31601001c00dbee0000654801002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee9000001670401000315800000880300000151040100000205040000023d03000002f801000004266f0000f80a000005ab0100024c01000003d03700004f050000050f010100025200000004a5410000f80a000005ab0100000002bf050000023404000002ee01000003393a00004103000006f3050100022f01000003173e0000ae050000069905010002560100000326320000740a000006f1050103124b00004103000006f30501034cac00003a03000006ed050100022a02000003bb300000ae050000069905010000000002220400000282030000025f02000004b94c000043050000027b010002bf0500000413610000fcb7000003220117855100000bfb000004ea010100000000850100000400000000000401e31601001c00b7b900009b4901002dfa0000ffffffff620000000222040000021d030000026e030000026cf000001bffffffff6200000007ed03000000009f6cf0000001f3011c0c0c0100ffffffff4400000001f4011112ff0b0100ffffffff4400000002690912320c0100ffffffff09000000021e0d0e1f0c0100ffffffff09000000033a012a0012450c0100ffffffff07000000021f11127b0c0100ffffffff0700000003bb0d0e880c0100ffffffff0600000006bb0516000013b50c0100ffffffff0500000002274912510c0100ffffffff0900000002272e12950c0100ffffffff0900000003b70d0ea20c0100ffffffff08000000069d05160000125d0c0100ffffffff0500000002271112c80c0100ffffffff05000000039f310ed50c0100ffffffff0400000007b30516000013f30c0100ffffffff0300000002271112450c0100ffffffff07000000022811127b0c0100ffffffff0700000003bb0d0e880c0100ffffffff0700000006bb05160000000000000000000034010000040000000000040fe31601001c0011e50000104b01002dfa00000222040000021d030000026e030000028705000004aca7000067b60000011b010017c22200006cf0000002ea01010002a700000003b889000032080000034d010100023500000003d3b20000270800000339010100023f00000004a57300006705000003ba0104ba7f00009e07000003b601040b2c00005b050000039e01000000025a0a000002d206000002d101000003a23300006705000004b7050103eba70000740500000459030103bf1500009e070000049905010383490000ab0700000429030100027100000003c73c0000690b000005cd040100023f00000003781f00006705000005af050103853400007405000005da030100000205040000023d030000026802000003782800004f050000060f010100000000001a0100000400000000000401e31601001c00cc150100144c01002dfa0000ffffffffb50000000222040000022e07000002740300001bffffffffb500000007ed03000000009f740300000199011cd81c0000ffffffffa5000000019a011112661c0000ffffffffa5000000052f091c441d0000ffffffff05000000020001290e371d0000ffffffff050000000672051b001c771c0000ffffffff270000000201010913241e0000ffffffff0500000002e41513241e0000ffffffff0100000002e713001c831c0000ffffffff370000000206010913311e0000ffffffff0b00000002f515133e1e0000ffffffff0100000002f91f001c771c0000ffffffff15000000020a010513241e0000ffffffff0100000002e7130000000000000000130100000400000000000401e31601001c00b10c0100d64d01002dfa0000ffffffff290100000222040000027f08000002250a00001bffffffff2901000007ed03000000009f250a000003f3011df70f0100f020000003f401111ebe0f010010210000041d01127a0f0100ffffffff17000000021e190e6c0f0100ffffffff170000000175041200127a0f0100ffffffff0a0000000239100e6c0f0100ffffffff0a0000000175041200129a0f0100ffffffff060000000246090e8c0f0100ffffffff0600000001d1041200127a0f0100ffffffff0400000002520d0e6c0f0100ffffffff040000000175041200129a0f0100ffffffff0800000002540a0e8c0f0100ffffffff0800000001d10412000000000000000091000000040000000000040fe31601001c002ef60000ad4f01002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a004010000000222040000027f080000023207000002250a000004d6a00000250a0000021b01000000000034000000040000000000040fe31601001c00540c01003b5001002dfa00000222040000027f0800001740a90000250a000001ea0101000000a40000000400000000000401e31601001c00310401006a5001002dfa0000ffffffffa00000000222040000027f08000002300900001bffffffffa000000007ed03000000009f3009000001f3011c5e110100ffffffff9100000001f4011112f3100100ffffffff91000000041d0112e1100100ffffffff910000000503051225110100ffffffff01000000021c090e17110100ffffffff0100000003d1041200000000000000000083000000040000000000040fe31601001c0000f400009c5101002dfa00000222040000027f0800000232070000025b090000047a9200005b09000001020100023009000004afac00003009000002020100000000025a0a000002e800010002bd020000029003000003940e0000de00010003ca04010003134a00009003000003a004010000000034000000040000000000040fe31601001c00540c0100395201002dfa00000222040000027f080000170f8c00003009000001ea01010000001f0100000400000000000401e31601001c0073f90000685201002dfa0000ffffffff6b0100000222040000027f08000002c80800001bffffffff6b01000007ed03000000009fc808000004f3011d5a1301003021000004f401111e1513010060210000051d0112d1120100ffffffff16000000022c140ec3120100ffffffff160000000175041200139c130100ffffffff100000000249091321130100ffffffff1e000000024d0912d1120100ffffffff08000000024a0c0ec3120100ffffffff08000000017504120012f1120100ffffffff01000000024b0e0ee3120100ffffffff0100000001d1041200139c130100ffffffff1200000002430d1321130100ffffffff1e00000002440d1321130100ffffffff1e000000023e2e000000000000009d000000040000000000040fe31601001c0096eb0000aa5401002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a004010000000222040000027f080000023207000002c80800000472590000c808000002250104eb840000a9050000021901000000000034000000040000000000040fe31601001c00540c0100385501002dfa00000222040000027f0800001742280000c808000001ea01010000003f000000040000000000040fe31601001c00d2f10000675501002dfa00000222040000027f080000023207000002af08000004f2420000af0800000111010000000000620000000400000000000401e31601001c0038ef0000a65501002dfa0000ffffffff4b0000000222040000021d03000002e10200000289f000001bffffffff4b00000004ed00059f89f0000001f3010e40140100ffffffff2100000001f401110000000000003a000000040000000000040fe31601001c00e6d600000b5601002dfa00000222040000021d03000002e1020000176f93000089f0000001eb010100000000930000000400000000000401e31601001c0059dc00003a5601002dfa0000ffffffff830000000222040000027f080000021c0300001bffffffff8300000007ed03000000009f1c03000003f3011c5a150100ffffffff7f00000003f40111124c150100ffffffff7f000000041d011228150100ffffffff170000000204190e1a150100ffffffff17000000016e041200000000000000007e000000040000000000040fe31601001c00540c01002c5701002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee900000167040100031580000088030000015104010000000222040000027f0800000232070000021c03000004bd1800001c030000020201000017a03800001c03000003ea0101000000810000000400000000000401e31601001c0044d30000ca5701002dfa0000ffffffffb30000000222040000022e07000002770501001bffffffffb300000007ed03000000009f77050100030d021c23160100ffffffffb2000000030e02111217160100ffffffffb200000001b2091346160100ffffffff07000000017f260000000000000065000000040000000000040fe31601001c00f2ef0000a85801002dfa00000222040000022e07000004867b0000bab50000016c0117b72f000077050100020502010000025a0a0000023a050000022c05000002bd02000003ad9300008eb50000031004010000000000cb0000000400000000000401e31601001c008cca00003c5901002dfa0000ffffffff4b0000000222040000028203000002dc02000002150900001bffffffff4b00000007ed03000000009f1509000001f3011ccf170100ffffffff3d00000001f401111291170100ffffffff3c0000000357181354170100ffffffff03000000031f13126d170100ffffffff090000000320130e60170100ffffffff090000000592051600001201180100ffffffff010000000357090ef3170100ffffffff0100000004d10412000000000000000077000000040000000000040fe31601001c00cdbe00004c5a01002dfa0000025a0a000002d2060000023f000000045b3300000904000001940103a2ad0000ab07000001aa0301033e0d00009e070000018e05010000000222040000028203000002dc020000027b03000004815d0000dc030000021e0100000000006c000000040000000000040fe31601001c0013be0000d65a01002dfa00000222040000028203000002dc020000176c1e00001509000001ea0101000000025a0a000002e800010002bd020000029003000003940e0000de00010002ca04010003134a00009003000002a0040100000000890000000400000000000401e31601001c00fbc00000545b01002dfa0000ffffffffbd0100000222040000022e0700000290fb00001bffffffffbd01000007ed03000000009f90fb0000010d021cd3180100ffffffffb5010000010e021112c7180100ffffffffb501000002a10915f61801009021000002634f15f6180100b8210000025d4f0000000000000065000000040000000000040fe31601001c00f2ef0000245d01002dfa00000222040000022e07000004f7230000f9b60000015501173e0c000090fb0000020502010000025a0a0000023a050000023405000002bd020000030e110000a6b6000003ab03010000000000130100000400000000000401e31601001c00b5140100ba5d01002dfa0000ffffffffea0100000222040000027f08000002af1401001bffffffffea01000007ed03000000009faf14010003f3011ddc1a0100d821000003f401111ea31a010000220000041d01125f1a0100ffffffff190000000226190e511a0100ffffffff19000000016e041200125f1a0100ffffffff050000000244100e511a0100ffffffff05000000016e041200127f1a0100ffffffff0a0000000251090e711a0100ffffffff0a00000001cf041200125f1a0100ffffffff07000000025f0d0e511a0100ffffffff07000000016e041200127f1a0100ffffffff0c00000002610a0e711a0100ffffffff0c00000001cf0412000000000000000091000000040000000000040fe31601001c00e4bf0000ef5f01002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000000222040000027f080000023207000002af1401000423360000af140100022301000000000034000000040000000000040fe31601001c00540c01007d6001002dfa00000222040000027f0800001792a20000af14010001ea0101000000d20000000400000000000401e31601001c00f70b0100ac6001002dfa0000ffffffffdc0000000222040000027f08000002760900001bffffffffdc00000004ed00019f7609000001f3011c921c0100ffffffffb500000001f4011112591c0100ffffffffb5000000061d0112021c0100ffffffff050000000311090ef41b0100ffffffff0500000002d104120013d41c0100ffffffff1700000003250513361c0100ffffffff0d00000007031212221c0100ffffffff0d000000030f140e141c0100ffffffff0d000000027504120000000000000000a4000000040000000000040fe31601001c00fbdf0000506201002dfa0000025a0a000002e800010002bd020000029003000003940e0000de00010001ca04010003134a00009003000001a00401028803000003e3750000d0000100016e04010003262f000088030000014604010000023a05000003ad0f000062b900000325060100000222040000027f08000002320700000276090000041030000076090000020b01000000000034000000040000000000040fe31601001c00540c01002d6301002dfa00000222040000027f08000017f65900007609000001ea01010000003f000000040000000000040fe31601001c00250e01005c6301002dfa00000222040000027f0800000232070000020b0a000004f75100000b0a00000108010000000000430100000400000000000401e31601001c001a0301009e6301002dfa0000ffffffff400000000222040000021d03000002520b000002200600001bffffffff4000000007ed03000000009f2006000002f3011d2e1f01002822000002f401111e211f010048220000045e091e0f1f0100682200000438131ef11e010080220000041f1d1ee51e0100982200000411091ec21e0100b022000004051b15591e0100c822000006c30d0012ce1e0100ffffffff0100000004061213661e0100ffffffff0100000006ab0d000013841e0100ffffffff0100000004101412fd1e0100ffffffff0700000004101412ce1e0100ffffffff03000000040d1e13661e0100ffffffff0300000006ab0d0012c21e0100ffffffff03000000040b1b13591e0100ffffffff0300000006c30d0000000013a21e0100ffffffff1200000004392700000000000000000f010000040000000000040fe31601001c00830a0100376501002dfa0000025a0a000002d2060000023f00000003ef940000110b000001f0050103b9440000210b000001a4040100000205040000023d03000002bb0000000476a9000018030000053d0100000002bf0500000234040000026b01000003b76900003a03000006ed0501000000000222040000021d03000002710000000442190000110b000002c2010449130000210b000002aa010002520b000002860b000004140e000051b600000304010485af00005cb60000030f01045b96000042b60000030a010002870b000004b01400005db60000031e0100024206000004d75f00002cb6000003370100172c3b00002006000004ea010100000000930000000400000000000401e31601001c0021ee0000766601002dfa0000ffffffff5b0000000222040000027f08000002c20800001bffffffff5b00000007ed03000000009fc208000003f3011c48200100ffffffff5700000003f40111123a200100ffffffff57000000041d011216200100ffffffff100000000204190e08200100ffffffff100000000175041200000000000000007e000000040000000000040fe31601001c00540c0100666701002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f000088030000014604010000000222040000027f080000023207000002c20800000478ae0000c20800000202010000172a650000c208000003ea01010000000f0100000400000000000401e31601001c0057e40000056801002dfa0000ffffffff310100000222040000027f08000002050a00001bffffffff3101000004ed00019f050a000001f3011d91220100e022000001f401111e5822010010230000071d0112ab210100ffffffff0f000000035a0e0e9d210100ffffffff0f000000027504120013bf210100ffffffff0e00000008031212ab210100ffffffff0500000003770e0e9d210100ffffffff0500000002750412001208220100ffffffff08000000080a1a1cf5210100ffffffff08000000099a021a13d6210100ffffffff080000000aee1c00001234220100ffffffff01000000037b0f0e26220100ffffffff0100000006cf04120000000000000000fa000000040000000000040fe31601001c00b2080100c86a01002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f000088030000014604010000023a05000003ad0f000062b9000003250601023405000002bd02000003819e000059b7000004ab030100000002770a000002cd020000020c020000043a8d000046b7000005e301000002bd02000003c30d0000b1b4000006930201000002c1e9000002bd020000029003000003e98c0000b7e9000007c804010003a69d000090030000079904010000000222040000027f080000023207000002050a000004b88e0000050a0000024d01000000000034000000040000000000040fe31601001c00540c01001c6c01002dfa00000222040000027f08000017f4410000050a000001ea01010000006f0000000400000000000401e31601001c0042db00004b6c01002dfa0000ffffffff720000000222040000021d03000002e602000002e2e600001bffffffff7200000004ed00039fe2e6000001f3011d412301004023000001f40111137f230100ffffffff16000000029601000000000000003a000000040000000000040fe31601001c009ec00000e06c01002dfa00000222040000021d03000002e602000017db650000e2e6000001eb0101000000003a000000040000000000040fe31601001c00e6d600000f6d01002dfa00000222040000021d03000002e10200001719390000d5e6000001eb010100000000ca0100000400000000000401e31601001c002dd200003e6d01002dfa0000ffffffff450000000222040000021d030000026e03000002f3f000001bffffffff4500000007ed03000000009ff3f0000001f3011d9d2501005823000001f401111e902501007023000002760913b0250100ffffffff02000000023c2e12dd250100ffffffff05000000023d111241260100ffffffff05000000039f310e34260100ffffffff0500000006b3051600001ebd25010088230000023b0d0efb250100ffffffff08000000033a012a0e08260100ffffffff01000000033a011800134e260100ffffffff03000000023c4912e9250100ffffffff01000000023c2e1268260100ffffffff0100000003b70d0e5b260100ffffffff0100000006920516000013ca250100ffffffff03000000023c1112dd250100ffffffff03000000023c111241260100ffffffff03000000039f310e34260100ffffffff0300000006b3051600001386260100ffffffff01000000023c1113b0250100ffffffff0200000002370d12dd250100ffffffff0300000002370d1241260100ffffffff03000000039f310e34260100ffffffff0300000006b3051600001315260100ffffffff0100000002370d000000000000000036010000040000000000040fe31601001c0011e50000d86e01002dfa00000222040000021d030000026e0300000282050000043e2d00001fb700000134010017e5800000f3f0000002ea010100028901000003b26300003808000003330101033a20000027080000033901010394800000f6050000033001010002f90000000496aa00005b050000039e0104462e00009e07000003b601000202020000032527000032080000034d010103d9a40000ae060000034a010103d9a40000ae060000034a0101000000025a0a000002d20600000271000000037d5200007405000004da030103dc1300006705000004af050103c73c0000690b000004cd0401033c490000ab07000004aa030103788300009e070000048e050100000205040000023d030000029c01000003511a00004f050000050f01010000000000620000000400000000000401e31601001c0075c90000cb6f01002dfa0000ffffffff350000000222040000021d03000002e1020000021af100001bffffffff3500000004ed00029f1af1000001f3010e2b270100ffffffff1300000001f401110000000000003a000000040000000000040fe31601001c00e6d60000307001002dfa00000222040000021d03000002e102000017ce4b00001af1000001eb010100000000b50100000400000000000401e31601001c00981301005f7001002dfa0000ffffffff6e0000000222040000021d030000028c0700000276f000001bffffffff6e00000007ed03000000009f76f0000001f3011d54290100a023000001f401111e47290100b8230000046d09122f290100ffffffff150000000410150e22290100ffffffff0b000000025101380e22290100ffffffff010000000251011a0eaa290100ffffffff0900000002510127001367290100ffffffff01000000041130122f290100ffffffff0d0000000411150eaa290100ffffffff0d00000002510127001367290100ffffffff01000000041215122f290100ffffffff030000000412150eaa290100ffffffff0300000002510127001e7a290100d023000004151315ca290100e823000002ab0d00128c290100ffffffff0500000004191a13b7290100ffffffff0500000002af0d00128c290100ffffffff05000000041a1b13b7290100ffffffff0500000002af0d00127a290100ffffffff0200000004190913ca290100ffffffff0200000002ab0d00122f290100ffffffff070000000413150eaa290100ffffffff0700000002510127000000000000000000e2000000040000000000040fe31601001c006f150100607101002dfa00000222040000021d03000002e500000003fa360000ae060000014a010103e00b0000370700000150010100028c0700000290070000041760000088b600000207010017bb48000076f0000003ea010100025c00000003ed670000380800000133010100024902000004023f0000210b000001aa0100023f00000004652c00008307000001ae01000000025a0a000002d206000002d101000003925800008307000004f8040103925800008307000004f804010002930100000305570000210b000004a8040100000000000100000400000000000401e31601001c00e00a0100017201002dfa0000ffffffff490100000222040000021d03000002e1020000029cf000001bffffffff4901000007ed03000000009f9cf0000001f3011ca72b0100ffffffff3e01000001f40111120c2b0100ffffffff3e010000050c091c182b0100ffffffff120000000291011b13362b0100ffffffff0300000004401c13362b0100ffffffff03000000044032000e422b0100ffffffff03000000029301170e422b0100ffffffff07000000029e011f1d5c2b01000024000002b3011b1f4f2b01003024000006920516001f422b01006024000002b3012b1f692b01009024000002b7011b000000000000000097000000040000000000040fe31601001c00b5c10000207401002dfa00000222040000021d03000002e706000004466c00002207000001170104155900005c030000033101000000025a0a000002d20600000271000000046a2100000904000002940103c73c0000690b000002cd0401033c490000ab07000002aa030103788300009e070000028e050103aba60000210b000002a40401000000003a000000040000000000040fe31601001c00e6d60000d47401002dfa00000222040000021d03000002e102000017482400009cf0000001eb010100000000df0000000400000000000401e31601001c0003020100037501002dfa0000ffffffffe40000000222040000027f08000002bb0800001bffffffffe400000007ed03000000009fbb08000003f3011d582d0100c024000003f401111e1f2d0100d8240000051d0112db2c0100ffffffff10000000020a150ecd2c0100ffffffff10000000017504120012fb2c0100ffffffff0f0000000218090eed2c0100ffffffff0f00000001d1041200139a2d0100ffffffff01000000022a0912db2c0100ffffffff0b000000020b150ecd2c0100ffffffff0b00000001750412000000000000000091000000040000000000040fe31601001c005cff0000717601002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a004010000000222040000027f080000023207000002bb080000041b9d0000bb080000020601000000000034000000040000000000040fe31601001c00540c0100007701002dfa00000222040000027f08000017dd0f0000bb08000001ea01010000003f000000040000000000040fe31601001c00d2f100002f7701002dfa00000222040000027f080000023207000002af08000004f2420000af0800000111010000000000ce0100000400000000000401e31601001c00a2f700006e7701002dfa0000ffffffff0d0900000222040000027f08000002980500001bffffffff0d09000007ed03000000009f9805000008f3011da52f0100f024000008f401111eeb25000010250000076e111239250000ffffffff2c00000002680f0efe240000ffffffff2c00000001750412001ed925000040250000028612120c250000ffffffff0a000000031c140ef1240000ffffffff0a0000000175041200120c250000ffffffff0a000000032a100ef1240000ffffffff0a0000000175041200122c250000ffffffff060000000335090e1e250000ffffffff0600000001d10412000012f7250000ffffffffd1010000028a0d13e72f0100ffffffff0500000002581a1309260000ffffffff4b000000026212131b260000ffffffff4f000000025f0e15092600005825000002600e131b260000ffffffff4b00000002610f001ed925000070250000029410120c250000ffffffff0a000000031c140ef1240000ffffffff0a0000000175041200120c250000ffffffff0a000000032a100ef1240000ffffffff0a0000000175041200122c250000ffffffff060000000335090e1e250000ffffffff0600000001d1041200000000000000000034000000040000000000040fe31601001c00540c01009c7e01002dfa00000222040000027f08000017d84a00009805000001ea01010000003f000000040000000000040fe31601001c0024e80000cb7e01002dfa00000222040000027f0800000232070000022909000004795500002909000001070100000000001f0100000400000000000401e31601001c000aed00000b7f01002dfa0000ffffffffcf0200000222040000027f08000002170400001bffffffffcf02000007ed03000000009f1704000004f3011de43101008825000004f401111e9f310100b8250000051d01125b310100ffffffff1400000002490d0e4d310100ffffffff14000000016e0412001326320100ffffffff05000000026909125b310100ffffffff09000000026b1b0e4d310100ffffffff09000000016e041200127b310100ffffffff01000000026b0a0e6d310100ffffffff0100000001cf04120013ab310100ffffffff76000000026e091326320100ffffffff1c00000002630d13ab310100ffffffff7600000002640d13ab310100ffffffff76000000025e2e000000000000009d000000040000000000040fe31601001c0018c90000da8101002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000000222040000027f08000002320700000217040000040a13000017040000023f0104c5910000a9050000023301000000000034000000040000000000040fe31601001c00540c0100678201002dfa00000222040000027f08000017bc6400001704000001ea01010000003f000000040000000000040fe31601001c00c7e70000968201002dfa00000222040000027f08000002320700000200030000049e1a0000000300000152010000000000a10000000400000000000401e31601001c0040e30000d48201002dfa0000ffffffff2e0000000222040000028203000002dc02000002c90900001bffffffff2e00000007ed03000000009fc909000002f3011d6a330100e825000002f401111e0e33010000260000015218132d330100ffffffff0300000001181300129c330100ffffffff010000000152090e8e330100ffffffff0100000004cf041200000000000000005d000000040000000000040fe31601001c00cdbe0000c78301002dfa00000222040000028203000002dc020000027b03000004bf920000bb03000001140100000000025a0a000002d20600000271000000046a21000009040000029401000000006c000000040000000000040fe31601001c0013be0000518401002dfa00000222040000028203000002dc02000017023c0000c909000001ea0101000000025a0a000002c1e9000002bd020000029003000003e98c0000b7e9000002c804010003a69d0000900300000299040100000000400200000400000000000401e31601001c002bda0000cf8401002dfa0000ffffffff580000000222040000021d030000028c0700000207f100001bffffffff5800000007ed03000000009f07f1000001f3011c50360100ffffffff5000000001f401111243360100ffffffff50000000046909131e360100ffffffff0100000004192e1263360100ffffffff0700000004191a1300370100ffffffff0700000002af0d00131e360100ffffffff01000000041a1b1263360100ffffffff03000000041a1b1300370100ffffffff0300000002af0d001e753601001826000004190915203701003026000002ab0d001e2b360100482600000415130ec7360100ffffffff01000000023a01180ed4360100ffffffff04000000023a012a001e753601006026000004151315203701007826000002ab0d0013e1360100ffffffff0100000004161b13e1360100ffffffff0100000004171b12b4360100ffffffff030000000413150e0d370100ffffffff0300000002510127001394360100ffffffff0100000004121512b4360100ffffffff050000000412150e0d370100ffffffff0500000002510127001394360100ffffffff0700000004113012b4360100ffffffff050000000411150e0d370100ffffffff0500000002510127001387360100ffffffff090000000410301eb4360100902600000410150ea7360100ffffffff01000000025101380ea7360100ffffffff010000000251011a0e0d370100ffffffff0300000002510127001387360100ffffffff0b00000004101500000000000000003c010000040000000000040fe31601001c006f1501000f8601002dfa00000222040000021d030000028901000003b26300003808000001330101033a200000270800000139010100028c0700000290070000040516000033b700000207010017d377000007f1000003eb01010002f900000004526b00008307000001ae010002710000000449130000210b000001aa010002c701000003ff440000f60500000130010103973100003808000001330101000234020000035b390000ae060000014a0101030ea60000370700000150010100020202000003d9a40000ae060000014a0101032527000032080000014d010103d9a40000ae060000014a0101000000025a0a000002d206000002710000000390b000008307000004e404010390b000008307000004e4040100023f00000003b9440000210b000004a40401000000007d0100000400000000000401e31601001c005ec80000b18601002dfa0000ffffffff550100000222040000021d030000028c07000002d10500001bffffffff5501000004ed00059fd105000001f3011c03390100ffffffff1d01000001f4011112f6380100ffffffff1d01000003880913df380100ffffffff0700000003231015df380100a82600000323251216390100ffffffff2c0000000325201353390100ffffffff2c00000002af0d001e34390100c0260000032d1e1f60390100e026000002540122001e3439010000270000032e1e1f603901002027000002540122001222390100ffffffff06000000032f20136d390100ffffffff0600000002c30d001e343901004027000003271e1f603901006027000002540122001e343901008027000003281e1f60390100a027000002540122001222390100ffffffff06000000032920136d390100ffffffff0600000002c30d001234390100ffffffff2500000003331e0e60390100ffffffff2500000002540122000000000000000000c8000000040000000000040fe31601001c006f150100f78701002dfa00000222040000021d030000027100000004f2ac0000c905000001a20100028c07000002f305000004d65d000016b60000022201001760650000d105000003ea01010002a8020000043aa400008307000001ae010432990000110b000001c2010002bd010000030a3500003c07000001530101000000025a0a000002d206000002a802000003744800008307000004e4040103744800008307000004e4040103dd6c0000110b000004f0050100000000700000000400000000000401e31601001c002abf0000998801002dfa0000ffffffffd90000000222040000022e0700000217e700001bffffffffd900000007ed03000000009f17e70000020d021c263a0100ffffffffd8000000020e0211131a3a0100ffffffffd800000001ba0900000000000040000000040000000000040fe31601001c00f2ef00002f8901002dfa00000222040000022e070000040a770000bfb80000016c0117aca3000017e70000020502010000003b0200000400000000000401e31601001c0081120100708901002dfa0000fffffffff70400000222040000027f08000002950b00001bfffffffff704000004ed00039f950b000001f3011cce3d0100ffffffffc604000001f4011112773d0100ffffffffc6040000061d01126b3d0100ffffffff3900000003310e12b53c0100ffffffff090000000310190ea73c0100ffffffff09000000026e04120012b53c0100ffffffff0500000003151a0ea73c0100ffffffff05000000026e04120000126b3d0100ffffffff3900000003320e12b53c0100ffffffff090000000310190ea73c0100ffffffff09000000026e04120012b53c0100ffffffff0500000003151a0ea73c0100ffffffff05000000026e04120000126b3d0100ffffffff3900000003330e12b53c0100ffffffff090000000310190ea73c0100ffffffff09000000026e04120012b53c0100ffffffff0500000003151a0ea73c0100ffffffff05000000026e0412000012833d0100ffffffff1700000003431e13ee3c0100ffffffff170000000322190013013d0100ffffffff0a000000036e13150e3d0100c027000003722113013d0100ffffffff09000000037424131b3d0100ffffffff0600000003741312473d0100ffffffff090000000376200e3a3d0100ffffffff090000000780051b0013283d0100ffffffff0600000003841113283d0100ffffffff0a0000000380111e953d0100d827000003c00512d53c0100ffffffff010000000520090ec73c0100ffffffff0100000002cf04120000000000000000002d010000040000000000040fe31601001c00d4030100b28d01002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d00009003000001990401000002d206000002a802000003744800008307000003e4040100023f00000003b9440000210b000003a404010378470000590b0000035306010351980000690b000003cd0401045b330000090400000394010002d10100000332560000690b000004d00401035f73000097080000047f05010000000222040000027f080000023207000002950b00000438890000390a0000020d010409460000950b0000022c0104a65300008c0700000221010002b90600000496a40000b9060000050201000000000034000000040000000000040fe31601001c00540c01006e8e01002dfa00000222040000027f080000174f7f0000950b000001ea01010000005f0000000400000000000401e31601001c00260a01009d8e01002dfa0000ffffffff0a0000000222040000027f08000002320900001bffffffff0a00000007ed03000000009f3209000002f3010e693e0100ffffffff0900000002f40111000000000034000000040000000000040fe31601001c00540c0100f18e01002dfa00000222040000027f080000171aa000003209000001ea0101000000cd0000000400000000000401e31601001c00ec000100208f01002dfa0000ffffffffbe0100000222040000027f08000002c5fa00001bffffffffbe01000007ed03000000009fc5fa000002f3011d00400100f027000002f401111e7c3f010048280000061d0112ae3f0100ffffffff090000000138150ea03f0100ffffffff09000000036e04120013c73f0100ffffffff01000000013c0d1342400100ffffffff01000000016c0e12ae3f0100ffffffff09000000013a150ea03f0100ffffffff09000000036e041200000000000000008a000000040000000000040fe31601001c00b7d800009f9101002dfa00000222040000027f080000023207000002c5fa00000403470000c5fa000001340100000000025a0a000002c1e9000002bd02000002880300000371a800009ee90000026704010003158000008803000002510401000002d2060000027100000003c73c0000690b000003cd04010000000034000000040000000000040fe31601001c00540c01003f9201002dfa00000222040000027f080000171c660000c5fa000001ea01010000003f000000040000000000040fe31601001c009fdb00006e9201002dfa00000222040000027f0800000232070000020d050000041cb000000d0500000107010000000000630100000400000000000401e31601001c008bf60000ac9201002dfa0000ffffffff570000000222040000021d030000026e0300000262f000001bffffffff5700000007ed03000000009f62f0000001f3011cf9410100ffffffff3b00000001f4011112ec410100ffffffff3b000000027b091336420100ffffffff05000000023c49120c420100ffffffff09000000023c2e1249420100ffffffff0900000005b70d0e56420100ffffffff080000000692051600001218420100ffffffff05000000023c111263420100ffffffff05000000059f310e70420100ffffffff0400000006b305160000138e420100ffffffff03000000023c111218420100ffffffff09000000023d111263420100ffffffff09000000059f310e70420100ffffffff0900000006b3051600001218420100ffffffff0900000002370d1263420100ffffffff09000000059f310e70420100ffffffff0800000006b3051600000000000000000000e2000000040000000000040fe31601001c0011e50000019401002dfa00000222040000021d030000026e030000028205000004485f00000bb6000001340100179c3a000062f0000002ea010100027100000004301200009e07000004b60104eeb100005b050000049e01000000025a0a000002d2060000027100000003c73c0000690b000003cd040100023f000000033e0d00009e070000038e050103a2ad0000ab07000003aa030103781f00006705000003af050103853400007405000003da030100000205040000023d030000024c01000003d03700004f050000050f01010000000000a10000000400000000000401e31601001c00f3eb0000f49401002dfa0000ffffffff450000000222040000028203000002dc02000002fb0800001bffffffff4500000007ed03000000009ffb08000002f3011dd3430100a028000002f401111e77430100b8280000014d181396430100ffffffff05000000010c13001205440100ffffffff01000000014d090ef7430100ffffffff0100000004d1041200000000000000005d000000040000000000040fe31601001c00cdbe0000ee9501002dfa00000222040000028203000002dc020000027b03000004b5760000ec03000001080100000000025a0a000002d20600000271000000046a21000009040000029401000000006c000000040000000000040fe31601001c0013be0000789601002dfa00000222040000028203000002dc020000177d2d0000fb08000001ea0101000000025a0a000002e800010002bd020000029003000003940e0000de00010002ca04010003134a00009003000002a00401000000007b0100000400000000000401e31601001c0029e20000f69601002dfa0000ffffffffa80500000222040000027f08000002d00800001bffffffffa805000004ed00019fd008000001f3011c69460100ffffffff7b05000001f4011112c7450100ffffffff7b050000081d01121d460100ffffffff130000000221140e0f460100ffffffff1300000003750412001eab460100d0280000024c1212dd460100ffffffff01000000043d0d0ecf460100ffffffff0100000003d10412000013d9450100ffffffff4b00000002510e13eb450100ffffffff4f000000024e0e15d9450100e8280000024f0e13eb450100ffffffff4b00000002500f13d9450100ffffffff4b00000002421413d9450100ffffffff4b00000002401413d9450100ffffffff4b00000002371413d9450100ffffffff4b00000002351413eb450100ffffffff4f000000022d101331460100ffffffff0f00000009031213eb450100ffffffff4f000000023e1413eb450100ffffffff4b00000002331500000000000000a8000000040000000000040fe31601001c002fca0000b09b01002dfa00000222040000027f080000023207000002d008000004af790000d0080000011c0100024409000004be620000440900000318010002ce080000047b950000ce08000004180100000000025a0a000002e800010002bd020000028803000003e3750000d0000100026e04010003262f000088030000024604010000023a05000003ad0f000062b900000525060100000034000000040000000000040fe31601001c00540c0100a69c01002dfa00000222040000027f080000175a5e0000d008000001ea010100000071000000040000000000040fe31601001c00fcbc0000d59c01002dfa00000222040000027f080000023207000002140a000004647a0000140a000001230100000000025a0a000002e800010002bd020000029003000003940e0000de00010002ca04010003134a00009003000002a00401000000004d0000000400000000000401e31601001c0014d90000679d01002dfa0000ffffffff0e0000000222040000022e07000002b705000022ffffffff0e00000007ed03000000009fb705000001990100000000f30100000400000000000401e31601001c005cd00000ac9d01002dfa0000ffffffff060100000222040000021d030000028c07000002cbe600001bffffffff0601000007ed03000000009fcbe6000001f3011c6f490100fffffffff400000001f401111263490100ffffffffec0000000277181281490100ffffffff9600000002501c1394490100ffffffff0100000002231015944901000029000002232512a6490100ffffffff0d00000002252013fd490100ffffffff0d00000003af0d0012d1490100ffffffff0a000000022d1e0ec4490100ffffffff01000000035401330e0a4a0100ffffffff09000000035401220012d1490100ffffffff07000000022e1e0e0a4a0100ffffffff07000000035401220013de490100ffffffff01000000022f3712b2490100ffffffff0f000000022f2013174a0100ffffffff0f00000003c30d0012d1490100ffffffff0a00000002271e0ec4490100ffffffff01000000035401330e0a4a0100ffffffff09000000035401220012d1490100ffffffff0700000002281e0e0a4a0100ffffffff07000000035401220013de490100ffffffff0100000002293712b2490100ffffffff0f00000002292013174a0100ffffffff0f00000003c30d0012d1490100ffffffff0b00000002331e0e0a4a0100ffffffff0b0000000354012200000000000000000000ee000000040000000000040fe31601001c006f150100699f01002dfa00000222040000021d030000028c0700000417a100005b070000013e0117a12e0000cbe6000002ea010102f3050000042885000029b70000012201000002f900000004809f0000c905000003a2010002710000000439ab00008307000003ae010442190000110b000003c20100020202000003c8af0000b306000003470101031b5b00003c07000003530101032527000032080000034d0101000000025a0a000002d2060000023f00000003bc3e00008307000004e4040103bc3e00008307000004e4040103ef940000110b000004f0050100000000440100000400000000000401e31601001c0047c700000ba001002dfa0000ffffffff530200000222040000027f08000002470600001bffffffff5302000007ed03000000009f4706000006f3011d604c01001829000006f401111e014c010040290000071d0112ef4b0100ffffffff1c000000034d0a1cb04b0100ffffffff14000000025701080ea24b0100ffffffff14000000016e0412000013a24c0100ffffffff03000000036410130d4c0100ffffffff7800000003660913e54c0100ffffffff0d000000036509121a4c0100ffffffff0b000000036e0d1cb04b0100ffffffff09000000026901150ea24b0100ffffffff09000000016e0412001cd04b0100ffffffff01000000026c01050ec24b0100ffffffff0100000001cf04120000130d4c0100ffffffff7600000003601c13274c0100ffffffff0300000003520e00000000000000c4000000040000000000040fe31601001c00ced9000097a201002dfa0000025a0a000002c1e9000002bd02000002880300000371a800009ee90000016704010003158000008803000001510401029003000003e98c0000b7e9000001c804010003a69d000090030000019904010000000222040000027f08000002320700000330480000bd0a000002560101024706000004a8b3000047060000034601047490000091050000033a010003a79400007d0a00000268010103b35900008f0a0000025b01010000000034000000040000000000040fe31601001c00540c01002ea301002dfa00000222040000027f080000179f3d00004706000001ea01010000003f000000040000000000040fe31601001c009fdb00005da301002dfa00000222040000027f0800000232070000020d050000041cb000000d05000001070100000000003f000000040000000000040fe31601001c00c7e700009ba301002dfa00000222040000027f08000002320700000200030000049e1a0000000300000152010000000000990000000400000000000401e31601001c0070be0000d9a301002dfa0000ffffffff0d0000000222040000028203000002820b00000248f100001bffffffff0d00000007ed03000000009f48f1000003f3011c044e0100ffffffff0c00000003f4011112f24d0100ffffffff0600000002081512d34d0100ffffffff060000000495110ec54d0100ffffffff0600000001d104120000000000000000007e000000040000000000040fe31601001c008cf2000098a401002dfa0000025a0a000002e800010002bd020000029003000003940e0000de00010001ca04010003134a00009003000001a004010000000222040000028203000002bd0200000447ad00003e0500000294010002820b000017b0b1000048f1000003ea0101000000005f0000000400000000000401e31601001c00c71101002aa501002dfa0000ffffffff0e0000000222040000022e07000002be0500001bffffffff0e00000007ed03000000009fbe0500000299010ee51c0000ffffffff0d000000029a011100000000006b0000000400000000000401e31601001c000f09010085a501002dfa0000ffffffff590000000222040000021d03000002e602000002d7f000001bffffffff5900000004ed00029fd7f0000001f3011d524f01006829000001f4011115144f010080290000039401000000000000003a000000040000000000040fe31601001c00e6d6000019a601002dfa00000222040000021d03000002e1020000170f4d0000cdf0000001eb0101000000003a000000040000000000040fe31601001c009ec0000048a601002dfa00000222040000021d03000002e602000017c0a90000d7f0000001eb010100000000130100000400000000000401e31601001c00b9ff000077a601002dfa0000ffffffff3a0100000222040000027f08000002320a00001bffffffff3a01000007ed03000000009f320a000003f3011d375101009829000003f401111efe500100b8290000041d0112ba500100ffffffff170000000220190eac500100ffffffff17000000017504120012ba500100ffffffff0a000000023c100eac500100ffffffff0a000000017504120012da500100ffffffff060000000249090ecc500100ffffffff0600000001d104120012ba500100ffffffff0400000002550d0eac500100ffffffff04000000017504120012da500100ffffffff0800000002570a0ecc500100ffffffff0800000001d10412000000000000000091000000040000000000040fe31601001c007300010051a801002dfa0000025a0a000002e800010002bd020000028803000003e3750000d0000100016e04010003262f00008803000001460401029003000003940e0000de00010001ca04010003134a00009003000001a004010000000222040000027f080000023207000002320a00000422140000320a0000021d01000000000034000000040000000000040fe31601001c00540c0100e0a801002dfa00000222040000027f08000017f4960000320a000001ea0101000000770100000400000000000401e31601001c0039eb00000fa901002dfa0000ffffffff410100000222040000022e07000002c60200001bffffffff4101000007ed03000000009fc60200000199011cf21c0000ffffffff31010000019a011112301c0000ffffffff31010000061a09122a1d0000ffffffff050000000267310e1d1d0000ffffffff050000000772051b0012411c0000ffffffff3500000002680913fd1d0000ffffffff05000000021f1d13891d0000ffffffff0700000002231713fd1d0000ffffffff0100000002221900124d1c0000ffffffff5800000002720d130a1e0000ffffffff010000000252250012591c0000ffffffff2c00000002700d13171e0000ffffffff0700000002302313171e0000ffffffff01000000022f250013891d0000ffffffff0700000002751313891d0000ffffffff0d000000026a1312411c0000ffffffff1f00000002780513891d0000ffffffff0700000002231713fd1d0000ffffffff010000000222190000000000000000ed0000000400000000000401e31601001c0012e100005bab01002dfa0000ffffffff660000000222040000028203000002dc02000002090900001bffffffff6600000007ed03000000009f0909000001f3011c38540100ffffffff5200000001f4011112ed530100ffffffff07000000037b380ee0530100ffffffff0700000005f105130012b3540100ffffffff40000000037b181376540100ffffffff03000000031f13128f540100ffffffff090000000320130e82540100ffffffff090000000692051600001219540100ffffffff01000000037b090e0b540100ffffffff0100000004d10412000000000000000092000000040000000000040fe31601001c0013be000088ac01002dfa0000025a0a000002d206000002d1010000032a4200001205000001d6050103012300001f05000001f00501000002e800010002bd020000029003000003940e0000de00010003ca04010003134a00009003000003a004010000000222040000028203000002dc02000017379200000909000002ea01010000000077000000040000000000040fe31601001c00cdbe000017ad01002dfa0000025a0a000002d2060000023f000000045b3300000904000001940103a2ad0000ab07000001aa0301033e0d00009e070000018e05010000000222040000028203000002dc020000027b03000004815d0000dc030000021e010000000000890000000400000000000401e31601001c00fdd70000a1ad01002dfa0000ffffffffbd0100000222040000022e0700000264c200001bffffffffbd01000007ed03000000009f64c20000010d021c85550100ffffffffb5010000010e02111279550100ffffffffb501000002a90915a8550100d829000002634f15a8550100002a0000025d4f0000000000000065000000040000000000040fe31601001c00f2ef000071af01002dfa00000222040000022e07000004db3a0000acb7000001550117fda9000064c20000020502010000025a0a0000023a050000023405000002bd02000003819e000059b7000003ab03010000000000760000000400000000000401e31601001c0045cf000007b001002dfa0000ffffffff760000000222040000021d030000020904000002cbfa00001bffffffff7600000007ed03000000009fcbfa000001f3011c6d560100ffffffff6300000001f401111361560100ffffffff6300000002920d0000000000000046000000040000000000040fe31601001c005310010085b001002dfa00000222040000021d030000020904000004149300002103000001070117a9110000cbfa000001eb010100000000e30000000400000000000401e31601001c0030c60000b4b001002dfa0000ffffffff3d0000000222040000021d03000002520b0000020a0600001bffffffff3d00000007ed03000000009f0a06000002f3011d31580100202a000002f401111e24580100402a00000346091e12580100602a0000032b131e00580100782a0000031c1d1edd570100902a000003051b1592570100a82a000005c30d0012e9570100ffffffff07000000030612139f570100ffffffff0700000005ab0d00000013bd570100ffffffff01000000032c0f13bd570100ffffffff0d000000032c270000000000000000d9000000040000000000040fe31601001c00830a0100edb101002dfa0000025a0a000002d2060000023f00000003ef940000110b000001f0050103b9440000210b000001a40401000002bf050000023404000002c400000003ff9b00003a03000005ed0501000000000222040000021d03000002710000000442190000110b000002c2010449130000210b000002aa010002520b000002860b000004140e000051b600000304010002870b000004f198000092b60000031b0100021b060000047f15000072b60000032a010017c72a00000a06000004ea0101000000005f0000000400000000000401e31601001c0059bd0000ddb201002dfa0000ffffffff0c0000000222040000027f08000002d80200001bffffffff0c00000007ed03000000009fd802000002f3010ecd580100ffffffff0b00000002f40111000000000034000000040000000000040fe31601001c00540c010031b301002dfa00000222040000027f08000017ce3b0000d802000001ea01010000008e0100000400000000000401e31601001c00b010010060b301002dfa0000fffffffff40100000222040000021d030000028c07000002e20500001bfffffffff401000004ed00059fe205000001f3011ca85a0100ffffffffac01000001f40111129c5a0100ffffffffac01000002840912ba5a0100ffffffff1901000002501c13cd5a0100ffffffff0300000002231015cd5a0100c02a000002232512df5a0100ffffffff2c000000022520131c5b0100ffffffff2c00000003af0d001efd5a0100d82a0000022d1e1f295b0100f82a000003540122001efd5a0100182b0000022e1e1f295b0100382b0000035401220012eb5a0100ffffffff06000000022f2013365b0100ffffffff0600000003c30d001efd5a0100582b000002271e1f295b0100782b000003540122001efd5a0100982b000002281e1f295b0100b82b0000035401220012eb5a0100ffffffff0600000002292013365b0100ffffffff0600000003c30d0012fd5a0100ffffffff2500000002331e0e295b0100ffffffff250000000354012200000000000000000000d4000000040000000000040fe31601001c006f150100dcb401002dfa00000222040000021d030000028c070000046011000046070000013e0117b5660000e205000002ea010102f305000004d65d000016b600000122010000027100000004f2ac0000c905000003a2010002a8020000043aa400008307000003ae010432990000110b000003c2010002bd010000030a3500003c07000003530101000000025a0a000002d206000002a802000003744800008307000004e4040103744800008307000004e4040103dd6c0000110b000004f0050100000000700000000400000000000401e31601001c00550801007eb501002dfa0000ffffffffd70000000222040000022e0700000267fb00001bffffffffd700000007ed03000000009f67fb0000020d021cef5b0100ffffffffd6000000020e021113e35b0100ffffffffd600000001b60900000000000040000000040000000000040fe31601001c00f2ef000014b601002dfa00000222040000022e07000004694c0000d4b60000016c01173e68000067fb000002050201000000a10000000400000000000401e31601001c00a2fe000055b601002dfa0000ffffffff500000000222040000028203000002dc02000002e30900001bffffffff5000000007ed03000000009fe309000002f3011d325d0100d82b000002f401111ed65c0100f02b0000015c1813f55c0100ffffffff05000000012c130012645d0100ffffffff01000000015c090e565d0100ffffffff0100000004cf041200000000000000005d000000040000000000040fe31601001c00cdbe000051b701002dfa00000222040000028203000002dc020000027b0300000466850000ab03000001280100000000025a0a000002d2060000023f000000045b33000009040000029401000000006c000000040000000000040fe31601001c0013be0000dbb701002dfa00000222040000028203000002dc02000017417b0000e309000001ea0101000000025a0a000002c1e9000002bd020000029003000003e98c0000b7e9000002c804010003a69d00009003000002990401000000006f0000000400000000000401e31601001c005df4000059b801002dfa0000ffffffff5b0000000222040000021d03000002e602000002eaf000001bffffffff5b00000004ed00029feaf0000001f3011d155e0100082c000001f4011113535e0100ffffffff0d000000029d01000000000000003a000000040000000000040fe31601001c009ec00000e1b801002dfa00000222040000021d03000002e60200001778760000eaf0000001eb0101000000003a000000040000000000040fe31601001c00e6d6000010b901002dfa00000222040000021d03000002e102000017d67b0000e0f0000001eb01010000000000fe580d2e64656275675f72616e6765733b0200004f02000080020000890200009f020000ac02000000000000000000003b0200004f02000080020000890200009f020000ac02000000000000000000003b0200004f02000087020000890200009f020000ac0200000000000000000000900400009d040000a2040000a80400000000000000000000740300007e03000084030000860300000000000000000000740300007e03000084030000860300000000000000000000740300007e030000840300008603000000000000000000000506000011060000500600005c0600007406000080060000b6060000c206000000000000000000000506000011060000500600005c0600007406000080060000b6060000c206000000000000000000000506000011060000500600005c0600007406000080060000b6060000c2060000000000000000000002060000050600004d060000500600006a06000074060000ab060000b1060000000000000000000002060000050600004d060000500600006a06000074060000ab060000b1060000000000000000000002060000050600004d060000500600006a06000074060000000000000000000002060000050600004d060000500600006a0600007406000000000000000000008a0700008c070000a8070000c007000000000000000000008a0700008c070000a8070000c007000000000000000000008a0700008c070000a8070000c007000000000000000000008a0700008c070000ad070000af070000b9070000c007000000000000000000003008000032080000b9080000d708000000000000000000003008000032080000b9080000d708000000000000000000003008000032080000c8080000d70800000000000000000000b9080000c0080000c3080000c8080000000000000000000095080000970800009f080000a808000000000000000000000a0b0000120b0000400b00006d0b0000a10b0000b60b0000bd0b0000cd0b000000000000000000000a0b0000120b0000400b00006d0b0000a10b0000b60b0000bd0b0000cd0b000000000000000000000a0b0000120b0000400b00006d0b0000a10b0000b60b0000bd0b0000cd0b000000000000000000000a0b0000120b0000440b00006d0b0000c40b0000cd0b00000000000000000000a10b0000b60b0000bd0b0000c40b00000000000000000000930c0000990c0000a00c0000a20c00000000000000000000930c0000990c0000a00c0000a20c00000000000000000000930c0000990c0000a00c0000a20c00000000000000000000bf0c0000c60c0000c90c0000dc0c00000000000000000000e50c0000220d0000300d0000580d0000830d00009a0d00000000000000000000e50c0000220d0000300d0000580d0000830d00009a0d00000000000000000000e50c0000220d0000300d0000580d0000830d00009a0d00000000000000000000e50c0000190d0000300d0000580d0000910d00009a0d00000000000000000000b20d0000ef0d0000fd0d0000250e0000500e0000650e00000000000000000000b20d0000ef0d0000fd0d0000250e0000500e0000650e00000000000000000000b20d0000ef0d0000fd0d0000250e0000500e0000650e00000000000000000000b20d0000e60d0000fd0d0000250e00005e0e0000650e00000000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffeffffff0000000000000000d101000097040000af040000b4040000000000000000000082060000870600008c060000e50600000000000000000000090000004e000000550000007f0000000000000000000000090000005c000000670000008500000000000000000000000700000046000000510000006d0000000000000000000000070000005e000000690000008a00000000000000000000000900000034000000360000005700000000000000000000000900000042000000480000005d00000000000000000000000700000032000000380000004b00000000000000000000000700000040000000460000005e0000000000000000000000000000000c000000100000001900000028000000390000000000000000000000000000000c000000100000001900000028000000390000000000000000000000000000000c000000100000001900000024000000350000000000000000000000000000000c00000010000000190000002400000035000000000000000000000009000000440000004d00000064000000000000000000000009000000440000004d000000640000000000000000000000170000001c000000270000002a00000000000000000000001c0000001d000000380000003b00000000000000000000001c0000001d000000380000003b00000000000000000000001c0000001d000000380000003b00000000000000000000002200000027000000400000004400000000000000000000004d00000057000000620000006400000000000000000000000700000040000000480000006f00000000000000000000000700000040000000480000006f000000000000000000000000000000fd0000000201000007010000000000000000000000000000fd0000000201000007010000000000000000000009000000350000003a00000044000000000000000000000009000000350000003a000000440000000000000000000000280000002c00000031000000350000000000000000000000000000005c00000074000000a9010000ab010000bc010000ca010000d00100000000000000000000000000005c00000074000000a9010000ab010000bc010000ca010000d00100000000000000000000000000000a0000000f0000001f00000024000000330000000000000000000000000000000a0000000f0000001f00000024000000330000000000000000000000000000000a0000000f0000001f0000000000000000000000000000000a0000000f0000001f0000000000000000000000000000000a000000160000001b0000000000000000000000000000000a000000160000001b0000000000000000000000690000004a0100004b01000066010000000000000000000070010000db010000dc010000e201000000000000000000008d000000920000001c010000210100000000000000000000c1000000d5000000e8000000f4000000120100001b0100000000000000000000c1000000d5000000e8000000f4000000120100001b0100000000000000000000d5000000e8000000f4000000fb000000010100000f0100000000000000000000d5000000e8000000f4000000fb000000010100000f010000000000000000000023010000360100004901000054010000720100007b010000000000000000000023010000360100004901000054010000720100007b01000000000000000000003601000049010000540100005b010000610100006f01000000000000000000003601000049010000540100005b010000610100006f01000000000000000000000000000058000000680000006b0000006f000000d9000000e60000007a01000000000000000000000000000058000000680000006b0000006f000000d9000000e60000007a0100000000000000000000030100000a0100005001000073010000000000000000000000000000740000007e000000840000008d0000000e010000000000000000000000000000740000007e000000840000008d0000000e01000000000000000000001a0000006a00000086000000ce00000000000000000000003a0000006a00000086000000cb000000000000000000000040000000470000005a0000005f0000006a0000006f0000007a0000007f000000000000000000000000000000a1000000aa000000e8000000f200000002010000070100001f010000000000000000000000000000a1000000aa000000e8000000f200000002010000070100001f0100000000000000000000000000003e0000004a000000b1000000be0000005e010000640100009e010000af010000220200000000000000000000000000003e0000004a000000b1000000be0000005e010000640100009e010000af010000220200000000000000000000140000005700000064000000720000000000000000000000140000001f00000033000000490000000000000000000000000000003900000045000000a6000000af000000350100003b0100006e0100007b010000e10100000000000000000000000000003900000045000000a6000000af000000350100003b0100006e0100007b010000e101000000000000000000007000000092000000240100005401000075020000c70300000000000000000000b7000000eb000000550100006d02000000000000000000000000000062010000690100006d01000074010000770100007e010000dc010000e6010000eb010000f4010000f6010000ff010000010200000b0200000d0200000f02000012020000140200002e0200003a0200004b02000000000000000000000000000062010000690100006d01000074010000770100007e010000dc010000e6010000eb010000f4010000f6010000ff010000010200000b0200000d0200000f02000012020000140200002e0200003a0200004b0200000000000000000000f1000000f600000004010000080100000000000000000000150100001d0100001e0100002001000000000000000000002001000025010000330100003c0100000000000000000000b2010000bb010000bc010000bd010000c2010000c501000000000000000000002d0200002e020000480200004b02000000000000000000002d0200002e020000480200004b02000000000000000000002d0200002e020000480200004b020000000000000000000009000000410000004c00000051000000000000000000000009000000410000004c0000005100000000000000000000001c0000001d000000340000003d00000000000000000000001c0000001d000000340000003d00000000000000000000001c0000001d000000340000003d000000000000000000000033000000340000003d00000041000000000000000000000000000000a5000000a7000000ae000000000000000000000000000000a5000000a7000000ae0000000000000000000000000000000a000000150000002500000030000000420000000000000000000000000000000a000000150000002500000030000000420000000000000000000000000000000a00000015000000250000000000000000000000000000000a00000015000000250000000000000000000000000000000a0000001d000000250000000000000000000000000000000a0000001e000000230000000000000000000000000000000a0000001e0000002300000000000000000000001a00000005010000110100001c01000000000000000000001a00000005010000110100001c0100000000000000000000000000000b0000001f00000054000000000000000000000040000000470000005a0000005f0000006a0000006f0000007a0000007f000000000000000000000018000000dd000000e9000000f4000000000000000000000018000000dd000000e9000000f400000000000000000000000a0000004b0000004d00000075000000810000009d00000000000000000000000a0000004b0000004d00000075000000810000009d00000000000000000000000700000040000000480000006f00000000000000000000000700000040000000480000006f0000000000000000000000000000000d000000240000003b000000000000000000000039000000400000004c000000510000005c000000610000006c000000710000000000000000000000e7000000ee000000200100002c01000040010000450100005001000055010000000000000000000040000000470000005a0000005f0000006a0000006f0000007a0000007f00000000000000000000000e000000a8000000bb000000ef000000fc000000fe0000000401000007010000170100002a010000300100008d0100009a010000b0010000b2010000bc010000d00100000c040000150400001c04000024040000350400003e04000047040000510400005404000056040000590400006a040000ba040000c3040000ca040000d8040000080500001105000018050000260500002106000030060000c406000000000000000000000e000000a8000000bb000000ef000000fc000000fe0000000401000007010000170100002a010000300100008d0100009a010000b0010000b2010000bc010000d00100000c040000150400001c04000024040000350400003e04000047040000510400005404000056040000590400006a040000ba040000c3040000ca040000d8040000080500001105000018050000260500002106000030060000c406000000000000000000004702000048020000590200006202000000000000000000004702000048020000590200006202000000000000000000004702000048020000590200006202000000000000000000000e0000006400000066000000920000009e000000be00000000000000000000000e0000006400000066000000920000009e000000be0000000000000000000000160000004b000000560000008900000098000000bd000000ca000000010100000e010000470200000000000000000000160000004b000000560000008900000098000000bd000000ca000000010100000e010000470200000000000000000000ae000000bd000000ec000000f40000000000000000000000180000007f0000008c000000950000000000000000000000160000004a000000610000009c0000000000000000000000160000004a000000610000009b0000000000000000000000000000000c00000014000000350000000000000000000000000000000c0000001400000035000000000000000000000000000000190000001b0000003300000039000000b6000000c8000000cb000000da000000f3000000f500000040010000420100004501000053010000550100006201000076010000000000000000000000000000190000001b0000003300000039000000b6000000c8000000cb000000da000000f3000000f500000040010000420100004501000053010000550100006201000076010000000000000000000000000000080000000d0000001b000000000000000000000000000000080000000d0000001b000000000000000000000000000000080000000d0000001b00000000000000000000000000000008000000140000001900000000000000000000000000000008000000140000001900000000000000000000001a000000be000000c5000000cd00000000000000000000001a01000023010000290100002c01000000000000000000003e010000470100004b0100005001000000000000000000007a010000800100008c010000a601000000000000000000007a010000800100008c010000a60100000000000000000000380200004102000043020000440200004c0200004f0200000000000000000000e5020000ea020000080300000d0300000000000000000000e5020000ea020000080300000d0300000000000000000000e5020000ea020000080300000d030000000000000000000009000000430000004c00000053000000000000000000000009000000430000004c0000005300000000000000000000001e0000001f000000370000003a00000000000000000000001e0000001f000000370000003a00000000000000000000001e0000001f000000370000003a000000000000000000000024000000290000003f000000430000000000000000000000140000006500000071000000740000008b00000048010000620100007601000086010000260200000000000000000000140000006500000071000000740000008b0000004801000062010000760100008601000026020000000000000000000014000000400000004d0000005b0000000000000000000000140000001f00000033000000400000000000000000000000b7000000b8000000ec000000ed000000010100000201000016010000170100002b0100002c0100000000000000000000b7000000b8000000ec000000ed000000010100000201000016010000170100002b0100002c0100000000000000000000b8000000c8000000ed000000fd000000020100001201000017010000270100002c0100003c0100000000000000000000c9000000d0000000fe000000010100001301000016010000280100002b0100003d0100004401000000000000000000007100000052010000530100006e010000000000000000000072020000770200007c020000be02000000000000000000001d0400002204000027040000690400000000000000000000100000004f0000005b0000005e0000007100000006010000180100002801000034010000910100000000000000000000100000004f0000005b0000005e000000710000000601000018010000280100003401000091010000000000000000000009000000350000003e00000051000000000000000000000009000000350000003e0000005100000000000000000000001e00000026000000310000003500000000000000000000003e0000004a0000004f00000051000000000000000000000007000000160000001c000000fd0000000000000000000000070000000d0000001c000000f500000000000000000000005b0000005c000000a0000000a10000000000000000000000000000000d000000210000005b00000000000000000000008300000084000000b0000000b1000000c5000000c6000000da000000db000000ef000000f000000000000000000000008300000084000000b0000000b1000000c5000000c6000000da000000db000000ef000000f000000000000000000000008400000094000000b1000000c1000000c6000000d6000000db000000eb000000f0000000000100000000000000000000950000009c000000c2000000c5000000d7000000da000000ec000000ef00000001010000080100000000000000000000000000000a00000015000000250000000000000000000000000000000a00000015000000250000000000000000000000000000000a00000015000000250000000000000000000000000000000a0000001d000000250000000000000000000000000000000a0000001e000000230000000000000000000000000000000a0000001e00000023000000000000000000000000000000780000008500000093030000a503000061090000000000000000000000000000660000006e00000078000000850000008b030000a50300004c0900005f0900006109000000000000000000002b02000030020000350200008e0200000000000000000000150000002801000063020000a90200000000000000000000370000004000000041000000760000000000000000000000370000004000000041000000460000000000000000000000fa00000028010000630200006902000000000000000000001a0000006a00000081000000ca00000000000000000000003a0000006a00000081000000bf00000000000000000000003000000037000000430000004800000053000000580000006300000068000000000000000000000009000000580000005c00000083000000000000000000000009000000580000005c0000008300000000000000000000004b00000052000000650000006a000000750000007a000000850000008a00000000000000000000006d010000720100007d010000820100008d0100009201000000000000000000001e0000003f0000004c0000005700000000000000000000001a0000001c0000002e0000003700000000000000000000001a0000001c0000002e0000003700000000000000000000001b0000001c0000002e000000370000000000000000000000000000001e020000240200004a0200005d0200006f0200007b0200007d02000086020000880200008a0200008d020000970200009a020000a4020000a6020000b0020000b20200000000000000000000000000001e020000240200004a0200005d0200006f0200007b0200007d02000086020000880200008a0200008d020000970200009a020000a4020000a6020000b0020000b20200000000000000000000ab000000ac0000005d0200005e0200000000000000000000e7000000f1000000fa000000fe00000000000000000000008a01000092010000980100009e0100000000000000000000ab000000b2000000b8000000c10000000000000000000000ed000000ee000000f5000000f800000018030000190300006a0300006d03000000000000000000000e010000170100001d010000200100000000000000000000320100003b0100003f0100004201000000000000000000007f010000840100009a010000a1010000b7010000be01000000000000000000008d01000092010000aa010000af010000c7010000cc0100000000000000000000280200002e02000041020000500200000000000000000000280200002e02000041020000500200000000000000000000160000004a000000660000009f0000000000000000000000160000004a000000660000009e00000000000000000000001800000077000000840000008d000000000000000000000009000000580000005c0000008b000000000000000000000009000000580000005c0000008b000000000000000000000000000000740000007e000000840000008d00000028010000000000000000000000000000740000007e000000840000008d0000002801000000000000000000000000000094000000a2000000e7000000f80000003b0100004501000055010000680100006a01000000000000000000000000000094000000a2000000e7000000f80000003b0100004501000055010000680100006a01000000000000000000004b00000052000000650000006a000000750000007a000000850000008a00000000000000000000006d010000720100007d010000820100008d010000920100000000000000000000000000005c00000074000000c2010000c4010000d5010000e3010000e90100000000000000000000000000005c00000074000000c2010000c4010000d5010000e3010000e90100000000000000000000000000000a00000015000000250000002a0000003c0000000000000000000000000000000a00000015000000250000002a0000003c0000000000000000000000000000000a00000015000000250000000000000000000000000000000a00000015000000250000000000000000000000000000000a0000001d000000250000000000000000000000000000000a0000001e000000230000000000000000000000000000000a0000001e00000023000000000000000000000012000000400000004c0000004f0000005f0000007400000080000000ac000000ba00000030010000000000000000000012000000400000004c0000004f0000005f0000007400000080000000ac000000ba0000003001000000000000000000001e000000560000006300000071000000000000000000000009000000350000003e00000044000000000000000000000009000000350000003e0000004400000000000000000000001e00000026000000310000003500000000000000000000000d0000003b000000400000006a00000000000000000000000d0000003b000000400000006a0000000000000000000000340000003b000000470000005e0000000000000000000000340000003b000000470000005e0000000000000000000000af000000b0000000dc000000dd000000f1000000f200000006010000070100001b0100001c0100000000000000000000af000000b0000000dc000000dd000000f1000000f200000006010000070100001b0100001c0100000000000000000000b0000000c0000000dd000000ed000000f20000000201000007010000170100001c0100002c0100000000000000000000c1000000c8000000ee000000f10000000301000006010000180100001b0100002d01000034010000000000000000000000000000aa000000b3000000e0000000000000000000000000000000aa000000b3000000e0000000000000000000000000000000710300007a030000bc040000c80400000c090000000000000000000000000000690300007a030000b6040000b9040000bc040000c8040000f70800000a0900000c090000000000000000000072000000db00000017040000ac0400000000000000000000190200001e02000023020000650200000000000000000000e8020000510300007a03000011040000000000000000000000000000070100001d010000cc010000e10100008e02000098020000b1020000cc020000ce020000000000000000000000000000070100001d010000cc010000e10100008e02000098020000b1020000cc020000ce02000000000000000000000000000009000000170000002d00000000000000000000000000000009000000170000002c000000000000000000000013000000170000005600000057000000000000000000000013000000170000005600000057000000000000000000000030000000360000004100000045000000000000000000000045000000460000005200000056000000000000000000000045000000460000005200000056000000000000000000000020000000210000002c0000003000000000000000000000001e00000023000000ad000000b2000000000000000000000052000000660000007900000085000000a3000000ac000000000000000000000052000000660000007900000085000000a3000000ac00000000000000000000006600000079000000850000008c00000092000000a000000000000000000000006600000079000000850000008c00000092000000a00000000000000000000000b4000000c7000000da000000e5000000030100000c0100000000000000000000b4000000c7000000da000000e5000000030100000c0100000000000000000000c7000000da000000e5000000ec000000f2000000000100000000000000000000c7000000da000000e5000000ec000000f2000000000100000000000000000000a9020000b0020000b9020000be0200000000000000000000be03000030040000cf040000e80400000000000000000000000000001b0000001d000000410000004700000074000000a3000000e7000000f600000012010000140100006a0100006c0100006f010000850100008701000098010000ac010000ba010000bd0100000000000000000000000000001b0000001d000000410000004700000074000000a3000000e7000000f600000012010000140100006a0100006c0100006f010000850100008701000098010000ac010000ba010000bd0100000000000000000000000000000900000010000000440000000000000000000000000000000900000010000000430000000000000000000000750000005601000057010000720100000000000000000000250200002a0200002f0200007102000000000000000000005700000058000000a2000000a3000000000000000000000000000000e3010000ee010000140200001e020000370200004702000052020000000000000000000000000000e3010000ee010000140200001e020000370200004702000052020000000000000000000014000000400000004d000000580000000000000000000000140000001f0000003300000040000000000000000000000000000000740000007e000000840000008d00000039010000000000000000000000000000740000007e000000840000008d0000003901000000000000000000004b00000052000000650000006a000000750000007a000000850000008a00000000000000000000006d010000720100007d010000820100008d010000920100000000000000000000000000000a0000000f0000001f0000002a000000390000000000000000000000000000000a0000000f0000001f0000002a000000390000000000000000000000000000000a0000000f0000001f0000000000000000000000000000000a0000000f0000001f0000000000000000000000000000000a000000160000001b0000000000000000000000000000000a000000160000001b00000000000000000000008d000000920000001c010000210100000000000000000000c1000000d5000000e8000000f4000000120100001b0100000000000000000000c1000000d5000000e8000000f4000000120100001b0100000000000000000000d5000000e8000000f4000000fb000000010100000f0100000000000000000000d5000000e8000000f4000000fb000000010100000f010000000000000000000023010000360100004901000054010000720100007b010000000000000000000023010000360100004901000054010000720100007b01000000000000000000003601000049010000540100005b010000610100006f01000000000000000000003601000049010000540100005b010000610100006f0100000000000000000000000000000b000000160000004f0000000000000000000000000000000b000000160000004e00000000000000000000001e0000003f0000004c0000005a0000000000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffeffffff0000000000000000fefffffffefffffffefffffffefffffffefffffffeffffff000000000000000000afae040a2e64656275675f7374727b696d706c233239397d007b696d706c2338397d007b696d706c2337397d007b696d706c2335397d007b696d706c23313333397d007b696d706c2331397d007b696d706c23397d007b696d706c2338387d007b696d706c2333387d007b696d706c2331387d007b696d706c233130387d007b696d706c23387d007b696d706c233238377d007b696d706c23313737377d007b696d706c23313437377d007b696d706c2333377d007b696d706c2332377d007b696d706c2331377d007b696d706c23377d007b696d706c2337367d007b696d706c23313336367d007b696d706c233133367d007b696d706c2332367d007b696d706c2331367d007b696d706c23367d007b696d706c23313336357d007b696d706c233336357d007b696d706c233333357d007b696d706c233133357d007b696d706c2332357d007b696d706c2331357d007b696d706c23357d007b696d706c2338347d007b696d706c2337347d007b696d706c233336347d007b696d706c2336347d007b696d706c2335347d007b696d706c2332347d007b696d706c2331347d007b696d706c23347d007b696d706c2338337d007b696d706c233836337d007b696d706c23313735337d007b696d706c2332337d007b696d706c2331337d007b696d706c23337d007b696d706c2338327d007b696d706c2337327d007b696d706c2336327d007b696d706c2333327d007b696d706c2332327d007b696d706c23327d007b696d706c2334317d007b696d706c233133317d007b696d706c2333317d007b696d706c2332317d007b696d706c233931317d007b696d706c2331317d007b696d706c23313530317d007b696d706c23317d007b696d706c2339307d007b696d706c2336307d007b696d706c23313334307d007b696d706c233133307d007b696d706c2333307d007b696d706c233132307d007b696d706c2331307d007b696d706c233330307d007b696d706c23307d006d656d63707900696e64657800666d617800706f7700636f6e760075646976007364697600636865636b65645f646976007265760063617374007371727400636f6e766572740063627274006879706f74006e6f740072696e74007573697a655f6c656164696e675f7a65726f735f64656661756c7400626974006774007536345f6e6f726d616c697a6174696f6e5f7368696674007533325f6e6f726d616c697a6174696f6e5f7368696674006d656d73657400696e745f746f5f666c6f617400746f5f626974730066726f6d5f6269747300753132385f746f5f6636345f62697473007536345f746f5f6636345f62697473007533325f746f5f6636345f6269747300753132385f746f5f6633325f62697473007536345f746f5f6633325f62697473007533325f746f5f6633325f62697473006164617074657273006f7073006c656164696e675f7a65726f730061636f73006b5f636f7300636f6d70696c65725f6275696c74696e7300696d706c73007365745f6279746573007365745f62797465735f627974657300636f6d706172655f627974657300636f70795f666f72776172645f627974657300636f70795f6261636b776172645f6279746573007365745f62797465735f776f72647300636f70795f666f72776172645f6d6973616c69676e65645f776f72647300636f70795f6261636b776172645f6d6973616c69676e65645f776f72647300636f70795f666f72776172645f616c69676e65645f776f72647300636f70795f6261636b776172645f616c69676e65645f776f7264730066616273007772617070696e675f61627300756e7369676e65645f616273006d75745f70747200636f6e73745f7074720066726f6d5f7265707200626974786f72006269746f7200666c6f6f72006c6f676963616c5f736872007772617070696e675f73687200756e636865636b65645f736872004c7368720041736872006974657200636f6d705f72006c67616d6d61665f72006c67616d6d615f72007371006571006c64657870006d656d636d700062636d70006c6f6731700069735f7a65726f005f5f727573745f753132385f6d756c6f005f5f727573745f693132385f6d756c6f00554d756c6f005f5f727573745f753132385f6164646f005f5f727573745f693132385f6164646f004164646f005f5f727573745f753132385f7375626f005f5f727573745f693132385f7375626f005375626f006173696e006b5f73696e00666d696e00636f70797369676e006269746f725f61737369676e007368725f61737369676e006d756c5f61737369676e0073686c5f61737369676e00626974616e645f61737369676e006164645f61737369676e007374726c656e007a65726f5f776964656e007363616c626e006174616e006b5f74616e0069735f6e616e006e756d006d656469756d0066726f6d006664696d007370656369616c697a65645f6469765f72656d00753132385f6469765f72656d007536345f62795f7536345f6469765f72656d007533325f62795f7533325f6469765f72656d006d656d006c69626d007a65726f5f776964656e5f6d756c00693132385f6f766572666c6f77696e675f6d756c006936345f6f766572666c6f77696e675f6d756c006933325f6f766572666c6f77696e675f6d756c007772617070696e675f6d756c004d756c0066726f6d5f626f6f6c007772617070696e675f73686c00756e636865636b65645f73686c004173686c005f5f66697873667469005f5f666978756e7373667469005f5f66697864667469005f5f666978756e7364667469005f5f66697873667369005f5f666978756e7373667369005f5f66697864667369005f5f666978756e73646673690073696e70690073696e5f70690066726f6d5f6c6f5f686900776964656e5f6869005f5f66697873666469005f5f666978756e7373666469005f5f66697864666469005f5f666978756e736466646900617269746800635f737472696e675f6c656e677468006d61746800636f73680073696e680074616e68006c6f67007772617070696e675f6e656700666d61786600706f7766007371727466006362727466006879706f74660072696e74660061636f7366006b5f636f7366005f5f666c6f617474697366005f5f666c6f6174756e74697366005f5f666c6f617473697366005f5f666c6f6174756e73697366005f5f666c6f617464697366005f5f666c6f6174756e6469736600666162736600666c6f6f7266006c6465787066006c6f67317066006173696e66006b5f73696e6600666d696e6600636f70797369676e66007363616c626e66006174616e66006b5f74616e66006664696d6600636f7368660073696e68660074616e6866006c6f6766006162735f6469666600666d6f646600726f756e6466005f5f666c6f617474696466005f5f666c6f6174756e74696466005f5f666c6f617473696466005f5f666c6f6174756e73696466005f5f666c6f617464696466005f5f666c6f6174756e64696466007472756e6366007467616d6d616600666d6166006578703266006b5f6578706f32660072656d5f70696f3266006174616e3266006c6f673266006578706d3166006c6f67313066006e6f726d616c697a65006d656d6d6f76650052616e6765496e636c757369766500636f7265006e650072656d5f70696f325f6c617267650072616e676500736c69636500776974685f7365745f6c6f775f776f7264006765745f6c6f775f776f7264007a65726f5f6c6f775f776f726400776974685f7365745f686967685f776f7264006765745f686967685f776f726400636f70795f666f727761726400636f70795f6261636b7761726400666d6f6400726f756e6400657874656e6400626974616e6400666f72776172645f756e636865636b6564006f766572666c6f77696e675f616464007772617070696e675f61646400756e636865636b65645f616464005f5f727573745f693132385f616464007472756e6300616464737562006f766572666c6f77696e675f737562007772617070696e675f737562005f5f727573745f693132385f7375620055416464537562007467616d6d6100666d61005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693136244754243133756e636865636b65645f73686c3137686631666438643238306538623363666645005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431347a65726f5f776964656e5f6d756c3137683831376231343434353165363938666645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34315f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f323137683932643630313538663166366537666645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c31396933325f6f766572666c6f77696e675f6d756c3137686566366666353965646365626237666645005f5a4e34395f244c54247573697a65247532302461732475323024636f72652e2e697465722e2e72616e67652e2e53746570244754243137666f72776172645f756e636865636b65643137686431623131323732376233613739656645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f73686c3137683036393737376437626134653235646645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433706f77395f5f706f77696466323137686337616636613537363330663831646645005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137683739363331653761633033633565636645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562375541646453756234756164643137686639323734383731613535626535636645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c395f5f6d756c6f7369343137683231646161373531646361373364626645005f5a4e34636f72653366333232315f244c5424696d706c2475323024663332244754243966726f6d5f62697473313372745f7533325f746f5f6633323137683034303136303565303465633262626645005f5a4e34636f7265336e756d32335f244c5424696d706c24753230247573697a652447542431327772617070696e675f7375623137686332323663313864626236303361626645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356b5f73696e356b5f73696e3137686530323137613331356134623738626645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34666d616634666d61663137686632383834326437613834353734626645005f5a4e34636f7265337074723133726561645f766f6c6174696c653137686534326236323866313032363234626645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366879706f74663137686538616633663331303463643936616645005f5a4e35305f244c542454247532302461732475323024636f72652e2e636f6e766572742e2e496e746f244c542455244754242447542434696e746f3137686366393235396438393631346430396645005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424337375623137683439613435313834646137646266386645005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137686166646535373339393831363966386645005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137686437646533353664343264636165386645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c3230693132385f6f766572666c6f77696e675f6d756c3137683366353438316434313434303362386645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431336c656164696e675f7a65726f73385f5f636c7a7369323137683634306163383239646165646139386645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978736673693137686264393931363331646166623932386645005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137683134306535366533356365333661376645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7031305f5f756e6f72646466323137683230323337626366306231663937376645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433616464385f5f6164646466333137686339356433303765616634353266366645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3461636f733461636f733137683433396563663330306662613964366645005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6164643137686362303537336334653064663564366645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468377467616d6d61663137683430323536663032386530656332356645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f7368723137686164653339666366366435363266346645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366c6f67313066366c6f673130663137683635366266613863613863616263346645005f5a4e34355f244c5424753332247532302461732475323024636f72652e2e6f70732e2e61726974682e2e53756224475424337375623137686632353730653036616661393733336645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756236416464537562337375623137686133626236336437633438393632336645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347364697631315f5f6469766d6f647369343137683334333566616562633931303638326645005f5a4e34355f244c5424693136247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137686461373038303732626130323434326645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562344164646f346164646f3137683963633937386538353333633539316645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f73686c3137686163343564323462633136363233316645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c334d756c336d756c3137683035653137653439613061313331316645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562344164646f346164646f3137683862633130376131396231663466666545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d386c67616d6d615f72386c67616d6d615f723137683638653835633239376139323361666545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617436657874656e6431335f5f657874656e6473666466323137686339663262313464353534353737666545005f5a4e36375f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e43617374496e746f244c5424693332244754242447542434636173743137683036356233626535356562323931656545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356b5f74616e31337a65726f5f6c6f775f776f72643137683138386138633363633864366165646545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231355f5f727573745f693132385f6164643137683561333838313463653833383937646545005f5a4e35315f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137686364366235326565643839383264636545005f5a4e36305f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e53687241737369676e244c5424753332244754242447542431307368725f61737369676e3137683965383361316337393765653463636545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3472696e743472696e743137683834363862393038323930336539636545005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247531362447542431327772617070696e675f73686c3137683065343863343432313665646465626545005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431356f766572666c6f77696e675f6164643137686236316131643136326538323739616545005f5a4e34365f244c5424693332247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e642447542436626974616e643137686233336538373336346139313230616545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733132636f70795f666f72776172643239636f70795f666f72776172645f6d6973616c69676e65645f776f7264733137683963646234336366396331623834396545005f5a4e34355f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137683739393230623262333635316366386545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d347371727434737172743137686538626131376433376535656461386545005f5a4e3130375f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765496e636c7573697665244c54245424475424247532302461732475323024636f72652e2e697465722e2e72616e67652e2e52616e6765496e636c75736976654974657261746f72496d706c244754243134737065635f6e6578745f6261636b3137686463303030646138363264653634386545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756236416464537562336164643137686565623231653761383661653264376545005f5a4e34636f7265336e756d32325f244c5424696d706c247532302469313238244754243132756e7369676e65645f6162733137683636653136613935623734343632376545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d70375f5f65717366323137686534626264613361383936613731376545005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024693132382447542431327772617070696e675f6162733137686562366538373132346139643366366545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356c6f673170356c6f6731703137686634636133303336303634346335366545005f5a4e34636f726534697465723572616e67653130315f244c5424696d706c2475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f722475323024666f722475323024636f72652e2e6f70732e2e72616e67652e2e52616e6765244c5424412447542424475424346e6578743137686262653934316439386365363033366545005f5a4e35315f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e74244754243769735f7a65726f3137686638323938323562613265656331366545005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137686636623263633333386261353537356545005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424336164643137686531303636316130626165386535356545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e646973663137683535616539333465363764626366336545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c35554d756c6f346d756c6f3137683864653065313035323334393963316545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356c64657870356c646578703137683731366130363161306364356239306545005f5a4e34636f7265336e756d32325f244c5424696d706c247532302475313238244754243133756e636865636b65645f73686c3137686634663162393361613566356635306545005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f7368723137683638386564363035366135643536666445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6d6f646469333137683764613436646164623830656364656445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173686c346173686c3137683533376466636239353738303764656445005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137686661626135383136353033333335646445005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246931362447542431327772617070696e675f73686c3137683164653865366263396161323464636445005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137683532346665373466653165633561636445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346664696d3137683431663464363336646632613935636445005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431336c656164696e675f7a65726f733137686331303164623364616261323334636445005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431336c656164696e675f7a65726f733137686562643036366231353365326563626445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356664696d66356664696d663137683034366236373632663333356363626445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d636d703137683430396261373137316535306132626445005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137686563656662653864353830336335616445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f617368727469333137683831343665613830336132323064396445005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693634244754243132756e7369676e65645f6162733137686330663338633461393035626536396445005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f722475323024753332244754243265713137683662386133363666313961616634396445005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424337375623137683733346131353266316563376262386445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33326d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633137683837353232653764336633376461386445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756469767369333137683938613930663832346438653437386445005f5a4e34365f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974586f722447542436626974786f723137686435356332386636303761313334386445005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693332244754243133756e636865636b65645f73686c3137683537346130353331356266346438376445005f5a4e34636f726534697465723572616e67653131305f244c5424696d706c2475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f722475323024666f722475323024636f72652e2e6f70732e2e72616e67652e2e52616e6765496e636c7573697665244c5424412447542424475424346e6578743137683765313564383733663938326136366445005f5a4e35345f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e536872244c54247533322447542424475424337368723137683336623935316133323032323861356445005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137683738316466636234356561616365346445005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683439613565373265376532613463336445005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424326c6f3137686461303239336465323866653938336445005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137686365646634356533363665303664326445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174357472756e63357472756e633137683233353534663863313034356161326445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231365f5f727573745f693132385f7375626f3137683163303037306162373331356438326445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35666d61786635666d6178663137683637626665323061366637386530326445005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683561636f73663137686138376238373936396638323861306445005f5a4e34355f244c5424693634247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137686530643030653861623166323761306445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33636f7333636f733137683833386230343439613863633637666345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73646673693137683166623962633432363765373936666345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3474616e683474616e683137683165393331313864376232323636656345005f5a4e35315f244c5424663332247532302461732475323024636f72652e2e6f70732e2e61726974682e2e4d756c41737369676e2447542431306d756c5f61737369676e3137686636333365326263643234356366646345005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753332244754243131636865636b65645f6469763137683530613261363632633563313166646345005f5a4e34395f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e53687241737369676e2447542431307368725f61737369676e3137686563323139663139656635616238646345005f5a4e34355f244c5424753136247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137683331313262313435316361353065636345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231365f5f727573745f693132385f6164646f3137683966633664636337616537343937636345005f5a4e35355f244c5424663634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f617424475424396e6f726d616c697a653137686535316232323531383466353537636345005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f72247532302475333224475424326e653137683031366564343361343139366461626345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34666d617834666d61783137686132353733366164303230306664616345005f5a4e35315f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137686463306631346232303038313537616345005f5a4e35315f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6d756c3137683232326237623330663533613731616345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356b5f74616e356b5f74616e3137686262613062316362633061326430616345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6469767369333137683632646338343830636234613436396345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344c736872346c7368723137686638383538613564636230656532396345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e736973663137686338353039653763373462356338386345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34636f736834636f73683137683965636134613832356631653236376345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d386c67616d6d615f723673696e5f70693137683263353061623261303664303736366345005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137683565333235363365343365626533366345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c395f5f6d756c6f6469343137686233626438373838653263323830366345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231365f5f727573745f753132385f6164646f3137686634343030396638373436383766356345005f5a4e34636f72653366333232315f244c5424696d706c24753230246633322447542437746f5f626974733137686334376337643561646563326337356345005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424366f66667365743137686231393336356563343936363265346345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f313137686132386362663630613737646564346345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35636f73686635636f7368663137683736666466326562303630666463346345005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834666d6f643137686462333338653065396433306561346345005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834636272743137683739646437663432316139656461346345005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f722475323024693634244754243265713137683830306436343736333933363630346345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33706f7733706f773137683030323935373263656361386566336345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6469767469333137683530343963323338343030633662336345005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e74244754243268693137683332306330386563326634353838336345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433616464385f5f6164647366333137683561636164373633313131323937336345005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024693634244754243267653137683339626266366263316436613338326345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756469767469333137683338333762303838383762326466316345005f5a4e34365f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974586f722447542436626974786f723137683261346231353633323762616465316345005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753634244754243131636865636b65645f6469763137683337303930356130373738643331316345005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431336c656164696e675f7a65726f733137683932623966643037396662393230306345005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f7368723137683762333934316536313361376633666245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347564697631325f5f756469766d6f647369343137683332306165313362333934666264656245005f5a4e35315f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7241737369676e2447542431326269746f725f61737369676e3137686338383734656266376664353864656245005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753634244754243133756e636865636b65645f7368723137683238356462396139353039613465646245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433646976385f5f6469767366333137686536643066653139626165653232636245005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542439776964656e5f6d756c3137686239303530316439306663363766626245005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683473696e663137686137343837613563323138306435626245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356b5f636f73356b5f636f733137686534386463336461613865306636616245005f5a4e34636f7265336f70733572616e6765323552616e6765496e636c7573697665244c5424496478244754243869735f656d7074793137683364326564653862666535656465396245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356c6f673130356c6f6731303137686566613361373034353764666263396245005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683938376430316463356563316634396245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73736664693137683132353234396232356636623064386245005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431307a65726f5f776964656e3137683931633463376365653664393864376245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3373696e3373696e3137683436363537336562663964636262376245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f617368727369333137683865343030353030613161306237376245005f5a4e34355f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137683637373466633466303862383133376245005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f6162733137683662316661343831623662353535366245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d336c6f67336c6f673137686139366662616134313363633231366245005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683472696e743137686439316166316462393830366466356245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f6d706172655f62797465733137686264356662363737633834316365356245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347564697631325f5f756469766d6f646469343137683365313939313335613365306464356245005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431307a65726f5f776964656e3137683831656535663634346164306163356245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3872656d5f70696f323872656d5f70696f32366d656469756d3137686539383130623862356632393734356245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356174616e663137686465346565393664313262333164346245005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024753634244754243267743137683966346164663431666539306435346245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6c7368727469333137686236353430303435356162626231346245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33326d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633137686530396261653637353462393062336245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231365f5f727573745f753132385f7375626f3137683530383964323134636530376330326245005f5a4e35315f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137683536323736343633613066363931316245005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746833706f773137683836643462383038653464346662666145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e736964663137683738313039333135643666643539666145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356879706f74356879706f743137683330653966613264343561303430666145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433706f77395f5f706f77697366323137683566303637613034373965383665656145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f7375623137686232386164616333306162326336656145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356664696d663137683436653337613663323435353736656145005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431336c656164696e675f7a65726f733137683665626539613661336262333536656145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346173696e3137686363666163633238643130666334656145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366c6f67317066366c6f673170663137686638343463653365303132396238646145005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f722475323024753634244754243265713137686230393963363833663131343638646145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366174616e3266366174616e32663137683036303739633232353566663235646145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f6d756c3137686161316161356262663665333266636145005f5a4e35325f244c542469313238247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6164643137683562636538663239336639303834636145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33326d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633137683163393532323231386162326364626145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356879706f743137686239626566633863613239366133626145005f5a4e35355f244c5424663332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f617424475424396e6f726d616c697a653137686539373636663435383764613062616145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347364697631315f5f6469766d6f647469343137686161653836643932393965663861616145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356578706d31356578706d313137686334393365393963343630326237616145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f61743136753132385f746f5f6633325f626974733137686231623561633061616538336233616145005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683474616e683137683737316165323134636236346230616145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d31387533325f62795f7533325f6469765f72656d3137686430333766366236303861396264396145005f5a4e34365f244c5424693634247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e642447542436626974616e643137686234636333653634306634386565386145005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683565787032663137683661626130366563303638353765386145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f6162733137686439656334326538376630663339386145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34666d6f6434666d6f643137683836336535353032316465636333386145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174736973663137683738356534303261363838303533386145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3573717274663573717274663137683332626238663062323630613566376145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756236416464537562337375623137686338353864356237303766663463376145005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431336c656164696e675f7a65726f733137686561643332616463393465643431376145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3573696e68663573696e68663137686232613930633830333865333239366145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73646664693137683666386631393462613465656338366145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f70795f6261636b776172643330636f70795f6261636b776172645f6d6973616c69676e65645f776f7264733137686234353662386132386532376338366145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f6164643137686135343438613432653934643734366145005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424326c6f3137683637386265353062303633363031366145005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542439776964656e5f6d756c3137686633626636623962366664613638356145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f70795f6261636b776172643237636f70795f6261636b776172645f616c69676e65645f776f7264733137686136323262366534353066623835356145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33666d6133666d613137686663616565646335383464393134356145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c6f67323137683631303466613531643034646530356145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7031305f5f756e6f72647366323137683564303634313062366162633539346145005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753136244754243133756e636865636b65645f7368723137686130376130663839613265316666336145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356174616e32356174616e323137686431636161346135326538303862336145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468336578703137686162316436323630303737366235326145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431356f766572666c6f77696e675f7375623137686262343264383161343064626266316145005f5a4e34636f7265337074723133726561645f766f6c6174696c653137683461356139366164363765366437316145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346c6f6766346c6f67663137683133643232643435333639616432316145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d31336765745f686967685f776f72643137686530616661613334346531333132316145005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431327772617070696e675f6d756c3137683633633939343633306439343638306145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c385f5f6d756c7469333137683563396233353631623862323430306145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e746973663137683166646537333761353032383466663945005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753332244754243133756e636865636b65645f73686c3137686238396433396437376363653838663945005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693634244754243133756e636865636b65645f73686c3137686437343264636264353462646337663945005f5a4e34636f7265336e756d32335f244c5424696d706c24753230247573697a65244754243133756e636865636b65645f6164643137683533323733353938646563613036663945005f5a4e34636f72653366333232315f244c5424696d706c2475323024663332244754243966726f6d5f626974733137686161623466333339373631626133663945005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562345375626f347375626f3137683536353432643938336230333861653945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366b5f74616e66366b5f74616e663137686437333164636434353938623137653945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468396c67616d6d61665f723137683033636431316638666436663866643945005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024693634244754243267743137683661343839383665383439366539643945005f5a4e35315f244c5424753634247532302461732475323024636f72652e2e6f70732e2e61726974682e2e41646441737369676e2447542431306164645f61737369676e3137686534616434653633356566643737643945005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756d6f646469333137683734353331663232653737346534643945005f5a4e35325f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e6441737369676e244754243133626974616e645f61737369676e3137683834656166343765353963363466633945005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633137683463346439366536303431666163623945005f5a4e35355f244c5424663634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f61742447542434726570723137683835383036303139333163383832623945005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756d6f647369333137683762316337343765363561373766613945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835666d6f64663137686434346462373938613466326537613945005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d376d656d6d6f76653137683139393661336564663130656134613945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356c646578703137683461366130343765613936643633613945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835726f756e643137683537363834653137303932646461393945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d377467616d6d6166377467616d6d61663137683034356637656635326461653137393945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346c6f6732346c6f67323137683161656434303636626633613935393945005f5a4e35315f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137686463366538393937313435326630393945005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d70375f5f67657366323137683033393737353231363531316336383945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834666d61663137686534643732313339336664656465373945005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431376765745f756e636865636b65645f6d75743137686339306339333837363563653965373945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835666d6178663137683137626532666338643736313465373945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356578706d313137686664643637353533383438646662373945005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683337323166393133306331643837373945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3574616e68663574616e68663137683634363533323135633232363363363945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346174616e3137683235313661356137386136333432363945005f5a4e36375f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e43617374496e746f244c5424753634244754242447542434636173743137683831653339643439613666636465353945005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d70375f5f65716466323137683235383830376535623030616264333945005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834636f73683137683364623635313561306435343535333945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d386b5f6578706f3266386b5f6578706f32663137683062646530313161363930303765323945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346664696d346664696d3137683034303637333338353331356564323945005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753332244754243133756e636865636b65645f7368723137683262366165616138646437383439313945005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433737562385f5f7375626466333137683163303966353962346634623836313945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356174616e66356174616e663137683738613834386630313564396263303945005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f72247532302475333224475424326c743137683234383139633633363663663361303945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33666d61336d756c3137686439383635386432633934326339303945005f5a4e35315f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7241737369676e2447542431326269746f725f61737369676e3137683862623466313532316538333639303945005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431327772617070696e675f7375623137683364376239623335336565396132303945005f5a4e34335f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e53687224475424337368723137683566663735323235336131353432303945005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3138776974685f7365745f686967685f776f72643137683566623439636237353336613130303945005f5a4e36305f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e53686c41737369676e244c54246933322447542424475424313073686c5f61737369676e3137683362623839333031666165613966663845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d36666c6f6f726636666c6f6f72663137683464393733323735323264383365663845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366578706d31663137686237656437333239326462616164663845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346174616e346174616e3137683461636530336265376464636635663845005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f7375623137683232343266393034646632393538653845005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693332244754243132756e7369676e65645f6162733137686361316365323866353833653636653845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d38636f70797369676e38636f70797369676e3137683638323361376564393564393434653845005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024693132382447542431327772617070696e675f6164643137683234386439643061653130343666643845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633137683433666436386335666236363236643845005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f722475323024693332244754243265713137683839333330653762386466386361633845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3473696e663473696e663137683762316163623066393763646634633845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d313472656d5f70696f325f6c61726765313472656d5f70696f325f6c617267653137683139336164383035616261616133633845005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f6d756c3137683665343237653837323335616530633845005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d70375f5f67656466323137683565633465356131343637323338623845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d32337533325f6e6f726d616c697a6174696f6e5f73686966743137683963303664616332383335306634623845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3561636f73663561636f73663137686333306261313633663164646664613845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d31326765745f6c6f775f776f72643137683664613738313130616430333435613845005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835636f7368663137686137613139623138363863383263393845005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024753332244754243267653137686566306333613662303433633262393845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d7365743137686436343361623236303534623735393845005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f61743136753132385f746f5f6636345f626974733137683063373164373061316437303832393845005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542439776964656e5f6d756c3137683634323236666635313462376336383845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f383137683861343134353530396461326139373845005f5a4e39385f244c5424636f72652e2e697465722e2e61646170746572732e2e7265762e2e526576244c54244924475424247532302461732475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f722e2e4974657261746f7224475424346e6578743137686664656439353934316535343933373845005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424366f66667365743137683935316534353333343964323133363845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c73397365745f62797465733137686463323438303266383065336135353845005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693332244754243133756e636865636b65645f7368723137686234376430373333383333333835353845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d32337536345f6e6f726d616c697a6174696f6e5f73686966743137683965623361313737623662663330353845005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f617431357536345f746f5f6633325f626974733137683866633738336161383231343761343845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c35554d756c6f346d756c6f3137683364623334636233346638393138343845005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f7368723137683835613064666361363734303531343845005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834636f73663137683137353135373737663934613636333845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d6370793137686134343566666431376366663436333845005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73736674693137686666303035663335353831623533323845005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3474616e663474616e663137683332326564323934363031356132313845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344c736872346c7368723137686463626534646237323362646538303845005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633137683063386437383334353261633137303845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562345375626f347375626f3137683766393534333132633138613033303845005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c334d756c336d756c3137683830343239326366303336313430663745005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173686c346173686c3137683438613665353961353037323464653745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174646964663137683365346336636336646564313339653745005f5a4e34636f72653366363432315f244c5424696d706c2475323024663634244754243669735f6e616e3137686334333262326165666564656135653745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7033636d703137686639616364646130336561356632653745005f5a4e35325f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137683462303538336239656134373832653745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978646673693137683164333132396535656437366534643745005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137683565613036376265613231656463623745005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542435776964656e3137683439306463383830343230393062623745005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746835666d696e663137683536613265373931343031363536623745005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366b5f73696e66366b5f73696e663137683463383837613164393037393532393745005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3566616273663566616273663137686231316539336665613934316562373745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7035756e6f72643137683435623936656662326462633039353745005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c6f67663137683066643664646665653533333966333745005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e74244754243268693137683235326436336536333737383663333745005f5a4e34636f726533636d7035696d706c7335345f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c45712475323024666f72247532302475363424475424326e653137683738366537373034623832663135333745005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733132636f70795f666f72776172643138636f70795f666f72776172645f62797465733137683034636164353861666264656439323745005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683461636f733137686430613065323166633065373833313745005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336d756c336d756c3137686339363430366164353966383532313745005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683572696e74663137686364613830653836623865303661303745005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c31365f5f727573745f753132385f6d756c6f3137686234343162313634303637653436303745005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683573696e68663137683139316333313639663961373333303745005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347364697631315f5f6469766d6f646469343137683736323437636230623436323663663645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356174616e323137686232396137633538646633663063653645005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024753634244754243267653137683763383164323861636663663635653645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c31365f5f727573745f693132385f6d756c6f3137683431346666613730306332366234653645005f5a4e3130375f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765496e636c7573697665244c54245424475424247532302461732475323024636f72652e2e697465722e2e72616e67652e2e52616e6765496e636c75736976654974657261746f72496d706c2447542439737065635f6e6578743137686132343538346338373137613464643645005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024693332244754243267743137683863383138623538323335383338643645005f5a4e35325f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e74244754243268693137686166313465666561343063393435643645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f323137683130633038373861616132333934643645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366174616e32663137686361656634646566346166363733643645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33326d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633137683033633335316664663961653039633645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978736664693137686637623634313739623963616234633645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d31387536345f62795f7536345f6469765f72656d3137683361333966613934326163646633633645005f5a4e34636f726533636d7035696d706c7335365f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f7224753230247531323824475424326c743137683531363063343239373663393966623645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356173696e663137683461303564616366383639353665393645005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424366f66667365743137686233623838303766396665616364393645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336469763564697636343137686232633764386564356630323439393645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d3462636d703137683261333435616461613065326334393645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3374616e3374616e3137686663396565363462643161393330383645005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6d756c3137686337316530383561303964656536373645005f5a4e34335f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e53686c244754243373686c3137683735333039366232646135653635373645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c73397365745f627974657331357365745f62797465735f62797465733137686464343935303935656539346137363645005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d31317533325f6469765f72656d3137683631383233653362383562333966353645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f6164643137686138376362383137353162363563353645005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431356f766572666c6f77696e675f6164643137683632316335326330346534333263353645005f5a4e35355f244c5424663332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f61742447542434726570723137686135633161386131636166366236353645005f5a4e34636f72653366333232315f244c5424696d706c2475323024663332244754243669735f6e616e3137686461313563353631633762343934353645005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683474616e663137683061623962646330366562306564343645005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431376765745f756e636865636b65645f6d75743137686534663737653131616639636263333645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367467616d6d6131733137686261626664623836393766613938333645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733132636f70795f666f72776172643236636f70795f666f72776172645f616c69676e65645f776f7264733137683933616362313235396536363639323645005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174746973663137683835363664643164376439363935323645005f5a4e34365f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e642447542436626974616e643137683830306433393632643566363831323645005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468336c6f673137683161333538343665616661656561313645005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683374616e3137686534613461343166303639333532313645005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f7375623137683365373566633737336437343263663545005f5a4e36305f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e53686c41737369676e244c54246933322447542424475424313073686c5f61737369676e3137683936373930363864646439623237663545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d39636f70797369676e6639636f70797369676e663137686363346337323061636636393237663545005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024753332244754243267743137683664383339306530326331363733663545005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424337375623137683337346633353063333235366334653545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6173686c7469333137683837366638336161623836613336643545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34706f776634706f77663137683033306633353961646335646438633545005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137686433393538376235643063653530633545005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431376765745f756e636865636b65645f6d75743137683865336439343164373535386239623545005f5a4e35315f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137683731343234653462323165633033613545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344c736872346c7368723137686566316333366133656132613161393545005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246936342447542431327772617070696e675f6e65673137683839376362663539343830343139393545005f5a4e35315f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137686465643662323963356435643234393545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35666d6f646635666d6f64663137683662636336363439386336333632393545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756231355f5f727573745f693132385f7375623137683066316363333830343366636365383545005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137686139336530333632623665363762373545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f323137683833666461623966333963663361373545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433706f7733706f773137683033316437666164656666653565363545005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431376765745f756e636865636b65645f6d75743137683434363738623235393635653065363545005f5a4e34636f72653366333232315f244c5424696d706c24753230246633322447542437746f5f62697473313372745f6633325f746f5f7533323137683963383764366331313161656634363545005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246931362447542431327772617070696e675f7368723137686465366163343061306231373334363545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6469766469333137683038653531383939346130323831363545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f617431357533325f746f5f6633325f626974733137683932626164663162393462393964353545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633137683339343965323062633539363839353545005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683563627274663137683637323035353561313239323639353545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366578706d3166366578706d31663137683332356534373766613731353635343545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c385f5f6d756c6469333137683864353338613838326132313335343545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f70795f6261636b776172643139636f70795f6261636b776172645f62797465733137686339363134363965323835666233343545005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137683762316534373830663565626539333545005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834657870323137686466653561336262623732326138333545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336d756c336d756c3137683830626138653739663062653138333545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d3132753132385f6469765f72656d3137683138646430633333333735343765323545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d367374726c656e3137683062373264363532313263393435323545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34636f736634636f73663137683133616538666165626534313466313545005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173687234617368723137683834633234623233646235366461313545005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746836726f756e64663137683730323439366366316639313136313545005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3972656d5f70696f32663972656d5f70696f32663137686466393239386462396563376437303545005f5a4e35315f244c5424663634247532302461732475323024636f72652e2e6f70732e2e61726974682e2e4d756c41737369676e2447542431306d756c5f61737369676e3137686330323539633635313832643535303545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336469763564697633323137686635663632636230613330383433303545005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e646964663137683031373537633262643235633130303545005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633137683962343062346563303930316239653445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756469766469333137683330333832663962373038666433653445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173686c346173686c3137683764386365323661653439633833653445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356173696e66356173696e663137683639646232313265333838376437643445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433706f7733706f773137683565333234366235393863636434643445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f313137683535383063346233386365643862633445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733133636f70795f6261636b776172643137686266613735366537383564396666623445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174357472756e6331325f5f7472756e6364667366323137686132313435646162373739346135623445005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683238316330666631636163376231623445005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137683338316563333439356330333861613445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433646976385f5f6469766466333137686664613461373363376666393232613445005f5a4e35315f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e7424475424386162735f646966663137686164366463393239326565306562393445005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f72247532302469333224475424326c743137686539306366623661393236363061393445005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746833666d613137683834663236303430626530663134393445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366c6f673170663137683633623839613465353734323764383445005f5a4e35315f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137683930356537323531663765303532373445005f5a4e34636f72653366363432315f244c5424696d706c24753230246636342447542437746f5f626974733137683031326165633062316231306266363445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d34666d696e34666d696e3137686337653337383235306639626238363445005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424326c6f3137683935326666386264633930323032363445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6c7368726469333137683535303830633862363464656165353445005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424336164643137686634623161656262326330666235353445005f5a4e34636f726537636f6e76657274336e756d36345f244c5424696d706c2475323024636f72652e2e636f6e766572742e2e46726f6d244c5424693332244754242475323024666f722475323024663634244754243466726f6d3137683562623639656336636637663434353445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33657870336578703137686438313064656566626465386466343445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978646664693137686335366339623034333033313864343445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6c7368727369333137683663653761346561393635633564343445005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e74244754243966726f6d5f626f6f6c3137686632313338396461303733323162343445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367467616d6d613573696e70693137683939653265383930363162316636343445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d357472756e63357472756e633137686134646631306665313032356332343445005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f73686c3137683736386366356162376636336232343445005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746833636f733137683036393764323466643630363530333445005f5a4e34355f244c5424693332247532302461732475323024636f72652e2e6f70732e2e6269742e2e4269744f7224475424356269746f723137686438376362663231623932633438323445005f5a4e35315f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137683466623338666431333762326637313445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431397370656369616c697a65645f6469765f72656d31317536345f6469765f72656d3137683238303764343733633337313930313445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3561636f736631723137683633643063373366303139643465303445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c35554d756c6f346d756c6f3137683632363566626261653863636563303445005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f617431357536345f746f5f6636345f626974733137683034356533383934373236393663303445005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f617368726469333137686530633736333935636361623237303445005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35726f756e6435726f756e643137683937646433356361613062373434303445005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f72247532302475363424475424326c743137683539343162343339653431653833303445005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633137686337353231363935373539336162663345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6d6f647469333137686132393265383630343331663661653345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f61743364697635646976363431306e65676174655f7536343137686665316233393566396164383338653345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733135635f737472696e675f6c656e6774683137686565656336623433663838623064633345005f5a4e35345f244c5424753634247532302461732475323024636f72652e2e6f70732e2e6269742e2e53686c244c542475333224475424244754243373686c3137686339333132373639653665303735633345005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247531362447542431327772617070696e675f7368723137683430343535333831643861386133633345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633137683431346632636562626332363333633345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7035756e6f72643137686435646137326330393436376232633345005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6164643137683762323438666663356234386563623345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d33666d61396e6f726d616c697a653137683336393166663965336437366438623345005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c395f5f6d756c6f7469343137683432656362656332616230653535623345005f5a4e35325f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542438776964656e5f68693137683664623964623636316635386362613345005f5a4e35315f244c5424753332247532302461732475323024636f72652e2e6f70732e2e61726974682e2e41646441737369676e2447542431306164645f61737369676e3137683866623662303566366631643331613345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433616464336164643137683433636435396336626433303731393345005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683373696e3137683136616637323431643161663431393345005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834666d61783137683164363631613938343336383362383345005f5a4e36375f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e43617374496e746f244c5424753634244754242447542434636173743137686437323365396130373536326139383345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34315f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f313137686234656133616638623261363939383345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d396c67616d6d61665f72396c67616d6d61665f723137686535383665346664343031393837383345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366c64657870663137683237373164643131613234346366373345005f5a4e35325f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424356c6f5f68693137686134613366393663353835376464373345005f5a4e34365f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e642447542436626974616e643137683634363531306665313261323461373345005f5a4e34636f72653366363432315f244c5424696d706c2475323024663634244754243966726f6d5f62697473313372745f7536345f746f5f6636343137686339356562376330353262613865363345005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137683531666336346532613266353461363345005f5a4e34636f726535736c69636532395f244c5424696d706c247532302424753562245424753564242447542431336765745f756e636865636b65643137686232656463313533316338626135363345005f5a4e35355f244c5424663634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f6174244754243966726f6d5f726570723137683065626639633933396265326431363345005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431356f766572666c6f77696e675f6164643137686539333662366336323631653964353345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3565787032663565787032663137683666396430303236363237313233353345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336d756c385f5f6d756c6466333137683732396662313432303566663565343345005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617436657874656e6436657874656e643137683137626564343762646233373539333345005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34315f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f343137683365656231333632303732336436323345005f5a4e34636f726533636d7035696d706c7335375f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f7224753230247573697a6524475424326c743137686665363531306461303930376233323345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346362727434636272743137683435373330316132653537623865313345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346173696e36636f6d705f723137683436356634636635303136396431313345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3563627274663563627274663137686535333161373165653330326566303345005f5a4e35315f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137686333646434343665646432393465303345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356173696e6631723137686464396530643066653839666463303345005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468367467616d6d613137683337353965633238366637623864653245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3461636f7331723137683037366436623363383939343363653245005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683574616e68663137683166643361373136616363353337653245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174646973663137683239323263373338383539353965643245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d377363616c626e66377363616c626e663137686662383564653564363636383363643245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e763132696e745f746f5f666c6f617431357533325f746f5f6636345f626974733137686437343735633365376663643261643245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7431336c656164696e675f7a65726f7332377573697a655f6c656164696e675f7a65726f735f64656661756c743137686162646365663935373662643137643245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743475646976395f5f756d6f647469333137686339633630386537363137303236643245005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424336164643137683464646538356537333139623834643245005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e74244754243268693137686639386464313161666632366230643245005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7375623137683761653134633934383938356361633245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3137776974685f7365745f6c6f775f776f72643137686632396465386564656561656335633245005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431356f766572666c6f77696e675f6164643137683033373334336435313737363963623245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c733132636f70795f666f72776172643137683334316336323630373534616337613245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366b5f636f7366366b5f636f73663137683935333462613761313334316464393245005f5a4e35325f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137683830393161363965356133356662393245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367467616d6d61367467616d6d613137686432376566666462346632666639393245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562375541646453756238756164645f6f6e653137683435646363643335336539386131393245005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683034323364313763613738656138373245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468366c6f673130663137686265656133333163363230363265363245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d35696d706c73397365745f627974657331357365745f62797465735f776f7264733137683165353638666135396232666463363245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174736964663137683563613234386330666132333732363245005f5a4e35325f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137686230623630393030356465333866353245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468386c67616d6d615f723137683233363866633966353963333664353245005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247536342447542431327772617070696e675f7375623137683365623530376336343030666262353245005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137686333643938393131316363626237353245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743661646473756236416464537562336164643137686638633061333366646235303935353245005f5a4e35325f244c542475313238247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431356f766572666c6f77696e675f6164643137686238386365383337313764373166343245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d33316d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633137683737363464386363666365633061343245005f5a4e34636f7265336e756d32325f244c5424696d706c2475323024753132382447542431327772617070696e675f73686c3137683736346539366163643463306131343245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d36726f756e646636726f756e64663137683266343137643538386138306133333245005f5a4e34636f726534697465723572616e67653132355f244c5424696d706c2475323024636f72652e2e697465722e2e7472616974732e2e646f75626c655f656e6465642e2e446f75626c65456e6465644974657261746f722475323024666f722475323024636f72652e2e6f70732e2e72616e67652e2e52616e6765496e636c7573697665244c5424412447542424475424396e6578745f6261636b3137683762663363643363646562353335323245005f5a4e35325f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431307a65726f5f776964656e3137686366613438363565336131396634323245005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74347564697631325f5f756469766d6f647469343137683833666534653634613566386166313245005f5a4e34636f7265336e756d32315f244c5424696d706c24753230246933322447542431327772617070696e675f73686c3137686630613137643532333163626466303245005f5a4e34636f726533636d7035696d706c7335365f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f7224753230246931323824475424326c743137683936376265633666666532633737303245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367472756e6366367472756e63663137683633343336656361383435613536303245005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978736674693137683862616166653565636232626135303245005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834706f77663137686331646637303437646639353034303245005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366879706f7466366879706f74663137683238343632376538373031373332303245005f5a4e34636f7265336e756d32335f244c5424696d706c24753230247573697a652447542431327772617070696e675f6e65673137686237333639663963393938303762663145005f5a4e34636f72653366363432315f244c5424696d706c2475323024663634244754243966726f6d5f626974733137686232343566383864376337396237633145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356879706f743273713137683432313830363930353866386335633145005f5a4e35315f244c5424693136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137683366386536396536336564623132633145005f5a4e34636f72653370747239636f6e73745f70747233335f244c5424696d706c247532302424425024636f6e737424753230245424475424336164643137683330633661623363343665623032633145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433636d7033636d703137686130366665326533363864613966623145005f5a4e37355f244c54247573697a65247532302461732475323024636f72652e2e736c6963652e2e696e6465782e2e536c696365496e646578244c54242475356224542475356424244754242447542431336765745f756e636865636b65643137686434653566613937653937663739623145005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e74244754243769735f7a65726f3137683634623264623364343164656137623145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631335f5f666c6f6174756e746964663137683165633262663764373538346636623145005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834657870663137683433626636333364326333356133623145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73736673693137683562363963303364383166636537613145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631315f5f666c6f6174746964663137683335323763383931656262346263393145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356c6f673266356c6f6732663137683965336163643738333438613738393145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74336d756c31396936345f6f766572666c6f77696e675f6d756c3137686133346461653337323238653834393145005f5a4e35315f244c5424693332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f73686c3137686239376138633461613338373564383145005f5a4e38395f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765244c54245424475424247532302461732475323024636f72652e2e697465722e2e72616e67652e2e52616e67654974657261746f72496d706c2447542439737065635f6e6578743137683438333034393235613162306262383145005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7375623137686463656266363730333662663739373145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356c6f6731303137683230636235623266666163343036373145005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f722475323024693332244754243267653137683233633237616164323236653536363145005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e76395f5f666978646674693137683436373263313334303830653363353145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35666d696e6635666d696e663137683562616336383638616431333932353145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f343137686638643234353064393537633532353145005f5a4e3137636f6d70696c65725f6275696c74696e73346d6174683473696e683137683161353232303632653565396535343145005f5a4e35325f244c542475313238247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6d756c3137683036646132396139306333393633343145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d367363616c626e367363616c626e3137686362303336353861353930386364333145005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431307a65726f5f776964656e3137686137393361643761633233303936333145005f5a4e35325f244c5424693634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424326c6f3137686664366432386135663438396334333145005f5a4e34355f244c5424753634247532302461732475323024636f72652e2e6f70732e2e61726974682e2e53756224475424337375623137683538383561306337653563643031333145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6173686c7369333137686430323563336165623533656666323145005f5a4e35325f244c5424753136247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542431347a65726f5f776964656e5f6d756c3137686335613664313330313362633061323145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346578703234657870323137683561393731626535326664396331323145005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f6164643137686532303639336436643262336666313145005f5a4e36375f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e43617374496e746f244c5424753332244754242447542434636173743137686261333531366333643236303564313145005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f343137686537396237356137623766623362313145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173687234617368723137686165356565323561323361393038313145005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693634244754243133756e636865636b65645f7368723137686130306332316161626633373835313145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346578706634657870663137683632636264306361313130636632313145005f5a4e34636f72653366363432315f244c5424696d706c24753230246636342447542437746f5f62697473313372745f6636345f746f5f7536343137683466396431613331623238323130313145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d356578706f32356578706f323137686565333034383538373064623666303145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3473696e683473696e683137683630323066366431313661353435303145005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356c6f6732663137683933356232373138643839626433303145005f5a4e34345f244c542475313238247532302461732475323024636f72652e2e6f70732e2e6269742e2e4e6f7424475424336e6f743137683039363933363466643766346231303145005f5a4e3137636f6d70696c65725f6275696c74696e7333696e743473646976385f5f6d6f647369333137683261323666633663613433383665663045005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34315f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f383137683932396664616139343336636163663045005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674344173687234617368723137683532303564656536636333626361663045005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137686339353430323062366535353039663045005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431356f766572666c6f77696e675f6164643137683530306339373639346563666238663045005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f6d756c3137683030326636343162383434306537663045005f5a4e35325f244c5424753332247532302461732475323024636f72652e2e6f70732e2e6269742e2e426974416e6441737369676e244754243133626974616e645f61737369676e3137686630663536336261323338353832663045005f5a4e35315f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431327772617070696e675f7368723137683865323931643863353939643566653045005f5a4e34636f726533636d7035696d706c7335355f244c5424696d706c2475323024636f72652e2e636d702e2e5061727469616c4f72642475323024666f72247532302469363424475424326c743137686161356263663637363565663264653045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d366c6465787066366c64657870663137683732336437356430346537373962643045005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e74244754243769735f7a65726f3137686133633236396538343639633662643045005f5a4e35355f244c5424663332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e666c6f61742e2e466c6f6174244754243966726f6d5f726570723137683263363661656566303037336262623045005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753634244754243133756e636865636b65645f73686c3137683861343836636336663634393462623045005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d34305f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f383137683764316539353438326630393839623045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468356c6f6731703137683939633539353934663636323738623045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3572696e74663572696e74663137686636333466353634306438666230613045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d3872656d5f70696f323872656d5f70696f323137683634653963363537643238386237393045005f5a4e3137636f6d70696c65725f6275696c74696e7333696e74357368696674395f5f6173686c6469333137686532636437316562663466383530393045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d396c67616d6d61665f723673696e5f70693137683064323333653130623666313266383045005f5a4e3137636f6d70696c65725f6275696c74696e7333696e7436616464737562375541646453756234757375623137683831636537656337383231376262383045005f5a4e35325f244c5424753332247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e48496e742447542435776964656e3137686330336132643566346133383835383045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346661627334666162733137686635373031336338326133383530383045005f5a4e3137636f6d70696c65725f6275696c74696e73346d61746834666d696e3137683864623337326338343633626332363045005f5a4e34636f7265336e756d32315f244c5424696d706c24753230247533322447542431327772617070696e675f6d756c3137686534303664623331623837633362353045005f5a4e34636f726533707472376d75745f70747233315f244c5424696d706c2475323024244250246d757424753230245424475424336164643137683333663164306536363337323837343045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d376b5f6578706f32376b5f6578706f323137686263363836666566353234313330343045005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024693136244754243133756e636865636b65645f7368723137683935386539346364353731346365333045005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433737562385f5f7375627366333137683265363463356435616563383034333045005f5a4e35315f244c5424753634247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e496e742447542431316c6f676963616c5f7368723137683737333833396236356139333530333045005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617434636f6e7631325f5f666978756e73646674693137683531353266343063373239376564313045005f5a4e34636f7265336e756d32315f244c5424696d706c2475323024753136244754243133756e636865636b65645f73686c3137686331383932306563313731646364313045005f5a4e35335f244c542469313238247532302461732475323024636f6d70696c65725f6275696c74696e732e2e696e742e2e44496e7424475424313066726f6d5f6c6f5f68693137683136663837363737393264333938313045005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f617433616464336164643137683133323066663765323166313832313045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d35666c6f6f7235666c6f6f723137686531633834323631636664666663303045005f5a4e3137636f6d70696c65725f6275696c74696e73346d617468346c69626d346173696e346173696e3137686135633331343431363034363633303045005f5a4e3137636f6d70696c65725f6275696c74696e7335666c6f6174336d756c385f5f6d756c73663331376864336335333535313965343163303030450069735f656d7074793c7573697a653e00737065635f6e6578743c7573697a653e006f66667365743c7573697a653e00737065635f6e6578745f6261636b3c7573697a653e006765745f756e636865636b65643c7573697a653e006164643c7573697a653e007375623c7573697a653e006765745f756e636865636b65643c7573697a652c207573697a653e006765745f756e636865636b65643c7536342c207573697a653e006765745f756e636865636b65645f6d75743c6636342c207573697a653e006765745f756e636865636b65643c6636342c207573697a653e006765745f756e636865636b65645f6d75743c6933322c207573697a653e006765745f756e636865636b65643c6933322c207573697a653e006765745f756e636865636b65643c6633322c207573697a653e006e6578743c636f72653a3a6f70733a3a72616e67653a3a52616e6765496e636c75736976653c7573697a653e3e006f66667365743c75383e006164643c75383e006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e007375623c75383e006c7368723c753132383e006d756c6f3c753132383e006164646f3c753132383e007375626f3c753132383e006173686c3c753132383e00756164645f6f6e653c753132383e00756164643c753132383e00757375623c753132383e00617368723c693132383e006164646f3c693132383e007375626f3c693132383e006d756c3c693132383e006164643c693132383e007375623c693132383e006164643c7531363e006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e006c7368723c7536343e006d756c6f3c7536343e006d756c3c7536343e006173686c3c7536343e006765745f756e636865636b65643c7536343e006164643c7536343e006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e00617368723c6936343e00706f773c6636343e006765745f756e636865636b65645f6d75743c6636343e00636d703c6636343e006d756c3c6636343e00726561645f766f6c6174696c653c6636343e00756e6f72643c6636343e006765745f756e636865636b65643c6636343e006164643c6636343e0064697636343c6636343e00696e746f3c6933322c206636343e00657874656e643c6633322c206636343e006c7368723c7533323e006d756c6f3c7533323e006173686c3c7533323e006164643c7533323e006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e006765745f756e636865636b65645f6d75743c6933323e00617368723c6933323e006765745f756e636865636b65643c6933323e006164643c6933323e00706f773c6633323e00636d703c6633323e006d756c3c6633323e00726561645f766f6c6174696c653c6633323e00756e6f72643c6633323e006765745f756e636865636b65643c6633323e006164643c6633323e0064697633323c6633323e007472756e633c6636342c206633323e002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313939002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303939002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313839002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303839002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313739002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303739002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313639002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303639002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313539002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303539002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323439002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313439002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303439002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323339002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303339002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323239002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313239002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303239002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313139002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303139002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323039002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313039002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303039005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f38005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f38005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f38002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313938002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303938002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313838002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303838002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313738002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303738002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313638002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303638002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313538002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303538002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323438002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313438002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303438002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323338002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313338002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303338002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323238002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313238002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303238002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323138002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313138002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303138002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323038002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313038002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303038002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313937002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303937002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313837002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303837002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313737002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303737002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313637002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303637002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313537002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303537002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323437002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313437002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303437002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323337002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313337002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303337002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313237002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303237002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323137002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313137002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303137002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323037002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313037002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303037002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313936002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303936002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313836002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303836002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313736002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303736002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313636002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303636002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313536002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303536002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323436002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313436002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303436002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323336002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313336002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303336002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323236002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313236002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303236002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323136002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313136002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303136002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323036002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313036002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303036002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313935002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303935002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313835002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303835002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313735002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303735002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313635002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303635002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313535002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303535002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323435002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313435002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303435002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323335002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313335002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303335002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323235002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313235002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303235002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323135002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313135002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303135002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323035002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313035002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303035005f5f6d756c6f746934005f5f756469766d6f64746934005f5f6469766d6f64746934005f5f6d756c6f736934005f5f756469766d6f64736934005f5f6469766d6f64736934005f5f6d756c6f646934005f5f756469766d6f64646934005f5f6469766d6f64646934005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f34005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f34005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f34002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313934002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303934002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313834002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303834002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313734002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e3037340064697636340072745f6636345f746f5f753634006e65676174655f7536340072745f7536345f746f5f663634002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313634002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303634002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313534002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303534002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323434002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303434002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323334002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313334002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303334002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323234002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313234002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303234002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323134002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313134002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303134002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323034002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313034002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303034005f5f75646976746933005f5f646976746933005f5f6c736872746933005f5f61736872746933005f5f6d756c746933005f5f6173686c746933005f5f756d6f64746933005f5f6d6f64746933005f5f75646976736933005f5f646976736933005f5f6c736872736933005f5f61736872736933005f5f6173686c736933005f5f756d6f64736933005f5f6d6f64736933005f5f75646976646933005f5f646976646933005f5f6c736872646933005f5f61736872646933005f5f6d756c646933005f5f6173686c646933005f5f756d6f64646933005f5f6d6f64646933005f5f646976736633005f5f6d756c736633005f5f616464736633005f5f737562736633005f5f646976646633005f5f6d756c646633005f5f616464646633005f5f737562646633002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313933002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303933002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313833002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303833002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313733002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303733002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313633002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303633002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323533002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313533002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303533002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323433002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313433002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303433002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323333002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313333002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303333002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323233002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313233002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303233002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313133002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303133002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323033002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313033002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e313033002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e3030330065787032006b5f6578706f320072656d5f70696f32006174616e32005f5f636c7a736932006c6f6732005f5f6571736632005f5f706f7769736632005f5f7472756e636466736632005f5f6765736632005f5f756e6f7264736632005f5f6571646632005f5f706f7769646632005f5f657874656e647366646632005f5f6765646632005f5f756e6f7264646632005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f32005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f32005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f32002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313932002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303932002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313832002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303832002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313732002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303732002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313632002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303632002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323532002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313532002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303532002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323432002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313432002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e3034320072745f6633325f746f5f7533320072745f7533325f746f5f663332002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323332002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313332002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303332002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323232002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313232002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303232002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323132002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313132002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303132002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323032002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313032002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303032006578706d31005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f31005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f31005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f31002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313931002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303931002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303831002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313731002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303731002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313631002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303631002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323531002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303531002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323431002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313431002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303431002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323331002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303331002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323231002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313231002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303231002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323131002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303131002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323031002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313031002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303031002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313930002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303930002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313830002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303830002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313730002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303730002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313630002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303630002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323530002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313530002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303530002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323430002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303430002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323330002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313330002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303330002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323230002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313230002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303230006c6f673130002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323130002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313130002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e303130002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e323030002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e313030002f727573742f646570732f636f6d70696c65725f6275696c74696e732d302e312e3130332f7372632f6c69622e72732f402f636f6d70696c65725f6275696c74696e732e363530613935393661313763626561342d6367752e30303000636c616e67204c4c564d202872757374632076657273696f6e20312e37362e302d6e696768746c79202832316363653231643820323032332d31322d313129290000c79e030f2e64656275675f7075626e616d6573bc030000020000000000320b000026000000636f7265002b0000007074720030000000636f6e73745f707472003a0000006164643c7573697a653e00470000006164643c6636343e00630000006d75745f707472007a0000006164643c6933323e008a000000736c696365008f000000696e64657800940000007b696d706c23327d00990000006765745f756e636865636b65643c7573697a653e00a50000006765745f756e636865636b65645f6d75743c6636343e00b10000006765745f756e636865636b65643c6636343e00bd0000006765745f756e636865636b65643c6933323e00c90000006765745f756e636865636b65645f6d75743c6933323e00dc0000006765745f756e636865636b65643c7573697a652c207573697a653e00e90000006765745f756e636865636b65645f6d75743c6636342c207573697a653e00f60000006765745f756e636865636b65643c6636342c207573697a653e00030100006765745f756e636865636b65643c6933322c207573697a653e00100100006765745f756e636865636b65645f6d75743c6933322c207573697a653e001f0100006f7073002901000052616e6765496e636c7573697665003b01000069735f656d7074793c7573697a653e004b01000069746572005001000072616e676500550100007b696d706c2331347d0067010000737065635f6e6578745f6261636b3c7573697a653e00750100007b696d706c2331357d00880100007b696d706c2331367d008d0100006e6578745f6261636b3c7573697a653e009b0100007b696d706c2334317d00a0010000666f72776172645f756e636865636b656400ad0100007b696d706c23357d00b2010000737065635f6e6578743c7573697a653e00c00100007b696d706c23367d00c50100006e6578743c7573697a653e00d4010000616461707465727300d901000072657600de0100007b696d706c23317d00e30100006e6578743c636f72653a3a6f70733a3a72616e67653a3a52616e6765496e636c75736976653c7573697a653e3e00f3010000636d7000f8010000696d706c7300fd0100007b696d706c2335347d00020200006c7400120200006e756d00170200007b696d706c2331317d001c020000756e636865636b65645f616464002b02000066363400300200007b696d706c23307d003a02000072745f7536345f746f5f663634004802000066726f6d5f626974730058020000636f6d70696c65725f6275696c74696e73005d0200006d61746800620200006c69626d006c0200007363616c626e007e02000072656d5f70696f325f6c617267650000000000400000000200320b0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666c6f6f720000000000690300000200750b0000fe0e000026000000636f7265002b000000663332003a00000072745f6633325f746f5f753332005a00000072745f7533325f746f5f66333200770000006f7073007c00000062697400810000007b696d706c2333317d00930000007b696d706c2338337d00a60000007b696d706c233133357d00b90000007b696d706c233836337d00cc0000007b696d706c233238377d00df0000007b696d706c23313437377d00f20000007b696d706c23313336357d00050100007b696d706c2333327d000a010000626974616e6400170100007b696d706c2338347d001c0100006269746f72002a0100007b696d706c233133367d002f010000626974786f72003d0100007b696d706c233931317d004201000073687200500100007b696d706c233333357d005501000073686c00630100007b696d706c23313530317d006801000073686c5f61737369676e00760100007b696d706c23313336367d007b0100006269746f725f61737369676e008a0100006172697468008f0100007b696d706c233239397d00a20100007b696d706c233330307d00a70100006164645f61737369676e00b7010000636d7000bc010000696d706c7300c10100007b696d706c2336307d00ee0100007b696d706c2332347d000e0200007b696d706c2336327d0013020000676500200200006774002d0200006c74003b0200007b696d706c2332357d00400200006571004d0200006e65005d0200006e756d00750200007b696d706c23397d0089020000663634008e0200007b696d706c23307d009802000072745f6636345f746f5f75363400a6020000746f5f6269747300b802000072745f7536345f746f5f66363400c602000066726f6d5f6269747300d6020000636f6d70696c65725f6275696c74696e7300db020000666c6f617400fe02000061646400030300006164643c6633323e000f0300005f5f61646473663300780800006164643c6636343e00840800005f5f61646464663300810e00007b696d706c23317d00860e00007265707200920e000066726f6d5f7265707200a00e0000696e7400a50e00007b696d706c23367d00b70e00007b696d706c233133317d00ca0e00007b696d706c23387d00cf0e00007772617070696e675f73756200db0e000066726f6d5f626f6f6c00e80e00007b696d706c233132307d00ed0e0000636173740000000000b10000000200731a0000b90000001e000000636f726500230000006e756d00280000007b696d706c23387d00540000007b696d706c23327d00660000007772617070696e675f73756200740000007b696d706c23397d00790000006c656164696e675f7a65726f730088000000636f6d70696c65725f6275696c74696e73008d000000666c6f617400920000007b696d706c23307d00a40000007b696d706c23317d00a90000006e6f726d616c697a6500000000007600000002002c1b00007f0000001e000000636f726500230000006e756d003a0000007b696d706c23397d004e000000636f6d70696c65725f6275696c74696e730053000000696e7400580000007b696d706c23367d006a0000007b696d706c23387d006f0000006c656164696e675f7a65726f730000000000700200000200ab1b0000a502000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d0030000000696d706c730035000000636f6d706172655f62797465730042000000635f737472696e675f6c656e677468005b000000636f70795f6261636b776172640060000000636f70795f6261636b776172645f6279746573006c000000636f70795f6261636b776172645f6d6973616c69676e65645f776f7264730078000000636f70795f6261636b776172645f616c69676e65645f776f7264730091000000636f70795f666f72776172640096000000636f70795f666f72776172645f627974657300a2000000636f70795f666f72776172645f6d6973616c69676e65645f776f72647300ae000000636f70795f666f72776172645f616c69676e65645f776f72647300c70000007365745f627974657300cc0000007365745f62797465735f627974657300d80000007365745f62797465735f776f72647300e60000006d656d636d7000130100007374726c656e00200100006d656d6d6f7665002d0100006d656d736574003a01000062636d7000470100006d656d6370790056010000636f7265005b0100006e756d00600100007b696d706c2331317d008c0100007772617070696e675f73756200990100007772617070696e675f6e656700a801000070747200ad010000636f6e73745f70747200c40100006f66667365743c75383e00d10100007375623c75383e00ed0100006d75745f70747200f20100007b696d706c23307d00380200006f66667365743c7573697a653e00450200007375623c7573697a653e00860200006164643c75383e00930200006164643c7573697a653e00000000005d0100000200501e0000e105000026000000636f7265002b000000663634003a00000072745f6636345f746f5f7536340048000000746f5f62697473006700000072745f7536345f746f5f663634008200000066726f6d5f6269747300910000007074720096000000636f6e73745f70747200a00000006164643c6636343e00b0000000736c69636500b5000000696e64657800ba0000007b696d706c23327d00bf0000006765745f756e636865636b65643c6636343e00cd0000007b696d706c23307d00d20000006765745f756e636865636b65643c6636342c207573697a653e00e2000000636f6d70696c65725f6275696c74696e7300e70000006d61746800ec0000006c69626d00f1000000776974685f7365745f686967685f776f726400fe000000776974685f7365745f6c6f775f776f7264000b0100006765745f686967685f776f7264001d010000706f77009e0500007363616c626e00000000003f000000020031240000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007371727400000000003f000000020074240000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666162730000000000ca0000000200b72400007501000026000000636f7265002b00000066333200300000007b696d706c23307d004700000072745f6633325f746f5f753332006700000072745f7533325f746f5f663332007500000066726f6d5f626974730082000000746f5f626974730092000000636f6d70696c65725f6275696c74696e7300970000006d617468009c0000006c69626d00220100006c6f676600340100006c67616d6d61665f72004001000073696e5f706900520100006b5f73696e6600640100006b5f636f736600000000007b01000002002c260000d104000026000000636f7265002b0000006e756d00300000007b696d706c23397d005c0000007b696d706c2331307d006f0000007b696d706c23387d00740000006c656164696e675f7a65726f730080000000636865636b65645f646976008d0000007772617070696e675f737562009a000000756e636865636b65645f73686c00a70000007772617070696e675f73686c00b40000007772617070696e675f61646400c4000000636f6d70696c65725f6275696c74696e7300c9000000696e7400ce0000007370656369616c697a65645f6469765f72656d00d30000007536345f6e6f726d616c697a6174696f6e5f736869667400df0000007536345f62795f7536345f6469765f72656d00eb000000753132385f6469765f72656d007c0200007533325f6e6f726d616c697a6174696f6e5f736869667400880200007533325f62795f7533325f6469765f72656d00940200007536345f6469765f72656d00280400007533325f6469765f72656d0000000000310100000200fd2a00001102000026000000636f7265002b000000663634003a00000072745f6636345f746f5f7536340048000000746f5f626974730057000000707472005c000000636f6e73745f70747200660000006164643c6636343e0075000000726561645f766f6c6174696c653c6633323e0083000000736c6963650088000000696e646578008d0000007b696d706c23327d00920000006765745f756e636865636b65643c6636343e00a00000007b696d706c23307d00a50000006765745f756e636865636b65643c6636342c207573697a653e00b5000000636f6d70696c65725f6275696c74696e7300ba0000006d61746800bf0000006c69626d00c90000007300d500000073696e706900e10000007467616d6d6100ee0100006b5f73696e00000200006b5f636f7300000000004000000002000e2d0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666c6f6f720000000000aa0000000200512d00006e02000026000000636f7265002b00000066363400300000007b696d706c23307d004700000072745f6636345f746f5f753634006700000072745f7536345f746f5f663634007500000066726f6d5f626974730082000000746f5f626974730092000000636f6d70696c65725f6275696c74696e7300970000006d617468009c0000006c69626d00ab0000006d656469756d00b800000072656d5f70696f320000000000170100000200bf2f0000ac01000026000000636f7265002b000000663332003a00000072745f6633325f746f5f7533320048000000746f5f62697473005500000069735f6e616e00640000007074720069000000726561645f766f6c6174696c653c6633323e0076000000636f6e73745f70747200800000006164643c6633323e0090000000736c6963650095000000696e646578009a0000007b696d706c23327d009f0000006765745f756e636865636b65643c6633323e00ad0000007b696d706c23307d00b20000006765745f756e636865636b65643c6633322c207573697a653e00c2000000636f6d70696c65725f6275696c74696e7300c70000006d61746800cc0000006c69626d00d60000006174616e6600000000004000000002006b310000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000066616273660000000000c60000000200ae3100005001000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f62697473005500000069735f6e616e006700000072745f7536345f746f5f663634007500000066726f6d5f6269747300840000007074720089000000726561645f766f6c6174696c653c6636343e0098000000636f6d70696c65725f6275696c74696e73009d0000006d61746800a20000006c69626d00ac0000006578706d310000000000bc0000000200fe3200003301000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f62697473005a00000072745f7533325f746f5f663332006800000066726f6d5f626974730077000000707472007c000000726561645f766f6c6174696c653c6633323e008b000000636f6d70696c65725f6275696c74696e7300900000006d61746800950000006c69626d009f0000006578706d3166000000000057010000020031340000eb01000026000000636f7265002b000000663634003a00000072745f6636345f746f5f7536340048000000746f5f62697473005500000069735f6e616e006700000072745f7536345f746f5f663634007500000066726f6d5f6269747300840000007074720089000000726561645f766f6c6174696c653c6633323e0096000000636f6e73745f70747200a00000006164643c6636343e00af000000726561645f766f6c6174696c653c6636343e00bd000000736c69636500c2000000696e64657800c70000007b696d706c23327d00cc0000006765745f756e636865636b65643c6636343e00da0000007b696d706c23307d00df0000006765745f756e636865636b65643c6636342c207573697a653e00ef000000636f6d70696c65725f6275696c74696e7300f40000006d61746800f90000006c69626d00030100007363616c626e001501000065787000000000001601000002001c360000ac01000026000000636f7265002b000000663634003a00000072745f6636345f746f5f7536340048000000746f5f62697473005500000069735f6e616e00640000007074720069000000726561645f766f6c6174696c653c6633323e0076000000636f6e73745f70747200800000006164643c6636343e0090000000736c6963650095000000696e646578009a0000007b696d706c23327d009f0000006765745f756e636865636b65643c6636343e00ad0000007b696d706c23307d00b20000006765745f756e636865636b65643c6636342c207573697a653e00c2000000636f6d70696c65725f6275696c74696e7300c70000006d61746800cc0000006c69626d00d60000006174616e00000000003f0000000200c8370000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006661627300000000003701000002000b380000c101000026000000636f7265002b000000663332003a00000072745f6633325f746f5f7533320048000000746f5f62697473005a00000072745f7533325f746f5f663332006800000066726f6d5f626974730077000000707472007c000000726561645f766f6c6174696c653c6633323e0089000000636f6e73745f70747200930000006164643c6633323e00a3000000736c69636500a8000000696e64657800ad0000007b696d706c23327d00b20000006765745f756e636865636b65643c6633323e00c00000007b696d706c23307d00c50000006765745f756e636865636b65643c6633322c207573697a653e00d5000000636f6d70696c65725f6275696c74696e7300da0000006d61746800df0000006c69626d00e90000007363616c626e6600fb0000006578706600000000009a0000000200cc3900001301000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f62697473005a00000072745f7536345f746f5f663634006800000066726f6d5f626974730078000000636f6d70696c65725f6275696c74696e73007d0000006d61746800820000006c69626d008c0000006c6f670000000000810000000200df3a0000c900000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978736674690000000000810000000200a83b0000c800000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978736664690000000000810000000200703c0000c900000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978646674690000000000810000000200393d0000c800000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978646673690000000000810000000200013e0000c700000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978736673690000000000810000000200c83e0000c800000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978646664690000000000840000000200903f0000c700000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e7373666469000000000084000000020057400000c700000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e736466736900000000008400000002001e410000c800000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e73646674690000000000840000000200e6410000c800000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e73736674690000000000840000000200ae420000c700000026000000636f7265002b00000066333200300000007b696d706c23307d003a00000072745f6633325f746f5f7533320048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e7373667369000000000084000000020075430000c700000026000000636f7265002b00000066363400300000007b696d706c23307d003a00000072745f6636345f746f5f7536340048000000746f5f626974730058000000636f6d70696c65725f6275696c74696e73005d000000666c6f61740062000000636f6e7600790000005f5f666978756e736466646900000000006800000002003c440000d100000026000000636f7265002b00000066363400300000007b696d706c23307d003500000069735f6e616e0045000000636f6d70696c65725f6275696c74696e73004a0000006d617468004f0000006c69626d00790000006664696d00000000006900000002000d450000d100000026000000636f7265002b00000066333200300000007b696d706c23307d003500000069735f6e616e0045000000636f6d70696c65725f6275696c74696e73004a0000006d617468004f0000006c69626d00790000006664696d660000000000690000000200de450000c900000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800300000006c69626d005a000000666d61786600a9000000636f726500ae00000066333200b30000007b696d706c23307d00b800000069735f6e616e0000000000690000000200a7460000c900000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800300000006c69626d005a000000666d696e6600a9000000636f726500ae00000066333200b30000007b696d706c23307d00b800000069735f6e616e000000000068000000020070470000c900000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800300000006c69626d005a000000666d696e00a9000000636f726500ae00000066363400b30000007b696d706c23307d00b800000069735f6e616e000000000068000000020039480000c900000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800300000006c69626d005a000000666d617800a9000000636f726500ae00000066363400b30000007b696d706c23307d00b800000069735f6e616e000000000037000000020002490000a800000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c646578700000000000890000000200aa490000870000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007363616c626e00440000006c646578700054000000636f72650059000000663634005e0000007b696d706c23307d006800000072745f7536345f746f5f663634007600000066726f6d5f626974730000000000370000000200314a0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c646578700000000000440000000200694a0000cd01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f617368727369330000000000660100000200364c00004c0100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d000000417368720032000000617368723c6933323e003f0000005f5f61736872736933004d0000007b696d706c2331377d00520000006869005f00000066726f6d5f6c6f5f6869006c0000006c6f007a0000007b696d706c23357d007f0000006c6f676963616c5f736872008b0000007772617070696e675f73687200970000007772617070696e675f73686c00a40000007b696d706c2332357d00a9000000776964656e5f686900b60000007a65726f5f776964656e00c6000000636f726500cb0000006e756d00d00000007b696d706c23377d00f00000007b696d706c23317d00f5000000756e636865636b65645f736872000f010000756e636865636b65645f73686c002b0100006f7073003001000062697400350100007b696d706c2338387d003a0100006269746f720000000000420000000200824d00002501000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f65717366320000000000330100000200a74e0000300100001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333317d006b0000007b696d706c2338337d00700000006269746f72007e0000007b696d706c2333377d0083000000626974616e640092000000636d700097000000696d706c73009c0000007b696d706c2336307d00af0000007b696d706c2337327d00b4000000676500c1000000677400ce0000006c7400dc0000007b696d706c2333307d00e1000000657100f2000000636f6d70696c65725f6275696c74696e7300f7000000666c6f617400fc0000007b696d706c23307d0001010000726570720013010000636d703c6633323e001f0100005f5f65717366320000000000360000000200d74f00001701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006362727400000000009b0000000200ee500000a20000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d009200000063627274000000000044000000020090510000ce01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173686c64693300000000006a01000002005e5300003a0100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004173686c00320000006173686c3c7536343e003f0000005f5f6173686c646933004d0000007b696d706c2331347d00520000006869005f0000006c6f006c00000066726f6d5f6c6f5f6869007a0000007b696d706c23367d007f0000007772617070696e675f73686c008b0000006c6f676963616c5f73687200980000007b696d706c2332327d00aa0000007a65726f5f776964656e00b7000000776964656e5f686900c7000000636f726500cc0000006e756d00d10000007b696d706c23387d00d6000000756e636865636b65645f73686c00f00000007772617070696e675f73756200fd000000756e636865636b65645f736872000a0100007772617070696e675f73687200190100006f7073001e01000062697400230100007b696d706c2338337d00280100006269746f720000000000360000000200985400003901000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f67320000000000e60000000200d1550000c60000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f000000636f6e7665727400740000006e756d00790000007b696d706c2337397d007e00000066726f6d008c0000007b696d706c23337d0091000000696e746f3c6933322c206636343e00a1000000636f6d70696c65725f6275696c74696e7300a60000006d61746800ab0000006c69626d00b50000006c6f6732000000000036000000020097560000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f673200000000004c0000000200cf560000d700000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f753132385f6164646f00000000000f0100000200a6570000dd0000001e000000636f726500230000006e756d00280000007b696d706c23397d0049000000636d70004e000000696d706c7300530000007b696d706c2336347d00580000006c740069000000636f6d70696c65725f6275696c74696e73006e000000696e7400730000007b696d706c23387d00780000006f766572666c6f77696e675f61646400840000007772617070696e675f6164640091000000616464737562009600000055416464537562009b000000756164643c753132383e00a800000041646453756200ad0000006164643c753132383e00ba0000004164646f00bf0000006164646f3c753132383e00cc0000005f5f727573745f753132385f6164646f0000000000360000000200835800002f01000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000074616e660000000000a50000000200b25900009a0000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000074616e6600440000006b5f74616e660054000000636f72650059000000663332005e0000007b696d706c23307d006800000072745f6633325f746f5f7533320076000000746f5f626974730085000000707472008a000000726561645f766f6c6174696c653c6633323e00000000003600000002004c5a0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000074616e660000000000820000000200845a0000750000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000072656d5f70696f32660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f7533325f746f5f663332006400000066726f6d5f626974730000000000420000000200f95a00009201000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c6f7469340000000000ed00000002008b5c0000d80000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006d756c002d000000693132385f6f766572666c6f77696e675f6d756c00390000005f5f6d756c6f7469340046000000554d756c6f004b0000006d756c6f3c753132383e00590000007b696d706c23387d005e00000069735f7a65726f006b0000007b696d706c2331307d007c0000006f766572666c6f77696e675f61646400890000007b696d706c2332337d008e000000776964656e5f6d756c009e000000636f726500a30000006e756d00ba0000007772617070696e675f6d756c0000000000370000000200635d0000ff00000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006879706f740000000000a30000000200625e0000a10000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006879706f74009000000073710000000000370000000200035f0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006879706f7400000000003f00000002003b5f0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007371727400000000003600000002007e5f0000d300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f676600000000009b000000020051600000a20000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00920000006c6f67660000000000470000000200f3600000e600000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174746964660000000000bc0000000200d9610000960000001e000000636f726500230000006e756d00280000007b696d706c23347d002d0000007772617070696e675f616273003a000000756e7369676e65645f6162730049000000663634004e0000007b696d706c23307d005800000072745f7536345f746f5f663634006600000066726f6d5f626974730076000000636f6d70696c65725f6275696c74696e73007b000000666c6f61740080000000636f6e7600850000005f5f666c6f6174746964660000000000b100000002006f6200007b0000001e000000636f726500230000006e756d00280000007b696d706c2331307d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a000000753132385f746f5f6636345f626974730000000000590000000200ea6200008100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f380000000000bb00000002006b630000690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e00340000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f380043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7536343e0000000000370000000200d4630000cf00000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006173696e660000000000820000000200a3640000810000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d00640000006173696e66007000000072000000000037000000020024650000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006173696e6600000000004000000002005c650000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666162736600000000003f00000002009f650000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000737172740000000000350000000200e26500006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f67000000000035000000020045660000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f6700000000003800000002007d660000da00000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000726f756e64660000000000ab000000020057670000a70000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d0084000000636f70797369676e660096000000726f756e64660000000000380000000200fe670000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000726f756e6466000000000041000000020036680000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007472756e6366000000000036000000020079680000d100000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000666d6f640000000000c100000002004a690000ae0000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f0000006e756d00740000007b696d706c23397d00790000007772617070696e675f7375620089000000636f6d70696c65725f6275696c74696e73008e0000006d61746800930000006c69626d009d000000666d6f640000000000360000000200f8690000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000666d6f640000000000450000000200306a00006f00000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469766d6f6473693400000000004600000002009f6a00003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f647369340000000000450000000200dd6a00003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6469766d6f6473693400000000003700000002001b6b0000d100000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000666d6f64660000000000c20000000200ec6b0000ae0000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f62697473006f0000006e756d00740000007b696d706c23387d00790000007772617070696e675f7375620089000000636f6d70696c65725f6275696c74696e73008e0000006d61746800930000006c69626d009d000000666d6f646600000000003700000002009a6c0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000666d6f64660000000000350000000200d26c00008901000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000074616e0000000000d500000002005b6e0000e00000001e000000636f7265002300000066363400280000007b696d706c23307d003f00000072745f6636345f746f5f753634005a000000746f5f62697473006c00000072745f7536345f746f5f663634007a00000066726f6d5f626974730089000000707472008e000000726561645f766f6c6174696c653c6636343e009d000000636f6d70696c65725f6275696c74696e7300a20000006d61746800a70000006c69626d00b100000074616e00c30000006b5f74616e00cf0000007a65726f5f6c6f775f776f726400000000003500000002003b6f0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000074616e0000000000430000000200736f0000fe05000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f617400300000006d756c003a0000005f5f6d756c736633000000000053040000020071750000980400001e000000636f72650023000000663332003200000072745f6633325f746f5f753332005200000072745f7533325f746f5f663332006f0000006f7073007400000062697400790000007b696d706c2333317d008b0000007b696d706c233133357d009e0000007b696d706c233836337d00b10000007b696d706c233238377d00c40000007b696d706c23313336357d00d70000007b696d706c2338337d00ea0000007b696d706c23313437377d00fd0000007b696d706c23313333397d00100100007b696d706c23313735337d00230100007b696d706c2333327d0028010000626974616e6400350100007b696d706c233133367d003a010000626974786f7200480100007b696d706c233931317d004d010000736872005b0100007b696d706c233333357d006001000073686c006e0100007b696d706c23313336367d00730100006269746f725f61737369676e00810100007b696d706c2338347d00860100006269746f7200940100007b696d706c23313530317d009901000073686c5f61737369676e00a70100007b696d706c23313334307d00ac010000626974616e645f61737369676e00ba0100007b696d706c23313737377d00bf0100007368725f61737369676e00ce010000617269746800d30100007b696d706c233239397d00e60100007b696d706c233330307d00eb0100006164645f61737369676e00fb010000636d700000020000696d706c7300050200007b696d706c2336307d00320200007b696d706c2332347d00450200007b696d706c2336327d004a02000067650057020000677400640200006c7400720200007b696d706c2332357d0077020000657100840200006e6500940200006e756d00990200007b696d706c23397d00b90200007b696d706c23327d00d80200007772617070696e675f61646400060300007b696d706c2331307d000b0300007772617070696e675f6d756c001a030000663634001f0300007b696d706c23307d002903000072745f6636345f746f5f7536340037030000746f5f62697473004903000072745f7536345f746f5f663634005703000066726f6d5f626974730067030000636f6d70696c65725f6275696c74696e73006c030000666c6f6174008f0300006d756c00940300006d756c3c6633323e00a00300005f5f6d756c73663300ad0300006d756c3c6636343e00b90300005f5f6d756c64663300c70300007b696d706c23317d00cc0300007265707200d803000066726f6d5f7265707200e6030000696e7400eb0300007b696d706c2332327d00f0030000776964656e000b0400007b696d706c2331347d00100400006c6f001d0400006c6f5f6869002a040000686900380400007b696d706c23367d004a0400007b696d706c2332337d004f040000776964656e5f6d756c005d0400007b696d706c233133317d00700400007b696d706c233132307d00750400006361737400830400007b696d706c23387d00880400007772617070696e675f7375620000000000b10000000200097a0000b90000001e000000636f726500230000006e756d00280000007b696d706c23387d00540000007b696d706c23327d00660000007772617070696e675f73756200740000007b696d706c23397d00790000006c656164696e675f7a65726f730088000000636f6d70696c65725f6275696c74696e73008d000000666c6f617400920000007b696d706c23307d00a40000007b696d706c23317d00a90000006e6f726d616c697a650000000000440000000200c27a0000a201000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173686c7369330000000000590100000200647c00002d0100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004173686c00320000006173686c3c7533323e003f0000005f5f6173686c736933004d0000007b696d706c2331337d00520000006869005f0000006c6f006c00000066726f6d5f6c6f5f6869007a0000007b696d706c23347d007f0000007772617070696e675f73686c008b0000006c6f676963616c5f73687200980000007b696d706c2332317d00aa0000007a65726f5f776964656e00b7000000776964656e5f686900c7000000636f726500cc0000006e756d00d10000007b696d706c23377d00d6000000756e636865636b65645f73686c00f0000000756e636865636b65645f73687200fd0000007772617070696e675f736872000c0100006f7073001101000062697400160100007b696d706c2338327d001b0100006269746f720000000000370000000200917d0000d300000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636272746600000000009c0000000200647e0000a20000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d0092000000636272746600000000004c0000000200067f00005701000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f693132385f7375626f00000000005601000002005d800000130100001e000000636f726500230000006e756d00280000007b696d706c23397d00490000006f7073004e00000062697400530000007b696d706c23377d00580000006e6f740067000000636d70006c000000696d706c7300710000007b696d706c2337367d00760000006c740087000000636f6d70696c65725f6275696c74696e73008c000000696e7400910000007b696d706c23387d00960000006f766572666c6f77696e675f61646400a20000007772617070696e675f61646400af00000061646473756200b40000005541646453756200b9000000756164643c753132383e00c5000000757375623c753132383e00d1000000756164645f6f6e653c753132383e00de00000041646453756200e30000007375623c693132383e00f00000005375626f00f50000007375626f3c693132383e00020100005f5f727573745f693132385f7375626f0000000000430000000200708100006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469767469330000000000430000000200d68100003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f75646976746933000000000036000000020014820000be00000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000074616e680000000000ba0000000200d2820000a80000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f7536345f746f5f663634004000000066726f6d5f62697473005200000072745f6636345f746f5f7536340060000000746f5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d009700000074616e6800000000003600000002007a830000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000074616e680000000000470000000200b2830000cb00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f61747369736600000000008c00000002007d840000610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007533325f746f5f6633325f626974730042000000636f726500470000006e756d004c0000007b696d706c23387d00510000006c656164696e675f7a65726f730000000000bc0000000200de840000960000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f617473697366003d000000636f726500420000006e756d00470000007b696d706c23327d004c0000007772617070696e675f6162730059000000756e7369676e65645f6162730068000000663332006d0000007b696d706c23307d007700000072745f7533325f746f5f663332008500000066726f6d5f626974730000000000590000000200748500008100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f340000000000bb0000000200f5850000690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e00340000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f340043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7533323e00000000003700000002005e860000be00000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000074616e68660000000000bb00000002001c870000a80000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f7533325f746f5f663332004000000066726f6d5f62697473005200000072745f6633325f746f5f7533320060000000746f5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d009700000074616e68660000000000370000000200c4870000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000074616e68660000000000350000000200fc8700000401000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000073696e0000000000ad000000020000890000ac0000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000007074720054000000726561645f766f6c6174696c653c6636343e0063000000636f6d70696c65725f6275696c74696e7300680000006d617468006d0000006c69626d007700000073696e00890000006b5f636f73009b0000006b5f73696e0000000000350000000200ac890000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000073696e0000000000370000000200e4890000c100000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000073696e686600000000009c0000000200a58a0000950000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073696e68660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f7533325f746f5f663332006400000066726f6d5f62697473007600000072745f6633325f746f5f7533320084000000746f5f6269747300000000003700000002003a8b0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000073696e68660000000000430000000200728b0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006b5f6578706f32660000000000450000000200b58b00001101000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f756e6f72646466320000000000ee0000000200c68c0000cb0000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333327d005e000000626974616e64006d000000636d700072000000696d706c7300770000007b696d706c2336327d007c0000006774008d000000636f6d70696c65725f6275696c74696e730092000000666c6f617400970000007b696d706c23317d009c0000007265707200ae000000756e6f72643c6636343e00ba0000005f5f756e6f72646466320000000000420000000200918d00002501000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f67657366320000000000330100000200b68e0000300100001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333317d006b0000007b696d706c2338337d00700000006269746f72007e0000007b696d706c2333377d0083000000626974616e640092000000636d700097000000696d706c73009c0000007b696d706c2336307d00af0000007b696d706c2337327d00b4000000676500c1000000677400ce0000006c7400dc0000007b696d706c2333307d00e1000000657100f2000000636f6d70696c65725f6275696c74696e7300f7000000666c6f617400fc0000007b696d706c23307d0001010000726570720013010000636d703c6633323e001f0100005f5f67657366320000000000370000000200e68f00006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006174616e66000000000037000000020049900000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006174616e660000000000390000000200819000007400000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000007467616d6d61660000000000420000000200f5900000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007467616d6d6166000000000039000000020038910000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000007467616d6d6166000000000035000000020070910000e400000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636f7300000000008e000000020054920000990000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d0064000000636f7300760000006b5f636f7300880000006b5f73696e0000000000350000000200ed920000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000636f73000000000047000000020025930000cb00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f61747369646600000000008c0000000200f0930000610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007533325f746f5f6636345f626974730042000000636f726500470000006e756d004c0000007b696d706c23387d00510000006c656164696e675f7a65726f730000000000bc000000020051940000960000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f617473696466003d000000636f726500420000006e756d00470000007b696d706c23327d004c0000007772617070696e675f6162730059000000756e7369676e65645f6162730068000000663634006d0000007b696d706c23307d007700000072745f7536345f746f5f663634008500000066726f6d5f6269747300000000005a0000000200e79400009d00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f310000000000c7000000020084950000820000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e00340000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f310043000000636f72650048000000707472004d0000006d75745f7074720066000000636f6e73745f707472006b0000007b696d706c23307d00700000006164643c75383e0000000000590000000200069600008100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f320000000000bb000000020087960000690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e00340000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f320043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7531363e0000000000590000000200f09600007400000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f38000000000082000000020064970000440000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e00340000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f380000000000430000000200a89700006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f7564697664693300000000004300000002000e9800003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f7564697664693300000000003600000002004c9800000304000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000706f776600000000002001000002004f9c0000110100001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473005f00000072745f7533325f746f5f663332007a00000066726f6d5f626974730089000000707472008e000000636f6e73745f70747200980000006164643c6633323e00a8000000736c69636500ad000000696e64657800b20000007b696d706c23327d00b70000006765745f756e636865636b65643c6633323e00c50000007b696d706c23307d00ca0000006765745f756e636865636b65643c6633322c207573697a653e00da000000636f6d70696c65725f6275696c74696e7300df0000006d61746800e40000006c69626d00ee000000706f776600000100007363616c626e660000000000360000000200609d0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000706f77660000000000400000000200989d0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000066616273660000000000400000000200db9d0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000737172746600000000004300000002001e9e00005700000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000616464003a0000005f5f6164646466330000000000360000000200759e0000c100000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000073696e6800000000009b0000000200369f0000950000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073696e680042000000636f72650047000000663634004c0000007b696d706c23307d005600000072745f7536345f746f5f663634006400000066726f6d5f62697473007600000072745f6636345f746f5f7536340084000000746f5f626974730000000000360000000200cb9f0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000073696e68000000000040000000020003a00000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006578706f32000000000036000000020046a000006701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006578703200000000005c0100000200ada100001e0100001e000000636f72650023000000663634003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0081000000636f6e73745f707472008b0000006164643c7536343e009b0000006e756d00a00000007b696d706c23387d00a50000007772617070696e675f61646400b4000000736c69636500b9000000696e64657800be0000007b696d706c23327d00c30000006765745f756e636865636b65643c7536343e00d10000007b696d706c23307d00d60000006765745f756e636865636b65643c7536342c207573697a653e00e6000000636f6d70696c65725f6275696c74696e7300eb0000006d61746800f00000006c69626d00fa00000065787032000d0100007363616c626e0000000000360000000200cba20000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006578703200000000004b000000020003a30000bf02000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000657874656e64003a0000005f5f657874656e64736664663200000000003d0200000200c2a50000de0100001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333317d005e000000626974616e64006b0000007b696d706c23313336367d00700000006269746f725f61737369676e007e0000007b696d706c233133367d0083000000626974786f7200910000007b696d706c2338347d00960000006269746f7200a5000000617269746800aa0000007b696d706c233330307d00af0000006164645f61737369676e00bf0000006e756d00d70000007b696d706c23397d00dc000000756e636865636b65645f73686c00f8000000636d7000fd000000696d706c7300020100007b696d706c2336307d00070100006c7400140100006765002401000066363400290100007b696d706c23307d003301000072745f7536345f746f5f663634004101000066726f6d5f626974730051010000636f6d70696c65725f6275696c74696e730056010000666c6f6174006001000072657072006d010000657874656e640072010000657874656e643c6633322c206636343e007e0100005f5f657874656e647366646632008c0100007b696d706c23317d009101000066726f6d5f72657072009f010000696e7400a40100007b696d706c23367d00a90100007772617070696e675f73756200b60100007b696d706c233130387d00bb0100006361737400c90100007b696d706c23387d00ce0100007772617070696e675f73686c0000000000690000000200a0a700005b0000001e000000636f726500230000006e756d00280000007b696d706c23387d003c000000636f6d70696c65725f6275696c74696e730041000000696e7400460000007b696d706c23367d004b0000006c656164696e675f7a65726f730000000000360000000200fba70000b900000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000666d616600000000009b0000000200b4a80000a20000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0040000000666d6166004f000000636f7265005400000066363400590000007b696d706c23307d006300000072745f6636345f746f5f7536340071000000746f5f62697473008300000072745f7536345f746f5f663634009100000066726f6d5f62697473000000000042000000020056a900007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469767469330000000000420000000200c9a900003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f646976746933000000000043000000020007aa00003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f75646976746933000000000049000000020045aa0000c400000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e746973660000000000b1000000020009ab00007b0000001e000000636f726500230000006e756d00280000007b696d706c2331307d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a000000753132385f746f5f6633325f62697473000000000087000000020084ab0000700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e74697366003d000000636f7265004200000066333200470000007b696d706c23307d005100000072745f7533325f746f5f663332005f00000066726f6d5f626974730000000000370000000200f4ab00006c00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000007374726c656e000000000044000000020060ac0000ac00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000706f77003a0000005f5f706f77697366320000000000d200000002000cad0000a00000001e000000636f726500230000006e756d00280000007b696d706c23327d002d0000007772617070696e675f616273003c0000006f70730041000000617269746800460000007b696d706c233336347d004b0000006d756c5f61737369676e005c000000636f6d70696c65725f6275696c74696e730061000000696e7400660000007b696d706c23377d006b0000006162735f646966660079000000666c6f6174007e000000706f770083000000706f773c6633323e008f0000005f5f706f77697366320000000000380000000200acad0000c100000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006174616e326600000000007d00000002006dae0000750000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006174616e32660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f6633325f746f5f7533320064000000746f5f626974730000000000380000000200e2ae0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006174616e326600000000004000000002001aaf0000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666162736600000000003700000002005daf0000da00000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000726f756e640000000000a9000000020037b00000a70000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d0084000000636f70797369676e0096000000726f756e640000000000370000000200deb00000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000726f756e64000000000040000000020016b10000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007472756e63000000000038000000020059b100006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000007467616d6d610000000000380000000200bcb10000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000007467616d6d610000000000360000000200f4b10000d600000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636f73680000000000ba0000000200cab20000a80000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f7536345f746f5f663634004000000066726f6d5f62697473005200000072745f6636345f746f5f7536340060000000746f5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6636343e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d0097000000636f7368000000000036000000020072b30000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000636f73680000000000420000000200aab30000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006b5f6578706f320000000000460000000200edb300006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469766d6f64646934000000000046000000020053b400003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f6464693400000000004b000000020091b40000ba00000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f693132385f6164640000000000cf00000002004bb50000ac0000001e000000636f726500230000006e756d00280000007b696d706c23397d004a000000636f6d70696c65725f6275696c74696e73004f000000696e7400540000007b696d706c23387d00590000006f766572666c6f77696e675f61646400650000007772617070696e675f6164640072000000616464737562007700000055416464537562007c000000756164643c753132383e0089000000416464537562008e0000006164643c693132383e009b0000005f5f727573745f693132385f6164640000000000460000000200f7b500006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469766d6f6474693400000000004600000002005db600003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f6474693400000000004500000002009bb600007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469766d6f6474693400000000004500000002000eb700003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6469766d6f6474693400000000004600000002004cb700003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f6474693400000000004300000002008ab700001a06000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f617400300000006d756c003a0000005f5f6d756c6466330000000000450000000200a4bd00001101000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f756e6f72647366320000000000e10000000200b5be0000cb0000001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333317d005e000000626974616e64006d000000636d700072000000696d706c7300770000007b696d706c2336307d007c0000006774008d000000636f6d70696c65725f6275696c74696e730092000000666c6f617400970000007b696d706c23307d009c0000007265707200ae000000756e6f72643c6633323e00ba0000005f5f756e6f7264736632000000000044000000020080bf0000a201000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6c736872736933000000000059010000020022c10000200100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004c73687200320000006c7368723c7533323e003f0000005f5f6c736872736933004d0000007b696d706c2331337d00520000006869005f00000066726f6d5f6c6f5f6869006c0000006c6f007a0000007b696d706c23347d007f0000006c6f676963616c5f736872008b0000007772617070696e675f73686c00980000007b696d706c2332317d009d000000776964656e5f686900aa0000007a65726f5f776964656e00ba000000636f726500bf0000006e756d00c40000007b696d706c23377d00c9000000756e636865636b65645f73687200d60000007772617070696e675f73687200e3000000756e636865636b65645f73686c00ff0000006f7073000401000062697400090100007b696d706c2338327d000e0100006269746f72000000000037000000020042c20000e000000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f6731700000000000bb000000020022c30000a80000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d00970000006c6f6731700000000000370000000200cac30000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f673170000000000042000000020002c400006f00000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f646976736933000000000043000000020071c400003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469767369330000000000420000000200afc400003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6469767369330000000000460000000200edc400000401000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469766d6f647369340000000000e50000000200f1c500009b0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007370656369616c697a65645f6469765f72656d002d0000007533325f6469765f72656d00390000007533325f6e6f726d616c697a6174696f6e5f73686966740048000000636f7265004d0000006e756d00520000007b696d706c23387d00570000006c656164696e675f7a65726f7300630000007772617070696e675f7375620070000000756e636865636b65645f73686c007d0000007772617070696e675f73686c008a0000007772617070696e675f61646400000000004600000002008cc600003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f647369340000000000360000000200cac600007b01000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000073696e660000000000b0000000020045c80000ac0000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073696e6600440000006b5f636f736600560000006b5f73696e660066000000636f7265006b00000066333200700000007b696d706c23307d007a00000072745f6633325f746f5f7533320088000000746f5f626974730097000000707472009c000000726561645f766f6c6174696c653c6633323e0000000000360000000200f1c80000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000073696e66000000000082000000020029c90000750000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000072656d5f70696f32660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f7533325f746f5f663332006400000066726f6d5f6269747300000000003800000002009ec90000e000000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f673170660000000000bc00000002007eca0000a80000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d00970000006c6f67317066000000000038000000020026cb0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f6731706600000000004400000002005ecb0000ed01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173687264693300000000007701000002004bcd0000590100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d000000417368720032000000617368723c6936343e003f0000005f5f61736872646933004d0000007b696d706c2331387d00520000006869005f00000066726f6d5f6c6f5f6869006c0000006c6f007a0000007b696d706c23377d008b0000007772617070696e675f73686c00970000006c6f676963616c5f73687200a40000007b696d706c2332367d00a9000000776964656e5f686900b60000007a65726f5f776964656e00c6000000636f726500cb0000006e756d00d00000007b696d706c23327d00ef000000756e636865636b65645f73686c000a0100007b696d706c23387d000f0100007772617070696e675f737562001c010000756e636865636b65645f73687200290100007772617070696e675f73687200380100006f7073003d01000062697400420100007b696d706c2338397d00470100006269746f720000000000420000000200a4ce0000ef01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c6f73693400000000000e010000020093d00000f20000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006d756c002d0000006933325f6f766572666c6f77696e675f6d756c00390000005f5f6d756c6f7369340046000000554d756c6f004b0000006d756c6f3c7533323e00590000007b696d706c23347d005e00000069735f7a65726f006b0000007b696d706c23367d007c0000006f766572666c6f77696e675f61646400890000007b696d706c2332317d008e000000776964656e009b000000776964656e5f6d756c00a8000000776964656e5f686900b8000000636f726500bd0000006e756d00c20000007b696d706c23387d00d40000007772617070696e675f6d756c000000000047000000020085d10000cb00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f61746469646600000000008c000000020050d20000610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007536345f746f5f6636345f626974730042000000636f726500470000006e756d004c0000007b696d706c23397d00510000006c656164696e675f7a65726f730000000000bc0000000200b1d20000960000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f617464696466003d000000636f726500420000006e756d00470000007b696d706c23337d004c0000007772617070696e675f6162730059000000756e7369676e65645f6162730068000000663634006d0000007b696d706c23307d007700000072745f7536345f746f5f663634008500000066726f6d5f62697473000000000035000000020047d300006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006578700000000000350000000200aad30000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006578700000000000430000000200e2d300000401000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756d6f647369330000000000e50000000200e6d400009b0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007370656369616c697a65645f6469765f72656d002d0000007533325f6469765f72656d00390000007533325f6e6f726d616c697a6174696f6e5f73686966740048000000636f7265004d0000006e756d00520000007b696d706c23387d00570000006c656164696e675f7a65726f7300630000007772617070696e675f7375620070000000756e636865636b65645f73686c007d0000007772617070696e675f73686c008a0000007772617070696e675f616464000000000043000000020081d500003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f647369330000000000430000000200bfd500005700000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000616464003a0000005f5f61646473663300000000004b000000020016d600002a01000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f693132385f737562000000000016010000020040d70000e20000001e000000636f726500230000006e756d00280000007b696d706c23397d00490000006f7073004e00000062697400530000007b696d706c23377d00580000006e6f740068000000636f6d70696c65725f6275696c74696e73006d000000696e7400720000007b696d706c23387d00770000006f766572666c6f77696e675f61646400830000007772617070696e675f6164640090000000616464737562009500000055416464537562009a000000756164643c753132383e00a6000000757375623c753132383e00b2000000756164645f6f6e653c753132383e00bf00000041646453756200c40000007375623c693132383e00d10000005f5f727573745f693132385f73756200000000003a000000020022d80000ec00000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c67616d6d615f7200000000009e00000002000ed90000a50000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d00640000006c67616d6d615f72007000000073696e5f706900820000006b5f73696e00940000006b5f636f7300000000003a0000000200b3d90000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c67616d6d615f720000000000400000000200ebd90000430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666c6f6f7200000000003800000002002eda0000bc02000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000006d656d6d6f76650000000000380000000200eadc00006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006578706d316600000000003800000002004ddd0000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006578706d3166000000000047000000020085dd0000e600000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174746973660000000000bc00000002006bde0000960000001e000000636f726500230000006e756d00280000007b696d706c23347d002d0000007772617070696e675f616273003a000000756e7369676e65645f6162730049000000663332004e0000007b696d706c23307d005800000072745f7533325f746f5f663332006600000066726f6d5f626974730076000000636f6d70696c65725f6275696c74696e73007b000000666c6f61740080000000636f6e7600850000005f5f666c6f6174746973660000000000b1000000020001df00007b0000001e000000636f726500230000006e756d00280000007b696d706c2331307d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a000000753132385f746f5f6633325f6269747300000000005900000002007cdf00009100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f310000000000c500000002000de00000820000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e00340000005f5f6c6c766d5f6d656d6370795f656c656d656e745f756e6f7264657265645f61746f6d69635f310043000000636f72650048000000707472004d0000006d75745f7074720066000000636f6e73745f707472006b0000007b696d706c23307d00700000006164643c75383e00000000004200000002008fe000003501000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f676564663200000000004e0100000200c4e10000430100001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333327d006b0000007b696d706c2338347d00700000006269746f72007e0000007b696d706c2333387d0083000000626974616e640092000000636d700097000000696d706c73009c0000007b696d706c2336327d00af0000007b696d706c2332357d00c20000007b696d706c2337347d00c7000000676500d4000000677400e10000006c7400ef0000007b696d706c2333317d00f400000065710005010000636f6d70696c65725f6275696c74696e73000a010000666c6f6174000f0100007b696d706c23317d0014010000726570720026010000636d703c6636343e00320100005f5f676564663200000000005a000000020007e300008d00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f340000000000bd000000020094e30000690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e00340000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f340043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7533323e0000000000370000000200fde300006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006578706d31000000000037000000020060e40000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006578706d31000000000044000000020098e40000ac00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000706f77003a0000005f5f706f77696466320000000000d2000000020044e50000a00000001e000000636f726500230000006e756d00280000007b696d706c23327d002d0000007772617070696e675f616273003c0000006f70730041000000617269746800460000007b696d706c233336357d004b0000006d756c5f61737369676e005c000000636f6d70696c65725f6275696c74696e730061000000696e7400660000007b696d706c23377d006b0000006162735f646966660079000000666c6f6174007e000000706f770083000000706f773c6636343e008f0000005f5f706f77696466320000000000430000000200e4e500009d00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000737562003a0000005f5f73756264663300000000009c000000020081e60000820000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f7536345f746f5f663634004000000066726f6d5f626974730050000000636f6d70696c65725f6275696c74696e730055000000666c6f6174005a0000007b696d706c23317d005f00000066726f6d5f72657072006c00000073756200710000005f5f737562646633000000000042000000020003e700007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6d6f64646933000000000042000000020076e700003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6d6f646469330000000000430000000200b4e700003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f646469330000000000360000000200f2e700006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006174616e000000000036000000020055e80000380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006174616e00000000004400000002008de800005b01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173686c7469330000000000160100000200e8e90000e60000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004173686c00320000006173686c3c753132383e003f0000005f5f6173686c74693300520000007772617070696e675f73686c005e0000006c6f676963616c5f736872006d000000636f726500720000006e756d00770000007b696d706c23397d0089000000756e636865636b65645f73686c00960000007772617070696e675f73687200a3000000756e636865636b65645f73687200b10000007b696d706c23387d00b60000007772617070696e675f73756200c50000006f707300ca00000062697400cf0000007b696d706c2338347d00d40000006269746f720000000000430000000200ceea00000207000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000646976003a0000005f5f6469767366330000000000910400000200d0f100009b0500001e000000636f72650023000000663332003200000072745f6633325f746f5f753332005200000072745f7533325f746f5f663332006f0000006f7073007400000062697400790000007b696d706c2333317d008b0000007b696d706c233133357d009e0000007b696d706c233836337d00b10000007b696d706c23313336357d00c40000007b696d706c233238377d00d70000007b696d706c23313735337d00ea0000007b696d706c23313437377d00fd0000007b696d706c2338337d00100100007b696d706c2333327d0015010000626974616e6400220100007b696d706c233133367d0027010000626974786f7200350100007b696d706c233931317d003a01000073687200480100007b696d706c23313336367d004d0100006269746f725f61737369676e005b0100007b696d706c233333357d006001000073686c006e0100007b696d706c23313737377d00730100007368725f61737369676e00810100007b696d706c23313530317d008601000073686c5f61737369676e00940100007b696d706c2338347d00990100006269746f7200a8010000617269746800ad0100007b696d706c2335397d00bf0100007b696d706c233239397d00d20100007b696d706c2336307d00d701000073756200e40100007b696d706c233330307d00e90100006164645f61737369676e00f9010000636d7000fe010000696d706c7300300200007b696d706c2332347d00430200007b696d706c2336327d004802000067650055020000677400620200006c7400700200007b696d706c2332357d0075020000657100850200006e756d00110300007772617070696e675f616464001f0300007b696d706c23397d0065030000756e636865636b65645f73686c007f030000756e636865636b65645f73687200990300007772617070696e675f73756200a70300007b696d706c23327d00ba0300007b696d706c23337d00cc0300007772617070696e675f6e656700da0300007b696d706c2331307d00df0300007772617070696e675f6d756c00ee03000066363400f30300007b696d706c23307d00fd03000072745f6636345f746f5f753634000b040000746f5f62697473001d04000072745f7536345f746f5f663634002b04000066726f6d5f62697473003b040000636f6d70696c65725f6275696c74696e730040040000666c6f61740063040000646976006804000064697633323c6633323e00740400005f5f646976736633008104000064697636343c6636343e008e0400005f5f646976646633009b040000646976363400a00400006e65676174655f75363400af0400007b696d706c23317d00b40400007265707200c004000066726f6d5f7265707200ce040000696e7400d30400007b696d706c23367d00090500007b696d706c2332327d000e050000776964656e00290500007b696d706c2331347d002e0500006869003c0500007b696d706c2332337d0041050000776964656e5f6d756c004f0500007b696d706c23387d006c0500007772617070696e675f73686c00780500007772617070696e675f73687200850500007b696d706c233132307d008a050000636173740000000000b100000002006bf70000b90000001e000000636f726500230000006e756d00280000007b696d706c23387d00540000007b696d706c23327d00660000007772617070696e675f73756200740000007b696d706c23397d00790000006c656164696e675f7a65726f730088000000636f6d70696c65725f6275696c74696e73008d000000666c6f617400920000007b696d706c23307d00a40000007b696d706c23317d00a90000006e6f726d616c697a65000000000049000000020024f800005203000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f617400300000007472756e63003a0000005f5f7472756e636466736632000000000080020000020076fb0000370200001e000000636f72650023000000663634003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333327d006b0000007b696d706c233931317d0070000000736872007e0000007b696d706c2338347d00910000007b696d706c233333357d009600000073686c00a40000007b696d706c2333317d00a9000000626974616e6400b60000007b696d706c23313336357d00bb0000006269746f725f61737369676e00c90000007b696d706c2338337d00ce0000006269746f7200dd000000617269746800e20000007b696d706c233239397d00e70000006164645f61737369676e00f70000006e756d00fc0000007b696d706c23397d000e010000756e636865636b65645f736872002a010000636d70002f010000696d706c7300340100007b696d706c2336327d00390100006c74004601000067740053010000676500610100007b696d706c2332357d00660100006e65007301000065710083010000663332009201000072745f7533325f746f5f66333200a001000066726f6d5f6269747300b0010000636f6d70696c65725f6275696c74696e7300b5010000666c6f617400ba0100007b696d706c23317d00bf0100007265707200cc0100007472756e6300d10100007472756e633c6636342c206633323e00dd0100005f5f7472756e63646673663200eb0100007b696d706c23307d00f001000066726f6d5f7265707200fe010000696e7400030200007b696d706c23387d00080200007772617070696e675f73756200140200007772617070696e675f73687200210200007b696d706c233133307d0026020000636173740000000000430000000200adfd00008107000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000646976003a0000005f5f64697664663300000000004900000002002e050100c400000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e746964660000000000b10000000200f20501007b0000001e000000636f726500230000006e756d00280000007b696d706c2331307d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a000000753132385f746f5f6636345f6269747300000000008700000002006d060100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e74696466003d000000636f7265004200000066363400470000007b696d706c23307d005100000072745f7536345f746f5f663634005f00000066726f6d5f626974730000000000420000000200dd0601007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6d6f647469330000000000420000000200500701003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6d6f6474693300000000004300000002008e0701003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f647469330000000000420000000200cc0701003501000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636d70003a0000005f5f657164663200000000004e010000020001090100430100001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473004f0000006f7073005400000062697400590000007b696d706c2333327d006b0000007b696d706c2338347d00700000006269746f72007e0000007b696d706c2333387d0083000000626974616e640092000000636d700097000000696d706c73009c0000007b696d706c2336327d00af0000007b696d706c2332357d00c20000007b696d706c2337347d00c7000000676500d4000000677400e10000006c7400ef0000007b696d706c2333317d00f400000065710005010000636f6d70696c65725f6275696c74696e73000a010000666c6f6174000f0100007b696d706c23317d0014010000726570720026010000636d703c6636343e00320100005f5f65716466320000000000440000000200440a01008901000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6173687274693300000000005b0100000200cd0b0100380100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d000000417368720032000000617368723c693132383e003f0000005f5f61736872746933004d0000007b696d706c2332377d0052000000776964656e5f686900600000007b696d706c2331397d006500000066726f6d5f6c6f5f686900840000007772617070696e675f73686c00900000006c6f676963616c5f736872009f000000636f726500a40000006e756d00a90000007b696d706c23337d00d5000000756e636865636b65645f73686c00e30000007b696d706c23387d00e80000007772617070696e675f73756200f60000007b696d706c23397d00fb0000007772617070696e675f7368720008010000756e636865636b65645f73687200170100006f7073001c01000062697400210100007b696d706c2339307d00260100006269746f720000000000370000000200050d01001e01000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000006d656d7365740000000000370000000200230e01001701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f67326600000000009c00000002003a0f0100950000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006c6f6732660000000000370000000200cf0f0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f673266000000000038000000020007100100a800000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c646578706600000000008b0000000200af100100870000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000007363616c626e6600440000006c64657870660054000000636f72650059000000663332005e0000007b696d706c23307d006800000072745f7533325f746f5f663332007600000066726f6d5f62697473000000000038000000020036110100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c646578706600000000003700000002006e1101002301000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000061636f73660000000000a2000000020091120100a10000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d008400000061636f7366009000000072000000000037000000020032130100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000061636f736600000000004000000002006a130100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073717274660000000000430000000200ad1301006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756d6f647469330000000000430000000200131401003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f647469330000000000360000000200511401009700000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000072696e7400000000007b0000000200e8140100820000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d007200000072696e7400000000005900000002006a1501008500000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f310000000000b70000000200ef150100690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c75383e00340000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f310043000000636f72650048000000707472004d0000006d75745f70747200520000007b696d706c23307d00570000006164643c75383e000000000049000000020058160100cf00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e646973660000000000af0000000200271701007b0000001e000000636f726500230000006e756d00280000007b696d706c23397d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a0000007536345f746f5f6633325f626974730000000000870000000200a2170100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e64697366003d000000636f7265004200000066333200470000007b696d706c23307d005100000072745f7533325f746f5f663332005f00000066726f6d5f6269747300000000005a0000000200121801008d00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f320000000000bd00000002009f180100690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e00340000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f320043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7531363e0000000000370000000200081901001701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f67313000000000009c00000002001f1a0100950000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006c6f6731300000000000370000000200b41a0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f6731300000000000370000000200ec1a0100d600000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636f7368660000000000bb0000000200c21b0100a80000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f7533325f746f5f663332004000000066726f6d5f62697473005200000072745f6633325f746f5f7533320060000000746f5f62697473006f0000007074720074000000726561645f766f6c6174696c653c6633323e0083000000636f6d70696c65725f6275696c74696e7300880000006d617468008d0000006c69626d0097000000636f73686600000000003700000002006a1c0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000636f7368660000000000430000000200a21c0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006b5f6578706f326600000000004c0000000200e51c01004701000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f753132385f7375626f00000000005601000002002c1e0100130100001e000000636f726500230000006e756d00280000007b696d706c23397d00490000006f7073004e00000062697400530000007b696d706c23377d00580000006e6f740067000000636d70006c000000696d706c7300710000007b696d706c2336347d00760000006c740087000000636f6d70696c65725f6275696c74696e73008c000000696e7400910000007b696d706c23387d00960000006f766572666c6f77696e675f61646400a20000007772617070696e675f61646400af00000061646473756200b40000005541646453756200b9000000756164643c753132383e00c5000000757375623c753132383e00d1000000756164645f6f6e653c753132383e00de00000041646453756200e30000007375623c753132383e00f00000005375626f00f50000007375626f3c753132383e00020100005f5f727573745f753132385f7375626f00000000003700000002003f1f01009700000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000072696e746600000000007c0000000200d61f0100820000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f626974730050000000636f6d70696c65725f6275696c74696e7300550000006d617468005a0000006c69626d007200000072696e74660000000000370000000200582001001301000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000657870326600000000003401000002006b210100fe0000001e000000636f72650023000000663332003200000072745f6633325f746f5f7533320040000000746f5f62697473004f0000007074720054000000726561645f766f6c6174696c653c6633323e0061000000636f6e73745f707472006b0000006164643c7536343e007b000000736c6963650080000000696e64657800850000007b696d706c23327d008a0000006765745f756e636865636b65643c7536343e009d0000006765745f756e636865636b65643c7536342c207573697a653e00ac00000066363400b10000007b696d706c23307d00bb00000072745f7536345f746f5f66363400c900000066726f6d5f6269747300d9000000636f6d70696c65725f6275696c74696e7300de0000006d61746800e30000006c69626d00ed0000006578703266000000000037000000020069220100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000065787032660000000000450000000200a12201007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469766d6f646469340000000000450000000200142301003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6469766d6f646469340000000000460000000200522301003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766d6f64646934000000000044000000020090230100ce01000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6c73687264693300000000006a01000002005e2501003a0100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004c73687200320000006c7368723c7536343e003f0000005f5f6c736872646933004d0000007b696d706c2331347d00520000006869005f00000066726f6d5f6c6f5f6869006c0000006c6f007a0000007b696d706c23367d007f0000006c6f676963616c5f736872008b0000007772617070696e675f73686c00980000007b696d706c2332327d009d000000776964656e5f686900b70000007a65726f5f776964656e00c7000000636f726500cc0000006e756d00d10000007b696d706c23387d00d6000000756e636865636b65645f73687200e30000007772617070696e675f73687200f00000007772617070696e675f73756200fd000000756e636865636b65645f73686c00190100006f7073001e01000062697400230100007b696d706c2338337d00280100006269746f720000000000430000000200982601006600000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756d6f646469330000000000430000000200fe2601003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f6464693300000000004100000002003c270100b901000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c7469330000000000040100000200f5280100e60000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007b696d706c2332367d002d0000007a65726f5f776964656e003a0000007a65726f5f776964656e5f6d756c00480000006d756c004d0000004d756c00520000006d756c3c693132383e005f0000005f5f6d756c746933006d0000007b696d706c2331387d0072000000686900800000007b696d706c2331317d00850000007772617070696e675f61646400920000007b696d706c23397d00970000007772617070696e675f6d756c00a6000000636f726500ab0000006e756d00b00000007b696d706c23337d00d00000007b696d706c23347d0000000000430000000200db2901000401000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000075646976003a0000005f5f756469767369330000000000e50000000200df2a01009b0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007370656369616c697a65645f6469765f72656d002d0000007533325f6469765f72656d00390000007533325f6e6f726d616c697a6174696f6e5f73686966740048000000636f7265004d0000006e756d00520000007b696d706c23387d00570000006c656164696e675f7a65726f7300630000007772617070696e675f7375620070000000756e636865636b65645f73686c007d0000007772617070696e675f73686c008a0000007772617070696e675f61646400000000004300000002007a2b01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469767369330000000000380000000200b82b0100e300000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006879706f746600000000009d00000002009b2c0100950000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006879706f74660000000000380000000200302d0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006879706f74660000000000400000000200682d0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000737172746600000000003b0000000200ab2d0100d201000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c67616d6d61665f7200000000003b00000002007d2f0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c67616d6d61665f720000000000410000000200b52f0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666c6f6f72660000000000360000000200f82f01002301000026000000636f6d70696c65725f6275696c74696e73002b0000006d617468003500000061636f730000000000a100000002001b310100a10000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d008400000061636f730090000000720000000000360000000200bc310100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d617468002800000061636f7300000000003f0000000200f4310100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000073717274000000000049000000020037320100a500000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e7369646600000000008c0000000200dc320100610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007533325f746f5f6636345f626974730042000000636f726500470000006e756d004c0000007b696d706c23387d00510000006c656164696e675f7a65726f7300000000008700000002003d330100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e73696466003d000000636f7265004200000066363400470000007b696d706c23307d005100000072745f7536345f746f5f663634005f00000066726f6d5f626974730000000000410000000200ad3301004402000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c6469330000000000340100000200f1350100400100001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007b696d706c2331347d003a00000066726f6d5f6c6f5f686900480000006d756c004d0000004d756c00520000006d756c3c7536343e005f0000005f5f6d756c646933006d0000007b696d706c23367d007f0000007b696d706c23387d00840000007772617070696e675f61646400910000007b696d706c2331337d00960000006c6f00a3000000686900b10000007b696d706c2332317d00c30000007a65726f5f776964656e5f6d756c00d10000007b696d706c2332327d00e3000000776964656e5f686900f00000007a65726f5f776964656e0000010000636f726500050100006e756d001c0100007772617070696e675f6d756c002a0100007b696d706c23397d0000000000490000000200313701008101000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f727573745f753132385f6d756c6f0000000000db0000000200b2380100cc0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007b696d706c23387d002d00000069735f7a65726f003a0000006d756c003f000000554d756c6f00440000006d756c6f3c753132383e00510000005f5f727573745f753132385f6d756c6f005f0000007b696d706c2331307d00700000006f766572666c6f77696e675f616464007d0000007b696d706c2332337d0082000000776964656e5f6d756c0092000000636f726500970000006e756d00ae0000007772617070696e675f6d756c00000000005900000002007e3901007400000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f340000000000820000000200f2390100440000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7533323e00340000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f340000000000350000000200363a01003f02000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000666d610000000000550100000200753c0100310100001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f62697473006f0000006e756d00740000007b696d706c2331307d00790000007772617070696e675f6d756c00870000007b696d706c23397d008c0000007772617070696e675f61646400990000006f766572666c6f77696e675f73756200b30000006c656164696e675f7a65726f7300c00000007b696d706c23337d00c50000007772617070696e675f73756200d20000007772617070696e675f6e656700e2000000636f6d70696c65725f6275696c74696e7300e70000006d61746800ec0000006c69626d00f60000006e6f726d616c697a650002010000666d61000e0100006d756c00200100007363616c626e0000000000350000000200a63d0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000666d610000000000360000000200de3d01006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000657870660000000000360000000200413e0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000657870660000000000370000000200793e0100d100000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006174616e320000000000a200000002004a3f01008e0000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006174616e320042000000636f72650047000000663634004c0000007b696d706c23307d005600000072745f6636345f746f5f7536340064000000746f5f6269747300730000006e756d00780000007b696d706c23387d007d0000007772617070696e675f7375620000000000370000000200d83f0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006174616e3200000000003f000000020010400100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000666162730000000000440000000200534001006701000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000007368696674003a0000005f5f6c7368727469330000000000160100000200ba410100e60000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000007368696674002d0000004c73687200320000006c7368723c753132383e003f0000005f5f6c736872746933004d0000007b696d706c23387d00520000007772617070696e675f73686c005e0000006c6f676963616c5f736872006d000000636f726500720000006e756d007c0000007772617070696e675f737562008a0000007b696d706c23397d009c000000756e636865636b65645f73686c00a90000007772617070696e675f73687200b6000000756e636865636b65645f73687200c50000006f707300ca00000062697400cf0000007b696d706c2338347d00d40000006269746f720000000000490000000200a0420100a500000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e7369736600000000008c000000020045430100610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007533325f746f5f6633325f626974730042000000636f726500470000006e756d004c0000007b696d706c23387d00510000006c656164696e675f7a65726f730000000000870000000200a6430100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e73697366003d000000636f7265004200000066333200470000007b696d706c23307d005100000072745f7533325f746f5f663332005f00000066726f6d5f626974730000000000360000000200164401007f01000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000636f73660000000000b0000000020095450100ac0000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000636f736600440000006b5f73696e6600560000006b5f636f73660066000000636f7265006b00000066333200700000007b696d706c23307d007a00000072745f6633325f746f5f7533320088000000746f5f626974730097000000707472009c000000726561645f766f6c6174696c653c6633323e000000000036000000020041460100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000636f7366000000000082000000020079460100750000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d003200000072656d5f70696f32660042000000636f72650047000000663332004c0000007b696d706c23307d005600000072745f7533325f746f5f663332006400000066726f6d5f626974730000000000370000000200ee4601005100000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000006d656d636d7000000000004200000002003f470100f701000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f6d756c6f64693400000000000e010000020036490100f20000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006d756c002d0000006936345f6f766572666c6f77696e675f6d756c00390000005f5f6d756c6f6469340046000000554d756c6f004b0000006d756c6f3c7536343e00590000007b696d706c23367d005e00000069735f7a65726f006b0000007b696d706c23387d007c0000006f766572666c6f77696e675f61646400890000007b696d706c2332327d008e000000776964656e009b000000776964656e5f6d756c00a8000000776964656e5f686900b8000000636f726500bd0000006e756d00c20000007b696d706c23397d00d40000007772617070696e675f6d756c0000000000360000000200284a01004801000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006173696e0000000000df0000000200704b0100c80000001e000000636f7265002300000066363400280000007b696d706c23307d003200000072745f6636345f746f5f7536340040000000746f5f62697473005200000072745f7536345f746f5f663634006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d007f0000006765745f686967685f776f726400910000006173696e009d000000636f6d705f7200aa000000776974685f7365745f6c6f775f776f726400b70000006765745f6c6f775f776f72640000000000360000000200384c0100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006173696e00000000003f0000000200704c0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d00320000006661627300000000003f0000000200b34c0100430000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c69626d0032000000737172740000000000430000000200f64c01009d00000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000737562003a0000005f5f73756273663300000000008f0000000200934d0100820000001e000000636f72650023000000663332003200000072745f7533325f746f5f663332004000000066726f6d5f626974730050000000636f6d70696c65725f6275696c74696e730055000000666c6f6174005a0000007b696d706c23307d005f00000066726f6d5f72657072006c00000073756200710000005f5f7375627366330000000000350000000200154e01006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d003500000062636d700000000000420000000200784e01006f00000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6d6f647369330000000000430000000200e74e01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756d6f647369330000000000420000000200254f01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6d6f647369330000000000380000000200634f01001701000026000000636f6d70696c65725f6275696c74696e73002b0000006d61746800350000006c6f6731306600000000009d00000002007a500100950000001e000000636f7265002300000066333200280000007b696d706c23307d003200000072745f6633325f746f5f7533320040000000746f5f62697473005200000072745f7533325f746f5f663332006000000066726f6d5f626974730070000000636f6d70696c65725f6275696c74696e7300750000006d617468007a0000006c69626d00840000006c6f6731306600000000003800000002000f510100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d61746800280000006c6f673130660000000000370000000200475101007b01000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000006d656d6370790000000000470000000200c2520100f100000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174646973660000000000bc0000000200b3530100960000001e000000636f726500230000006e756d00280000007b696d706c23337d002d0000007772617070696e675f616273003a000000756e7369676e65645f6162730049000000663332004e0000007b696d706c23307d005800000072745f7533325f746f5f663332006600000066726f6d5f626974730076000000636f6d70696c65725f6275696c74696e73007b000000666c6f61740080000000636f6e7600850000005f5f666c6f6174646973660000000000af0000000200495401007b0000001e000000636f726500230000006e756d00280000007b696d706c23397d002d0000006c656164696e675f7a65726f730039000000756e636865636b65645f73686c00460000007772617070696e675f73686c0056000000636f6d70696c65725f6275696c74696e73005b000000666c6f61740060000000636f6e760065000000696e745f746f5f666c6f6174006a0000007536345f746f5f6633325f6269747300000000005a0000000200c45401008d00000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f380000000000bd000000020051550100690000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69633c7536343e00340000005f5f6c6c766d5f6d656d6d6f76655f656c656d656e745f756e6f7264657265645f61746f6d69635f380043000000636f72650048000000707472004d000000636f6e73745f70747200520000007b696d706c23307d00570000006164643c7536343e00000000004b0000000200ba5501007a00000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006c656164696e675f7a65726f73003a0000005f5f636c7a73693200000000006b0000000200345601004a0000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006c656164696e675f7a65726f73002d0000007573697a655f6c656164696e675f7a65726f735f64656661756c7400390000005f5f636c7a73693200000000004c00000002007e560100e700000026000000636f6d70696c65725f6275696c74696e73002b000000696e740030000000616464737562003a0000005f5f727573745f693132385f6164646f00000000000f010000020065570100dd0000001e000000636f726500230000006e756d00280000007b696d706c23397d0049000000636d70004e000000696d706c7300530000007b696d706c2337367d00580000006c740069000000636f6d70696c65725f6275696c74696e73006e000000696e7400730000007b696d706c23387d00780000006f766572666c6f77696e675f61646400840000007772617070696e675f6164640091000000616464737562009600000055416464537562009b000000756164643c753132383e00a800000041646453756200ad0000006164643c693132383e00ba0000004164646f00bf0000006164646f3c693132383e00cc0000005f5f727573745f693132385f6164646f0000000000350000000200425801006300000026000000636f6d70696c65725f6275696c74696e73002b0000006d6174680035000000706f770000000000350000000200a5580100380000001e000000636f6d70696c65725f6275696c74696e7300230000006d6174680028000000706f770000000000490000000200dd5801009201000026000000636f6d70696c65725f6275696c74696e73002b000000696e7400300000006d756c003a0000005f5f727573745f693132385f6d756c6f0000000000f400000002006f5a0100d80000001e000000636f6d70696c65725f6275696c74696e730023000000696e7400280000006d756c002d000000693132385f6f766572666c6f77696e675f6d756c00390000005f5f727573745f693132385f6d756c6f0046000000554d756c6f004b0000006d756c6f3c753132383e00590000007b696d706c23387d005e00000069735f7a65726f006b0000007b696d706c2331307d007c0000006f766572666c6f77696e675f61646400890000007b696d706c2332337d008e000000776964656e5f6d756c009e000000636f726500a30000006e756d00ba0000007772617070696e675f6d756c0000000000590000000200475b01007400000026000000636f6d70696c65725f6275696c74696e73002b0000006d656d00350000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f320000000000820000000200bb5b0100440000001e000000636f6d70696c65725f6275696c74696e7300230000006d656d00280000006d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69633c7531363e00340000005f5f6c6c766d5f6d656d7365745f656c656d656e745f756e6f7264657265645f61746f6d69635f320000000000490000000200ff5b0100a500000026000000636f6d70696c65725f6275696c74696e73002b000000666c6f61740030000000636f6e76003a0000005f5f666c6f6174756e6469646600000000008c0000000200a45c0100610000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d000000696e745f746f5f666c6f617400320000007536345f746f5f6636345f626974730042000000636f726500470000006e756d004c0000007b696d706c23397d00510000006c656164696e675f7a65726f730000000000870000000200055d0100700000001e000000636f6d70696c65725f6275696c74696e730023000000666c6f61740028000000636f6e76002d0000005f5f666c6f6174756e64696466003d000000636f7265004200000066363400470000007b696d706c23307d005100000072745f7536345f746f5f663634005f00000066726f6d5f626974730000000000420000000200755d01007300000026000000636f6d70696c65725f6275696c74696e73002b000000696e74003000000073646976003a0000005f5f6469766469330000000000420000000200e85d01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000073646976002d0000005f5f6469766469330000000000430000000200265e01003e0000001e000000636f6d70696c65725f6275696c74696e730023000000696e74002800000075646976002d0000005f5f756469766469330000000000008a390f2e64656275675f70756274797065730e000000020000000000320b0000000000000e0000000200320b000043000000000000000e0000000200750b0000fe0e0000000000000e0000000200731a0000b9000000000000000e00000002002c1b00007f000000000000000e0000000200ab1b0000a5020000000000000e0000000200501e0000e1050000000000000e00000002003124000043000000000000000e00000002007424000043000000000000000e0000000200b724000075010000000000000e00000002002c260000d1040000000000000e0000000200fd2a000011020000000000000e00000002000e2d000043000000000000000e0000000200512d00006e020000000000000e0000000200bf2f0000ac010000000000000e00000002006b31000043000000000000000e0000000200ae31000050010000000000000e0000000200fe32000033010000000000000e000000020031340000eb010000000000000e00000002001c360000ac010000000000000e0000000200c837000043000000000000000e00000002000b380000c1010000000000000e0000000200cc39000013010000000000000e0000000200df3a0000c9000000000000000e0000000200a83b0000c8000000000000000e0000000200703c0000c9000000000000000e0000000200393d0000c8000000000000000e0000000200013e0000c7000000000000000e0000000200c83e0000c8000000000000000e0000000200903f0000c7000000000000000e000000020057400000c7000000000000000e00000002001e410000c8000000000000000e0000000200e6410000c8000000000000000e0000000200ae420000c7000000000000000e000000020075430000c7000000000000000e00000002003c440000d1000000000000000e00000002000d450000d1000000000000000e0000000200de450000c9000000000000000e0000000200a7460000c9000000000000000e000000020070470000c9000000000000000e000000020039480000c9000000000000000e000000020002490000a8000000000000000e0000000200aa49000087000000000000000e0000000200314a000038000000000000000e0000000200694a0000cd010000000000000e0000000200364c00004c010000000000000e0000000200824d000025010000000000000e0000000200a74e000030010000000000000e0000000200d74f000017010000000000000e0000000200ee500000a2000000000000000e000000020090510000ce010000000000000e00000002005e5300003a010000000000000e00000002009854000039010000000000000e0000000200d1550000c6000000000000000e00000002009756000038000000000000000e0000000200cf560000d7000000000000000e0000000200a6570000dd000000000000000e0000000200835800002f010000000000000e0000000200b25900009a000000000000000e00000002004c5a000038000000000000000e0000000200845a000075000000000000000e0000000200f95a000092010000000000000e00000002008b5c0000d8000000000000000e0000000200635d0000ff000000000000000e0000000200625e0000a1000000000000000e0000000200035f000038000000000000000e00000002003b5f000043000000000000000e00000002007e5f0000d3000000000000000e000000020051600000a2000000000000000e0000000200f3600000e6000000000000000e0000000200d961000096000000000000000e00000002006f6200007b000000000000000e0000000200ea62000081000000000000000e00000002006b63000069000000000000000e0000000200d4630000cf000000000000000e0000000200a364000081000000000000000e00000002002465000038000000000000000e00000002005c65000043000000000000000e00000002009f65000043000000000000000e0000000200e265000063000000000000000e00000002004566000038000000000000000e00000002007d660000da000000000000000e000000020057670000a7000000000000000e0000000200fe67000038000000000000000e00000002003668000043000000000000000e000000020079680000d1000000000000000e00000002004a690000ae000000000000000e0000000200f869000038000000000000000e0000000200306a00006f000000000000000e00000002009f6a00003e000000000000000e0000000200dd6a00003e000000000000000e00000002001b6b0000d1000000000000000e0000000200ec6b0000ae000000000000000e00000002009a6c000038000000000000000e0000000200d26c000089010000000000000e00000002005b6e0000e0000000000000000e00000002003b6f000038000000000000000e0000000200736f0000fe050000000000000e00000002007175000098040000000000000e0000000200097a0000b9000000000000000e0000000200c27a0000a2010000000000000e0000000200647c00002d010000000000000e0000000200917d0000d3000000000000000e0000000200647e0000a2000000000000000e0000000200067f000057010000000000000e00000002005d80000013010000000000000e00000002007081000066000000000000000e0000000200d68100003e000000000000000e000000020014820000be000000000000000e0000000200d2820000a8000000000000000e00000002007a83000038000000000000000e0000000200b2830000cb000000000000000e00000002007d84000061000000000000000e0000000200de84000096000000000000000e00000002007485000081000000000000000e0000000200f585000069000000000000000e00000002005e860000be000000000000000e00000002001c870000a8000000000000000e0000000200c487000038000000000000000e0000000200fc87000004010000000000000e000000020000890000ac000000000000000e0000000200ac89000038000000000000000e0000000200e4890000c1000000000000000e0000000200a58a000095000000000000000e00000002003a8b000038000000000000000e0000000200728b000043000000000000000e0000000200b58b000011010000000000000e0000000200c68c0000cb000000000000000e0000000200918d000025010000000000000e0000000200b68e000030010000000000000e0000000200e68f000063000000000000000e00000002004990000038000000000000000e00000002008190000074000000000000000e0000000200f590000043000000000000000e00000002003891000038000000000000000e000000020070910000e4000000000000000e00000002005492000099000000000000000e0000000200ed92000038000000000000000e000000020025930000cb000000000000000e0000000200f093000061000000000000000e00000002005194000096000000000000000e0000000200e79400009d000000000000000e00000002008495000082000000000000000e00000002000696000081000000000000000e00000002008796000069000000000000000e0000000200f096000074000000000000000e00000002006497000044000000000000000e0000000200a897000066000000000000000e00000002000e9800003e000000000000000e00000002004c98000003040000000000000e00000002004f9c000011010000000000000e0000000200609d000038000000000000000e0000000200989d000043000000000000000e0000000200db9d000043000000000000000e00000002001e9e000057000000000000000e0000000200759e0000c1000000000000000e0000000200369f000095000000000000000e0000000200cb9f000038000000000000000e000000020003a0000043000000000000000e000000020046a0000067010000000000000e0000000200ada100001e010000000000000e0000000200cba2000038000000000000000e000000020003a30000bf020000000000000e0000000200c2a50000de010000000000000e0000000200a0a700005b000000000000000e0000000200fba70000b9000000000000000e0000000200b4a80000a2000000000000000e000000020056a9000073000000000000000e0000000200c9a900003e000000000000000e000000020007aa00003e000000000000000e000000020045aa0000c4000000000000000e000000020009ab00007b000000000000000e000000020084ab000070000000000000000e0000000200f4ab00006c000000000000000e000000020060ac0000ac000000000000000e00000002000cad0000a0000000000000000e0000000200acad0000c1000000000000000e00000002006dae000075000000000000000e0000000200e2ae000038000000000000000e00000002001aaf000043000000000000000e00000002005daf0000da000000000000000e000000020037b00000a7000000000000000e0000000200deb0000038000000000000000e000000020016b1000043000000000000000e000000020059b1000063000000000000000e0000000200bcb1000038000000000000000e0000000200f4b10000d6000000000000000e0000000200cab20000a8000000000000000e000000020072b3000038000000000000000e0000000200aab3000043000000000000000e0000000200edb3000066000000000000000e000000020053b400003e000000000000000e000000020091b40000ba000000000000000e00000002004bb50000ac000000000000000e0000000200f7b5000066000000000000000e00000002005db600003e000000000000000e00000002009bb6000073000000000000000e00000002000eb700003e000000000000000e00000002004cb700003e000000000000000e00000002008ab700001a060000000000000e0000000200a4bd000011010000000000000e0000000200b5be0000cb000000000000000e000000020080bf0000a2010000000000000e000000020022c1000020010000000000000e000000020042c20000e0000000000000000e000000020022c30000a8000000000000000e0000000200cac3000038000000000000000e000000020002c400006f000000000000000e000000020071c400003e000000000000000e0000000200afc400003e000000000000000e0000000200edc4000004010000000000000e0000000200f1c500009b000000000000000e00000002008cc600003e000000000000000e0000000200cac600007b010000000000000e000000020045c80000ac000000000000000e0000000200f1c8000038000000000000000e000000020029c9000075000000000000000e00000002009ec90000e0000000000000000e00000002007eca0000a8000000000000000e000000020026cb000038000000000000000e00000002005ecb0000ed010000000000000e00000002004bcd000059010000000000000e0000000200a4ce0000ef010000000000000e000000020093d00000f2000000000000000e000000020085d10000cb000000000000000e000000020050d2000061000000000000000e0000000200b1d2000096000000000000000e000000020047d3000063000000000000000e0000000200aad3000038000000000000000e0000000200e2d3000004010000000000000e0000000200e6d400009b000000000000000e000000020081d500003e000000000000000e0000000200bfd5000057000000000000000e000000020016d600002a010000000000000e000000020040d70000e2000000000000000e000000020022d80000ec000000000000000e00000002000ed90000a5000000000000000e0000000200b3d9000038000000000000000e0000000200ebd9000043000000000000000e00000002002eda0000bc020000000000000e0000000200eadc000063000000000000000e00000002004ddd000038000000000000000e000000020085dd0000e6000000000000000e00000002006bde000096000000000000000e000000020001df00007b000000000000000e00000002007cdf000091000000000000000e00000002000de0000082000000000000000e00000002008fe0000035010000000000000e0000000200c4e1000043010000000000000e000000020007e300008d000000000000000e000000020094e3000069000000000000000e0000000200fde3000063000000000000000e000000020060e4000038000000000000000e000000020098e40000ac000000000000000e000000020044e50000a0000000000000000e0000000200e4e500009d000000000000000e000000020081e6000082000000000000000e000000020003e7000073000000000000000e000000020076e700003e000000000000000e0000000200b4e700003e000000000000000e0000000200f2e7000063000000000000000e000000020055e8000038000000000000000e00000002008de800005b010000000000000e0000000200e8e90000e6000000000000000e0000000200ceea000002070000000000000e0000000200d0f100009b050000000000000e00000002006bf70000b9000000000000000e000000020024f8000052030000000000000e000000020076fb000037020000000000000e0000000200adfd000081070000000000000e00000002002e050100c4000000000000000e0000000200f20501007b000000000000000e00000002006d06010070000000000000000e0000000200dd06010073000000000000000e0000000200500701003e000000000000000e00000002008e0701003e000000000000000e0000000200cc07010035010000000000000e00000002000109010043010000000000000e0000000200440a010089010000000000000e0000000200cd0b010038010000000000000e0000000200050d01001e010000000000000e0000000200230e010017010000000000000e00000002003a0f010095000000000000000e0000000200cf0f010038000000000000000e000000020007100100a8000000000000000e0000000200af10010087000000000000000e00000002003611010038000000000000000e00000002006e11010023010000000000000e000000020091120100a1000000000000000e00000002003213010038000000000000000e00000002006a13010043000000000000000e0000000200ad13010066000000000000000e0000000200131401003e000000000000000e00000002005114010097000000000000000e0000000200e814010082000000000000000e00000002006a15010085000000000000000e0000000200ef15010069000000000000000e000000020058160100cf000000000000000e0000000200271701007b000000000000000e0000000200a217010070000000000000000e0000000200121801008d000000000000000e00000002009f18010069000000000000000e00000002000819010017010000000000000e00000002001f1a010095000000000000000e0000000200b41a010038000000000000000e0000000200ec1a0100d6000000000000000e0000000200c21b0100a8000000000000000e00000002006a1c010038000000000000000e0000000200a21c010043000000000000000e0000000200e51c010047010000000000000e00000002002c1e010013010000000000000e00000002003f1f010097000000000000000e0000000200d61f010082000000000000000e00000002005820010013010000000000000e00000002006b210100fe000000000000000e00000002006922010038000000000000000e0000000200a122010073000000000000000e0000000200142301003e000000000000000e0000000200522301003e000000000000000e000000020090230100ce010000000000000e00000002005e2501003a010000000000000e00000002009826010066000000000000000e0000000200fe2601003e000000000000000e00000002003c270100b9010000000000000e0000000200f5280100e6000000000000000e0000000200db29010004010000000000000e0000000200df2a01009b000000000000000e00000002007a2b01003e000000000000000e0000000200b82b0100e3000000000000000e00000002009b2c010095000000000000000e0000000200302d010038000000000000000e0000000200682d010043000000000000000e0000000200ab2d0100d2010000000000000e00000002007d2f010038000000000000000e0000000200b52f010043000000000000000e0000000200f82f010023010000000000000e00000002001b310100a1000000000000000e0000000200bc31010038000000000000000e0000000200f431010043000000000000000e000000020037320100a5000000000000000e0000000200dc32010061000000000000000e00000002003d33010070000000000000000e0000000200ad33010044020000000000000e0000000200f135010040010000000000000e00000002003137010081010000000000000e0000000200b2380100cc000000000000000e00000002007e39010074000000000000000e0000000200f239010044000000000000000e0000000200363a01003f020000000000000e0000000200753c010031010000000000000e0000000200a63d010038000000000000000e0000000200de3d010063000000000000000e0000000200413e010038000000000000000e0000000200793e0100d1000000000000000e00000002004a3f01008e000000000000000e0000000200d83f010038000000000000000e00000002001040010043000000000000000e00000002005340010067010000000000000e0000000200ba410100e6000000000000000e0000000200a0420100a5000000000000000e00000002004543010061000000000000000e0000000200a643010070000000000000000e0000000200164401007f010000000000000e000000020095450100ac000000000000000e00000002004146010038000000000000000e00000002007946010075000000000000000e0000000200ee46010051000000000000000e00000002003f470100f7010000000000000e000000020036490100f2000000000000000e0000000200284a010048010000000000000e0000000200704b0100c8000000000000000e0000000200384c010038000000000000000e0000000200704c010043000000000000000e0000000200b34c010043000000000000000e0000000200f64c01009d000000000000000e0000000200934d010082000000000000000e0000000200154e010063000000000000000e0000000200784e01006f000000000000000e0000000200e74e01003e000000000000000e0000000200254f01003e000000000000000e0000000200634f010017010000000000000e00000002007a50010095000000000000000e00000002000f51010038000000000000000e0000000200475101007b010000000000000e0000000200c2520100f1000000000000000e0000000200b353010096000000000000000e0000000200495401007b000000000000000e0000000200c45401008d000000000000000e00000002005155010069000000000000000e0000000200ba5501007a000000000000000e0000000200345601004a000000000000000e00000002007e560100e7000000000000000e000000020065570100dd000000000000000e00000002004258010063000000000000000e0000000200a558010038000000000000000e0000000200dd58010092010000000000000e00000002006f5a0100d8000000000000000e0000000200475b010074000000000000000e0000000200bb5b010044000000000000000e0000000200ff5b0100a5000000000000000e0000000200a45c010061000000000000000e0000000200055d010070000000000000000e0000000200755d010073000000000000000e0000000200e85d01003e000000000000000e0000000200265e01003e0000000000000000cbf2060b2e64656275675f6c696e65550b00000400d3020000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f69746572002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c696365002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f697465722f6164617074657273000072656d5f70696f325f6c617267652e727300010000636f6e73745f7074722e72730002000072616e67652e7273000300006d75745f7074722e727300020000636d702e72730004000072616e67652e7273000500007363616c626e2e727300010000666c6f6f722e7273000100006d6f642e7273000600006636342e727300060000696e6465782e7273000700006d6f642e7273000700007265762e72730008000075696e745f6d6163726f732e7273000600006d6f642e72730001000000000502ffffffff03e10101051d0a031002f103010402051203be0508580401050e03c57a8294050d030a2005170377900512063c050806910511350403050903a002ac0603de7b083c04010518060385029e0603fb7d3c050d06038802d6065803f87d3c0404051206039508740401050903f0792e0405053403e809580403050903b578740603de7b2e03a204085803de7b7403a2042003de7b58040205120603b0070224010401051303e17a2e0524063c0402051206039f05900401051e03e17a2e0513063c050d20040505340603dc093c040605000603937474040305090603a204820603de7b7404040512060395082e0401050903fe79ba0405053403da0958040605000603937490040305090603a204820603de7b74040106039c026605170362084a05120602251204020603b205ba040105000603d0789e0402051203b007660401050d0603eb7a2e0603e57dba051206039d0208820603e37d022c01039d022003e37d58039d02082e050d0858052806bb05230620050dba03e27d08c8039e022003e27d82039e02082e040205120603920508820401051103ef7a0812050d063c040505340603ce09900403050903b578200603de7b4a03a2044a0406050003de7b580403050903a20458040705050603fe7b660401051a03850208200408051d03eb7d200401050e0395029e0509062006bb0603da7d08c803a6022003da7d8203a602082e050e0608590509063c050c0608920513500603d17d6605190603b0024a0402051203800520040103807b9e050d065803d07d5805130603b102083c0603cf7d6605180603ab025804020512038505200401051103fb7a9e050d067405200676050d06580667720603d47d74050c0603b502580603cb7d3c05140603bc02d60603c47d3c05190603bb02820603c57d9e05140603bc02ba0603c47d0820040905050603dc09660402051203d47d3c04010519038b7bba0514084b0603c47dba040905050603dc09089e0402051203d47d3c04010519038b7bba0603c57d90040905050603dc09580402051203d47d9e04010519038b7bba05185a0603c37d4a0406050c0603d9050222010401051403e37c660402051203f4045804010519038b7bba0514d70603c47d5805180603bd02ba0603c37d5805100603c502f20603bb7d74040405120603950808e4040105000603eb779e05100603d102089e0603af7d3c05110603d202f20514d70603ad7d9e050c0603da02d60603a67d3c051c0603dc02820403050903c6014a0603de7b2e040205120603b0074a0401051603ad7bf20511063c0405053406039009580403050903b57858040605000603de7b2e0403050903a2049e040105100603bd7e74050f031c580603857d084a03fb02f2ac05100603649e0603a17d9e05170603e20266063cac052506940403050903bc019e0603de7b2e0401051a0603e6024a051b3e0404051203ad05c80401053003d37a2e0402051203c804740401052603b87b820515063c03987d082e040205120603b007ba0401051f03bb7b2e0530063c040205120603c504900401052a03bb7b2e051f063c05192004050534060382093c0403050903b57858040605000603de7b2e0403050903a20482040405120603f303900401051503d87aba04050534038009580406051103807d74040505340380033c0403050903b578580603de7b2e03a2044a0401050c0603b87e900407051903c67dba0518063c040a05160603ac094a0407050503d476200401050c03e202ba0603fe7c3c05120603830308580603fd7c022a010383032003fd7c82038303082e050d0858052006bb051b0620050dba03fc7c08c80384032003fc7c820404051206039508200401050d03ef7a08ac08bb0603fb7c3c0404051206039508023401040105000603eb7708ac040705080603090229010603773c050f060313f206036d3c050c060318580603683c06030c089e0603743c051006031b08e4060365084a06030fac060371082e05190603208205180620040a05160603ac094a0407050503d4762004030509038204ac0603de7b820404051206039508740401051a03fb7aba0509065806e504060511038906740603e6763c040305090603a204200603de7b7403a2044a03de7b08c8040106039103e4051b1f051a0674050920051be4051a4a050920040505340603dd08820401050903a477084a0405053403dc08740403050903b578740401050f03f67e900603e87c0820050e060395030812050f850603e87c4a039803085803e87c022201051306039903ba0521064a05139e050d2005139005218205134a050d20050f0673050d92050f1e0603e87cac040205120603b007740401051303e97b82040205120397043c0401052703e97b6604020512039704740401052103e97b2e0513063c050d2003e77c3c0404051206039508200401050903877bba0403038601900406051103f804740403050903887b3c0603de7b082e03a2049003de7b5803a204082003de7b08ba0406051106039a096604010517038a7a3c05110674040305090603fe00740603de7bba03a2048203de7b3c03a2044a03de7bc8040105170603a403820511064a05175805114a05175805114a051720051158040505340603c908740403050903b578d60401051c03847f90050d069e03da7c58040305090603a204900603de7b5803a204082003de7b08ba0406051106039a09660401051703917a3c05110674040305090603f700740603de7bba03a2048203de7b3c03a2044a03de7bc8040105170603ab03820511064a05175805114a05175805114a051720051158040505340603c208740403050903b578d60603de7b740401051c0603af032e050d069e0512063d050d066603d07cba040205120603b0074a0401051703827cf20511063c040505340603bb083c040605000603937474040305090603a204820603de7b740401051c0603b4032e050d069e03cc7c3c05020603d603200505f105022102010001013b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666c6f6f722e727300010000001d090000040070010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400737263007372632f696e7400006633322e7273000100006269742e727300020000636d702e7273000300006164642e7273000400006d6163726f732e7273000500006d6f642e7273000100006d6f642e72730004000061726974682e72730002000075696e745f6d6163726f732e7273000100006d6f642e7273000600006636342e7273000100000005160a000502ffffffff03f108010402052e03b978ac0401051603c7073c0402052e03b978e40403053403c60a900404050803b1748206035e2e0322e4035e3c040305340603f30b08120404050c03b1742006035c2e040305340603f30b820404050c03b574200603582e040305340603990b820404050c039375200603542e040305340603990b820603e7743c0405050a0603ed032e0603937c200402052d06038f02820401051603bf07200405050a039f7a200603937c200402052d06038f02820401051603bf07200405050a039f7a200603937c20040205300603f302660403053403a608c804040510039575200405050a03bf03200603937c200404050c06033c20030a900603ba7f66051006033e580402052e03ed004a0401051603a308580603b2763c0405050a0603ed03200603937c3c040305340603f30b200404050803d974900402052e03df009e0404050803a17f3c04020511038004ac06c80404050806038e7c580603a67f4a040605050603f9082e03d6793c03aa06ac0407051503ab78200603dc7e3c040605050603f908082e03d6793c03aa06ac0407051503ab78200603dc7e3c040205300603f30220051103e300ac06c8040305340603c5073c0603e574ac0603ed0b083c0404050c038875200402051103d7032e0406050503ad04900402051103dd7a3c0403053403c5073c0402052d03f476200603f17d3c0403053406039b0b08e40404050803e275200408053303fa042e0402052e03b47bc80404050c0367200603ee7e3c040205110603cc044a052e03df7c58052d03e400200404050d03867f740603eb7e58040605050603f908200404050c038778740603807f4a0405050a0603ed03580603937c20040305340603ed0b820404050c039975200406050503f3072e04040511038f7874050d2204020511039206580603e478900404050806039a01660603e67e3c0402052d06038f02820401051603bf07200405050a039f7a200603937c200404050806039e01740603e27e3c05150603a1012e0406050503d807900402051103d37b74038a7f580403053403c507740402052d03f476200603f17d3c05110603cc0458052e03df7c82051103ab0258053503c002200620040405230603947bac0508030b580603cb7e3c0603b801660603c87e3c0402052e0603ab01660408053303cc04200603897a3c040105160603ce09200405050a039f7a3c0603937c20040805330603f705580401051603d703200405050a039f7a200201000101040b05160a000502ffffffff03ea08010402052e03c078f2040b051603c0073c0402052e03c078083c0403053403c60ad60404050803b174c806035e2e03220882035e3c040305340603f30b08580404050c03b1742006035c2e040305340603f30bc80404050c03b574200603582e040305340603990bc80404050c039375200603542e040305340603990bc80603e7743c0405050a0603ed032e0603937c200402052d06038f02ba040b051603bd07200405050a03a17a200603937c200402052d06038f02ba040b051603bd07200405050a03a17a200603937c20040205300603f3029e0403053403a608082004040510039575200405050a03bf03200603937c20040305340603990b200404050c03a375740403053403dd0a2e0404050c03ad753c0603ba7f58040305340603990b580404051003a5753c0402052e03ed003c040b051603a108580603b4763c0405050a0603ed03200603937c3c040305340603f30b200404050803d974900402052e03df00d60404050803a17f3c04020511038004ac040a053e03a47e200402051103dc01c8040a053e03a47e200404050803ea7d580406050503b7084a0368900407051503ab78200406050503ed075803be793c0603b17d3c06039109084a0368900407051503ab78200406050503ed075803be793c0603b17d3c040205300603f30220051103e300ac060820040305340603c5073c0603e574ac0603ed0b084a0404050c038875200402051103d7032e0406050503c5049e0402051103c57a580403053403c50758040a050d038076200402052d03f400200603f17d3c0403053406039b0b022a010404050803e275200408053303fa042e0402052e03b47b08120403053403f009200404050c03f775200603ee7e2e040205110603cc044a052e03df7c58052d03e400200404050d03867f740603eb7e5804060505060391092004030534038802740404050c03e7753c0603807f3c0405050a0603ed03900603937c20040305340603ed0bba0404050c0399752004060505038b082e0404051103f77782050d2204020511039206580603e4789e0404050806039a01660603e67e3c0402052d06038f02c8040b051603bd07200405050a03a17a200603937c200404050806039e01740603e27e3c05150603a1014a0402051103ab03580406050503c504900402051103c57a3c0403053403c50758040a050d038076200402052d03f400200603f17d74040a05430603f002200402051103e6005803f60058052e03df7cba053503eb04200620040a053e0603da7c580404052303ba7e740508030b580603cb7e3c0603b801660603c87e3c0402052e0603ab01660408053303cc04200603897a3c040b05160603cc09200405050a03a17a3c0603937c20040805330603f70558040b051603d503200405050a03a17a20020100010196000000040090000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e7273000100006d6f642e727300020000696e745f6d6163726f732e727300010000008300000004007d000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e74000075696e745f6d6163726f732e7273000100006d6f642e72730002000000440100000400fd000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e727300010000696d706c732e7273000200006d6f642e72730002000075696e745f6d6163726f732e727300030000636f6e73745f7074722e7273000400006d75745f7074722e72730004000000000502ffffffff038f03010402050b0a03807f7405117591050c750603ed7d58050b060390024a050c085b05142f0603ec7d740401050a060392032002030001013c090000040061010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c6963650000706f772e7273000100006636342e727300020000737172742e727300010000666162732e727300010000636f6e73745f7074722e7273000300006d6f642e727300010000696e6465782e7273000400006d6f642e7273000400007363616c626e2e72730001000000000502ffffffff03dc0001040205160a038e0808740401052103f777900513a1053d1d05085e05000603987f6605080603ed00f20603937f4a03ed008203937f3c0603f20008c806038e7f3c050d0603f300ba0521063c038d7f4a03f30082038d7f58050c0603f4009006038c7f3c050d0603f500f206038b7f3c050806038201580603fe7e5805100603f70020050203a202580603e77c20050c06038301c80603fd7e3c051306038501820603fb7e3c05100603880108120603f87e3c051706038e014a0603f27e4a051b06038f01820514680603ef7e9e052206039201660515062003ee7e58051c06038901900515063c0514063e0603f57e9e052206038c01660515062003f47e58050806039801660603e87e4a050c06039a01082e0603e67e3c039a018203e67e3c051806039d01820517062003e37e660603a0019e0603e07e3c05140603a9010812050203f001200603e77c2005110603a2010812050203f701200603e77c2005170603b301580603cd7e3c0502060399032e0603e77c20050c0603b601900603ca7e3c03b6018203ca7e58052c0603b3019e050203e6013c0603e77c2005140603b80120050203e101580603e77c2005100603bd015804030517039b7f3c0401050203c1023c0603e77c200404051d06030d200401050803b801580603bb7e82050c0603c701660603b97e3c03c7018203b97e3c03c7018203b97e3c03c7016603b97e5803c7012003b97e5803c7018203b97e3c03c7018203b97e3c050806038201082003db00200603a37e2e05140603e001ba050203b9019e0603e77c2005080603ea0108820603967e3c050c06039302ac050902241a94050e6f0509069e050c06ea0603e07d3c05130603a302820603dd7d3c050d0603a902e4730603d87d3c040505120603b0075806200401053006039b7b900405051203e504ba0401051b03fe7a900406050c03353c04020516038806820406050503f77990210402051603e906200401051c03e378200516063c061f053cd0050e0658050d200406050c06032d820402051603e9064a0401051703e478200402051603bb06740406050503ff79900402051603e206200401052203ed7820051d063c061f05180674052f0621051c063c05182005170626052a082105141e050e06740517061e051a59055606087405509e054b2005459e054020053a9e053520052f9e052a2005249e051a2005090621052a220402051603ab063c0406050503ff79740402051603e20620040103f97820051d081c051c062005183c0522062405160620061f052a940402051603a3063c0406050503ff79740402051603e206200401051703fd782005130658052506a0051806ba040505120603e5043c0401052f039f7bac0518081b0521250520063c0516061f05203d04020516039c063c0406050503ff79740402051603e206200401038479200515065805143c05093c03b07d58050c0603ec01e40603947e3c0603f801820603887e3c0603ff01820603817e3c051606038902acbd1e054706089e052b9e052720052020051620052406a00516062006f10520220402051603de063c0406050503ff79740402051603e206200401051203c278200509065803f27d5805100603ee01ac0603927e3c051b0603ef0108580518062005020603aa01200603e77c20051b0603f30108660518062005020603a601200603e77c20051706038002740603807e3c051106038302ac0502039601ac0603e77c20051106038102ba0502039801ac0603e77c2005170603f901740603877e3c05110603fc01ac0502039d01ac0603e77c2005110603fa01ba0502039f01ac0603e77c20040605050603ea02ac0402051603e2062004010518038a792005243b0514067405120692040205160394063c0401051203ee793c0516e30508a20603a47d3c050f0603e6028206039a7d9e050d0603ea0282050c06200513065d050c067403917d4a05140603f002ac05020329ac0603e77c20050c0603de02ac0603a27d7405140603e002ac05020339ac0603e77c20050c0603e302ba05180620050c58039d7d4a05140603e402ac05020335ac0603e77c2005140603ec02ba0502032dac0603e77c2005120603f502e40508780603877d3c05200603fb02d60509062e050e0693050d0666053082050c06c90509ef053321052e06200406050c0603663c0402051603e9064a0401050903b679200524230402051603e6053c060395773c0401050a06038f039004060505035b900402051603e206200401051203ba79ba05192105120690052c08580512200516062105123e053f08c90539069e053520052f9e052b2005259e052120051b9e05172005132005120621051d06d60512200516061d05120674052f0623052a0674051220050506210402051603de05ac0406050503ec7974040103382e0508840406050c03523c0505d5210402051603e906200603b476580401050d06039303200603ed7cba050506039803200603e87c9005100603cb019e050803b77f08120603fe7e3c05150603d101ba051406200519063d0515065805020603c701580603e77c20051b0603d3019e050203c6012e0603e77c200399032002030001010409000502ffffffff1305080add0603773c050f0603135806036d3c0509060316ac050c840603683c050906030a0858050c840603743c050d06031908580510ca0603659e050d06030dba0510ca0603718205190603208205180620040205160603ac094a0409050503d4762005022102010001013a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666162732e72730001000000a20100000400ad000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006c6f67662e7273000200006c67616d6d61665f722e7273000200006b5f73696e662e7273000200006b5f636f73662e7273000200000005160a000502ffffffff03f108010402050803ad7708200603613c050f06032b820603553c06032d083c06035358050c0603219006035f4a0603247406035c2e0509060329740401051603c9082006038e779e040205140603252006035bc805020603c100200603bf7f3c051a0603226605140658050206031f200603bf7f20050506033282050b5905050620050e06030c3c052f83050a037482050506740401051606039a09200402050d03e97666051603099e051103789e050d0620051006c0050d29750519d805120666050e200519069d05120666050e20050d062205092305050620050206750201000101da0500000400cd000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000064656c65676174652e7273000100006d6f642e7273000200006e6f726d5f73686966742e72730001000075696e745f6d6163726f732e7273000200006d6f642e72730001000062696e6172795f6c6f6e672e72730001000000000502ffffffff03130105140a030e08ac050d06c8035e740322084a052806038501740402050503ea07580682040305170603af774a0401052803e70066052bc905288f0402050503820808120401051c038378083c051d3e05000603d27e7405200603af01580603d17e082005190603b30190c973050d03ef7e58052e062e050dc8051806030c2e051f0333740402050503b008740401051c03d77708660603987f3c052b0603ed004a0402050503a408740401054003df77e4052a0690040205050603a1082e0401053203e377082e05210620053290052120038c7fac0402050506039109200603ef76084a0391092003ef7608820401051c06038101200603ff7e0820052c060387014a0402050503a20808f20401052003e377085805000603f47e3c052106038e01740524760603f07e58051d06039a0190c9730524037658040205050381082e04010534038478580603eb7e0866040205050603910990064a040105260603a87766052c0314c8052fd7052c8f0402050503dc0808120401052003aa77085805000603ad7f3c05210603d500740524760603a97f58051d0603de0090c97305240379580402050503ba082e0401052d03ca77580603a57f0866050a0603b8010820022b000101000502ffffffff031301051a0a030cac804b050d9306035e9e0322ba035e2e032274035e66040205050603f90890063c040305170603c7773c0401052b03e800200528ab0402050503ea07900401051c039b78e4051d3e0520750603d17e7405190603b401907305205405292f0603d07e74050d060322660518030cac051f03339004020505039808740401051c03ef7708660603987f3c052b0603ed004a04020505038c08740401054003f777e4052a067404020505060389082e0401052103fc77c805333b05320658054e20054d58052120038c7f90053a0603ff002005390658052790051c06300603ff7e74052c060387014a04020505038a08e40401052003fb77e405213e0524e60603f07e3c051d06039b0190730524037658054d33054c0658053e061e0402050503e6073c04010534039c7858052908130603ea7e58040205050603f90858063c040105260603c07758052f0315ba052c570402050503c408ba0401052003c277e405213e0524e60603a97f3c051d0603df0090730524037958053e3104020505039f083c0401052d03e27758054606f203a57f58040205050603f908200401051d03b27758052b06c8035558040205050603f908200401052c03eb775805210690053cac039c7f58052506038201200603fe7e82050a0603b80120020f0001010406000502ffffffff03160105100a7a06036390040205050603f9082e063c040305170603c7773c051e2205180674040605200603d2024a560402050503e7057404060510039c7a3c0603eb7c7406039903820603e77c3c051106039b03c8051b210511c60402050503df05200406051403a67a74f60603dd7c740603ae03820603d27c8203ae03e403d27c5803ae03ac03d27c3c040205050603f908660620040605280603be7af20402050503c205200406051403b57a740603d27c9e03ae035803d27c3c040205050603f9089e0620040605280603be7af20402050503c20520063c20040605280603be7af20402050503c20520063c20040605280603be7af20402050503c20520063c20040605280603be7af20402050503c205200406051103b87a7405141d0603d27c4a05290603ba032e0515067403c67c9e050a0603a60420020f000101b005000004006f010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500007467616d6d612e7273000100006636342e727300020000666c6f6f722e727300010000636f6e73745f7074722e7273000300006d6f642e7273000300006b5f73696e2e7273000100006b5f636f732e727300010000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff03850101040205160a03e50708c80401051403a278081205130620050806f60603ef7e3c06039501820403051d03fb7e3c04010508038c01900603e47e74051606038e0166050c030f200603e37e2e0603a0010882051d4b0603df7e02290103a1012003df7e4a03a101740404051206038f0608820401051403f179200603df7e7405080603a701900603d97e5803a7019003d97e58051606038e0158050c031b200603d77e2e05190603ab01ac0510022413052806ba0403051d0603e47e2004010510039c012005000603d47e20040505090603ac0c3c0603d473820401051006039301ba0603ed7e58060397019e0603e97e7405090603b301ba0603cd7e58050f0603b701200516035790050f0329200505bd0508bb03bc7f0234010603897f3c05130603fe0090050dd705130620050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba06d505130620050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba051320050dba03827f5805130603f900022401050dbb05130620050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e0602261105130620050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e051320050d9e03877f3c050c060382010874051703c200580513063c050566050806f30603bb7e4a0505060324ac0403051d036c200401050f03155805050620050906f5050506ba035808c80328200358820328082e050e0608750509063c050a0621050506c806a00813060353740406050d06033020933a052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b580407050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200343580406050d0603302004010514570406050d5c1e052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b740407050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200401050e060373200603503c05140603c8019e05130674050920063e570603b77e5805100603cd01d605090620050a06088105050658050906220505062003b27e3c05020603d00120020e0001013b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666c6f6f722e7273000100000067050000040087000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000072656d5f70696f322e7273000100006636342e72730002000000000502ffffffff032c01040205160a03be0808900401050e03c677082e05080326082e0603a97f3c0603f6009e06038a7f3c06039b01d60603e57e3c0603a201820603de7e3c05050603aa01acbb0402051603a108200401051503e377ba0603d17e089005120603c1007405130374f208410519bc0515062006d7051621040203ad083c0401051203d57758050c680603be7f66050d0603c5000812210511f305220620052158050d3c06210402051603a3083c040103de77580510670603b67f6605110603cd00083c210515f30526062005255805113c06210603b07f5805090603d4002005127305099f05110367d606034508c8033b20034582033b082e050906031908580603ac7f5805150603af01200603d17e8203af01082e05090858050d0667050906d6051506b90603d17e08c803af012003d17e8203af01082e05090858050d0683050906f20505062205150885050d0824053006c8050d3c050806d705053f0514067405057405093c05057403c37e5805110603bb01580510063c05223c05217405102005163c05157405102003c57e58050c0603f800ac0603887f3c051006038a019e0603f67e3c0513060335e408410519bc0515062006d7051621040203ad083c0401050c03d777d60603be7fd6050d0603c500e4210511f305220620052158050d3c06210402051603a3083c0401051003df77d60603b67fd605110603cd00083c210515f30526062005255805113c06210603b07f5805090603d4002005127305099f05110367d606034508c8033b20034582033b082e050906031908580603ac7f58051006038e01740603f27e3c0518060392014a0519ef051abb051822051a57051808130603ee7e5806039701580519ef051abb051822051a57051808130603e97e5805100603fa00900603867f3c0603fe00660603827f3c0518060382014a0519ef051abb051822051a57051808130603fe7e5806038701580519ef051abb051822051a57051808130603f97e58050c0603d900740603a77f820603dd009e0603a37f3c05130603ea00740603967f2e05140603ee004a0515ef0516bb051422051657051408130603927f580603f300580515ef0516bb0514220516570514081306038d7f5805100603df00660603a17f2e05180603e8004a0519ef051abb051822051a57051808130603987f5805100603a6015805123a0510760603da7ed605180603e300580519ef051abb051822051a570518081306039d7f5805120603c1007405130374f208410519bc0515062006d7051621040203ad083c0401051203d57758050c680603be7f66050d0603c5000812210511f305220620052158050d3c06210402051603a3083c040103de77580510670603b67f6605110603cd00083c210515f30526062005255805113c06210603b07f5805090603d4002005127305099f05110367d606034508c8033b20034582033b082e050906031908580603ac7f580513060335f208410519bc0515062006d7051621040203ad083c0401050c03d777d60603be7fd6050d0603c500e4210511f305220620052158050d3c06210402051603a3083c0401051003df77d60603b67fd605110603cd00083c210515f30526062005255805113c06210603b07f5805090603d4002005127305099f05110367d606034508c8033b20034582033b082e050906031908580603ac7f3c05020603be0120020c000101e3020000040056010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006174616e662e7273000100006633322e72730002000066616273662e7273000100006d6f642e727300030000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff032c01040205160a03c508f20401050503c277e405089206034a3c051106033ef20403051d034d3c0401050c03c000c80603b57f3c05130603d600820603aa7f3c050d0603dc00580603a47fac050c0603c000c80603403c05100603c20074051d3e0404050903e80b9e0401050203c474660603907f3c05110603d8008205230682051d66050d2003a87f9005100603cd00ac0603b37f3c05150603d300740520068205112003ad7f9005160603cf00200515069e05258205112003b17f7405050603e10020050d590520d905120666050e20053206d505240666052020051266050e20051106035ac8050803282006039a7f2e040505120603b0074a0401050d03ba799e0525063c052174040505120603c606200401053103ba79900520063c051f20050d3c05080621051003489005080338200502250603907f2005180603e700200514069005102003997f58040205090603e703200401050c03d17c580603482e0510060333d603092005020334200603907f2003f0002002030001013b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000066616273662e727300010000003b0300000400dd000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006578706d312e7273000100006636342e7273000200006d6f642e7273000300006d6f642e72730001000000000502ffffffff032101040205160a03c90808820401050f03c0770882050e0620050806f60603513c06033e820603423c050f0603d300820603ad7f3c040205090603e60308200401050c03cb7c5806034f2e0603346606034c3c050206038801900603f87e20050c060337ba0603494a050d060338ac050203d000200603f87e20050c0603d500820403050903d70b3c0401050203dc74660603f87e3c050c0603c000900603403c05120603cc00ba051f069e05113c050dba03b47f08c803cc002003b47f8203cc000812060859d80516f1050d062003b27f5805100603c200740603be7f3c05110603c700ac0603b97f083c0603c300ba0603bd7f082005090603d10020050d750509063c03ae7f58050f0603df00d62105440875053e069e05382005329e052c2005269e052020051a9e051420050e9e050f06bb0505065805180621052a06ba0523580517200511200508063d0515680514067405103c0502060322200603f87e20050d0603e8002005090674050520063d0508e60603957f7405160603ec0020051006d6050206031cac0603f87e20050c0603ef00d6051c3f051606580510d60502060316200603f87e2005200603f000d6051b062005149e0502060318200603f87e20050b0603f40066050a062005053c040205160603d808200401050803aa777406038a7f3c050b060380013c05050666040205160603cc08200401050803b677ac05123f050e0674050d9e03fb7e580516060383019e050e063c050d5803fd7e3c050206038801900603f87e3c050d0603f80020050906d6050c062105100224170502030a2002010001011c0300000400de000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006578706d31662e7273000100006633322e7273000200006d6f642e7273000300006d6f642e72730001000000000502ffffffff032301040205160a03ce08f20401050503b77708820508930603543c050c06032ee40510037a9e050c26060352660603357406034b4a050d06033674050203d000200603fa7e2005080603c000ac0603403c050f0603d5009e0603ab7f3c050c0603d70008660603a97f3c0502060386012e0603fa7e2005190603d800200403050903d40b9e0401050203da74820603fa7e20050c0603c200900603be7f3c05120603ce00820510035ae4052003262005110620050d8203b27f089003ce002003b27f8203ce0008120515060821050da00516b9050d062003b07f580510060328740511031c200603bc7f2e0603c500740603bb7ff20603c900820603b77fd605090603d30020050d750509063c03ac7f58050f0603e0009e21051fd705190666051320050e6605120683050d065805180621052906820523580517200511200508063d0515680514067405103c050206031f200603fa7e20050d0603e9002005090674050520063d0508e60603947f7405160603ed00200510069e0502060319740603fa7e20050c0603f0009e051a3f0515065805109e0502060313200603fa7e20051f0603f1009e051a06200514660502060315200603fa7e2005200603f500580402051603d9089e0401050803a8777406038a7f3c051d06038001660402051603ce083c0401050803b377ac050e3f050a067405096603fc7e5805120603820166050a063c05095803fe7e3c050206038601900603fa7e3c05150603f80020050cad051008b105022802010001013d030000040055010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006578702e7273000100006636342e7273000200006d6f642e727300030000636f6e73745f7074722e7273000300007363616c626e2e727300010000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff03d40001040205160a039608083c0401050c03f87774050a08730505062006760508930402050903ff023c0401050c03837d740603977f2e050206039a012e0603e67e20050c0603ec00ba0603947f3c0603f100ac06038f7f4a05190603f300ac0403050903b90b740401051003c87408ac06038c7f6605080603fb00ac0603857f3c050f06038601820603fa7e3c050c0603fd0008c80603837f3c05120603ff00ba040403b106580401051f03cf79820511063c050dba03817f08c803ff002003817f8203ff00081203817f08900603ee00ba0502032c200603e67e20051506038d01d604030509039f0b4a0401051003e27408120502030c200603e67e2005110603810158050d062003ff7e5805120603830120050906081206d7210603fb7e5805050603920120053908c90533069e052e2005289e052320051d9e05182005129e050d20050520050f0621051706ba050f3c050e4a05059e0508063d0603eb7e580405060309c80603773c050f0603135806036d3c0509060316ac050c840603683c050906030a0858050c840603743c050d06031908580510ca0603659e050d06030dba0510ca0603718205190603208205180620040205160603ac094a0405050503d476200603603c0401050206039a0120020300010107030000040054010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006174616e2e7273000100006636342e727300020000666162732e7273000100006d6f642e727300030000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff03c30001040205160a03a708083c0401051203db77082e0505840508910603b77f3c05110603d200820403051d03bb7f3c0401050c03d400c806039f7f3c05130603ec00820603947f3c050d0603f2009006038e7fac040205090603e603200401050c03e47c580603b67f2e05100603cf0090050203393c0603f87e20050c0603d400c80603ac7f3c05100603d60074051d3e0404050903d40b820401050203dc74660603f87e3c05110603ee00ba052306ba051d9e050d2003927f9005100603e300ac06039d7f3c05150603e900ac052006ba05112003977f9005160603e50020051506d60525ba051120039b7f74050d0603f7002059054208770539069e053520052c9e052820051f9e051b2005129e050e20054f0608730546069e05422005399e053520052c9e052820051f9e051b2005129e050e200511060358c80508032b200603837f2e040505120603b0074a0401050d03d1799e052c063c052874040505120603af06200401053803d179900528063c052720050d3c050806220502b10603f87e2005180603fe00200514069005102003827f3c0502060388012002030001013a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666162732e7273000100000018030000040057010000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c6963650000657870662e7273000100006633322e7273000200006d6f642e727300030000636f6e73745f7074722e7273000300007363616c626e662e727300010000696e6465782e7273000400006d6f642e7273000400006d6f642e72730001000000000502ffffffff032101040205160a03d008f20401051003b47774050508a00508930603553c050c06032d9e0603533c05020603e5002e06039b7f20051706032774050c030a2006034f4a033182034f3c06033720060349580519060339740403050903f30b6604010510038e74084a0603465805080603c500ac0603bb7f3c050f0603d100820603af7f3c050c0603c70008900603b97f3c05120603c90082040403e7065804010520039979820511063c050d8203b77f089003c9002003b77f8203c900081203b77f085806033482050203312006039b7f2005150603d8009e0403050903d40b4a0401051003ad74c80502030c2006039b7f2005110603cb0058050d062003b57f5805120603cd0020bb05090620069f210603b07f58050e0603dd0020051c083d05160666051120050d2005130621051b068205133c05124a050d660508063d0603a07f58040506cf0603793c050f0603115806036f3c050906031274050c8406036c3c0509060828050c840603763c050d06031508200510ca0603699e050d06030b820510ca06037382051806031c740402051603b209820405050503ce76200603643c040105020603e500200203000101cd010000040082000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006c6f672e7273000200000005160a000502ffffffff03ea08010402050803e67708200603af7f2e03d100c803af7f3c050f0603de00820603a27f3c0603e00008660603a07f3c052303e0007403a07f5805020603f5009006038b7f20050c0603d300d60603ad7f4a0603d600580603aa7f2e05090603db00ac04010516039008200402050e03f277580509062003a37f8205050603e50074050b5905050620051306030d3c052fbb050a03737405050674050b0621050a063c052090050520040105160603e4082004020512039f779e05160309d60379d605120620051506f1051230750529083d0522069e051e2005179e0513200534060821052d069e05292005229e051e2005179e05132005120621050922050506200502067506038b7f2005140603d700200603a97f081205020603f5002006038b7f3c051a0603d4009e0514065805020603212002010001010b010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff040222010403051503a879c8050c910603e57d3c051306039d029e0603e37d3c0603a202f20603de7d3c050d0603a3024a0603dd7d089e052006039e02580515060812051b068305150620064b051008670515b90510d70603df7d740401050e0603f50320021a0001010b010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff049004030515039779e4050c910603f67d3c051306038c02820603f47d3c06039102820603ef7d3c050d060392024a0603ee7df20401050e0603f5032006038b7c3c0403051f06038d023c0515060812051b067505150620063d0510bb0401050e03e5012e020100010108010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f80408e40403051503e2790820050cc90603b27d3c05130603d002e40603b07d3c0603d502084a0603ab7d3c050d0603d6024a0603aa7d089005200603d10290051506ba051c0683051521051008ad0515b90510d70603ac7d740401050e0603f50320021a00010108010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f804900403051503c079083c050cc90603d47d3c05130603ae02c80603d27d3c0603b302c80603cd7d3c050d0603b4024a0603cc7dac0401050e0603f5032006038b7c3c0403051f0603af027405150682051c06750515210510bb0401050e03c3012e02010001010a010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff047404030515038679e4050c910603877e3c05130603fb01820603857e3c06038002820603807e3c050d060381024a0603ff7d9e0401050e0603f5032006038b7c3c0403051f0603fc017405150674051b067505150620062105109f0401050e03f6012e02010001010b010000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f804740403051503d179083c050cc90603c37d3c05130603bf02c80603c17d3c0603c402c80603bc7d3c050d0603c5024a0603bb7de40401050e0603f5032006038b7c3c0403051f0603c00274051506ba051c067505150620062105109f0401050e03b2012e0201000101fd000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff04900403050c03b478c80603da7e3c05130603a8019e0603d87e3c05100603ac01ba0401050e03c9022e06038b7c200403051f0603a901200515060812051b067505150620050d063d0603d57e580401050e0603f503200203000101f9000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f804900403050c03db7808120603ba7e3c05130603c801e40603b87e3c05100603cc0108120401050e03a9022e06038b7c200403051f0603c9015805150682051c0675050d210603b57e580401050e0603f503200203000101f1000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f80408c80403050c03fb78081206039a7e3c05130603e801e40603987e3c05100603ec0108120603947e8205200603e90190051506ba051c0683050d210603957e08ba0401050e0603f50320021a000101f5000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff0408e40403050c03c478c80603ca7e3c05130603b8019e0603c87e3c05100603bc01ba0603c47e8205200603b901580515060812051b068305150620050d064b0603c57e08740401050e0603f50320021a000101fc000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006633322e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03ff04740403050c03a478c80603ea7e3c0513060398019e0603e87e3c051006039c01ba0401050e03d9022e06038b7c200403051f060399015805150674051b067505150620050d06210603e57e3c0401050e0603f503200203000101fe000000040089000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006636342e727300020000636f6e762e72730003000000000502ffffffff03f20301040205160a03f804740403050c03eb7808120603aa7e3c05130603d801e40603a87e3c05100603dc0108120401050e0399022e06038b7c200403051f0603d90158051506ba051c067505150620050d06210603a57e3c0401050e0603f5032002030001010d01000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006664696d2e7273000200006d6163726f732e7273000300006d6174682e7273000300000005090a000502ffffffff03e503010402050803a77c740603732e0403050e0603f5032e06038b7c20040105090603e603200402050f03a97c740603712e0403050e0603f5032e06038b7c200402050f060311ba05099f06036e740403050e0603f5032002030001010e0100000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006664696d662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005090a000502ffffffff03e603010402050803a67c740603732e0403050e0603f5032e06038b7c20040105090603e703200402050f03a87c740603712e0403050e0603f5032e06038b7c200402050f0603118205099f06036e740403050e0603f503200203000101d70000000400a0000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000666d6178662e7273000200006633322e7273000300006d6174682e72730001000000000502ffffffff03f20301040205050a03987cba0403050903dc03200402050503a47c580401050e03ea03200201000101d70000000400a0000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000666d696e662e7273000200006633322e7273000300006d6174682e72730001000000000502ffffffff03f20301040205050a03987cba0403050903dc03200402050503a47c580401050e03ea03200201000101d600000004009f000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000666d696e2e7273000200006636342e7273000300006d6174682e72730001000000000502ffffffff03f20301040205050a03987cba0403050903db03200402050503a57c580401050e03ea03200201000101d600000004009f000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000666d61782e7273000200006636342e7273000300006d6174682e72730001000000000502ffffffff03f20301040205050a03987cba0403050903db03200402050503a57c580401050e03ea03200201000101330100000400ad000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100007363616c626e2e7273000200006636342e7273000300006d6174682e7273000100006c646578702e72730002000000000502ffffffff03f20301040205080a03967cd60603773c050f0603135806036d3c0509060316ac050c840603683c050906030a0858050c840603743c050d06031908580510ca0603659e050d06030dba0510ca0603718205190603208205180620040305160603ac094a0402050503d476200401050e03d50320020100010197000000040091000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00007363616c626e2e7273000100006c646578702e7273000100006636342e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000ae010000040004010000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e727300030000696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03aa7c9005134206035d74040305150603b4024a040405050394065803f079200403050103245805150358580404050540040305150379c804040505039706200405052d03c7793c0403050103cd00580515035e200603c67d3c0401050e0603f5032006038b7c3c040305010603dc0258051503589e040405055c040305010324660515035e200401050e03bb01200201000101000100000400fa000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e727300030000696e745f6d6163726f732e7273000300006269742e72730004000000ed01000004002c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400006d6163726f732e7273000100006633322e7273000200006269742e727300030000636d702e727300040000636d702e7273000500006d6f642e72730005000000000502ffffffff03f20301040205160a03ff04740403052e03b978c80404053403c80a900405050803bf7420050006034e2e05080332083c0403052d0603dd013c0405050803a87e740603492e0401050e0603f5032e06038b7c200403052e0603ab01580404053403c60aac0405050803cf74200404053403b30b2e0405050f03d974580603b47f4a040405340603ed0b200405050c03d474580603bf7f2e040405340603990b200603e774740401050e0603f5032002030001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006633322e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e727300050000009501000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e727300010000636272742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402051703bf7790050808140603543c0603c000082e0603403c050e0603c200082e0401051603a908200402050e03d8775805090682050c06210603bc7f58050b0603cc00ac0505ff21040105160380092004020509038d772005130658050558052a062105290674053fba05399e052920051ed605189e051420050e9e050d2005052004010516060391083c0402050503fc77740401051603e5088204020505039f7720590509220505570513590505063c050d06210505063c03917f580403050e0603f5032006038b7c3c0402051006032e200403050e03c7035802010001019a000000040094000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e727300010000636272742e7273000200006d6163726f732e72730003000000960100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03947c9005133f06037674040305150603b4024a0404050503c5062e0403051503b8793c0404050503c80674063c0405052d06039679200403050103cd002004040505039d064a0403050103e379580515035e200603c67d3c0401050e0603f5032006038b7c3c040305150603b102200404050503c8063c0403051503d5793c0401050e03a7014a0201000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300006269742e727300040000008d0200000400fc000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f636f6e7665727400006636342e7273000100006c6f67322e7273000200006d6163726f732e7273000300006e756d2e7273000400006d6174682e7273000300006d6f642e7273000400000005160a000502ffffffff03ea08010402050803cc7708200603492e0337c803493c050f0603c300820603bd7f3c0603c50008660603bb7f3c052303c5007403bb7f580403050e0603f5039006038b7c200402050c060338d60603484a06033b580603452e05090603c000ac0401051603ab08200402050e03d777580509062003be7f8205050603ca0074050a7605050674050a0621051e06ba050520040105160603ff0820040205050384779e050cf30505062006030920040105160391083c0402050503f177740401051603f0082004020505039477ba050a036b7405050620040405010603d3003c04020505034720050f3d050a03789e050d0374084a050506200621910520083d0519069e051520050e9e050520052b0608210524069e05202005199e051520050e9e0505200621051e27051a0620050520052406bd050e06200505e40625230403050e038c032006038b7c200402051406033c2006034408120403050e0603f5032006038b7c3c0402051a0603399e051406580403050e0603bc03200201000101e60000000400e0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f636f6e7665727400006636342e7273000100006c6f67322e7273000200006e756d2e7273000300006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002a0100000400de000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006d6f642e7273000100006d6163726f732e7273000200006164647375622e727300030000636d702e7273000400006d6f642e7273000300000005050a000502ffffffff039009010402050e03e47a7404010505039c05580674040305180603f676580402050e03ee034a0404053403f807580402050e038878e40204000101ec0000000400e6000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e727300030000636d702e7273000400000025040000040015010000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e72730001000074616e662e7273000200006633322e72730003000072656d5f70696f32662e7273000200006b5f74616e662e7273000200006d6f642e7273000400006d6174682e7273000100006d6f642e72730002000000000502ffffffff03f203010402050f0a03aa7c08c80403051603d508580402050503b177e405089206035b3c0603339e06034d3c06033c9e0603443c0603c7009e0603b97f3c0404051c0603274a0508e80603553c051306032eac08410511bb06034c08c8033420034c82033408120523022512051d200532ba051d20034c58050f06033c90050e064a05210659051c06200403051606039109200404050503ef7620050d83040205100364086604040508031d200509310603be7f9005110603c0003c0516065805155803403c0405050d0603189e0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e0526062505210620051720050520050906210402050f0320900405050903602005050620035358040205100603c800200603b87f90050c06033eac0603423c05100603220858051e0320200405050d03564a0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e05260625052106200517200505200621060353580402051006032208e4051e031e200405050d03584a0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e052606250521062005172005052005090621050506200353580402050c060335ac06034b3c05100603220858051e0317200405050d035f4a0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e05260625052106200517200505200621060353580402051006032208e4051e0315200405050d03614a0312900514f3050d069e050e062105090620050d061d0517770514d2050d069e051806d50511069e052606250521062005172005052005090621050506200353580402050c060327ac0405050d03713c03125805140821050d069e050e062105090620050d06390517770514d2050d069e051806d50511069e05260625052106200517200505200621060353580402051c06032a9e05000603560820040605090603ac0c3c0603d473660401050e0603f50320020e000101e50000000400df000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472000074616e662e7273000100006633322e7273000200006b5f74616e662e7273000100006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000008e000000040088000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000072656d5f70696f32662e7273000100006633322e727300020000007e010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d756c2e7273000200006d6f642e7273000200006d6f642e72730003000000000502ffffffff03f20301040205100a03cf7c0225010603be7f08200603cb002efd0869051baf0510037a082e0403050d03db00900402050903807f3c0403050d0380012e0402050903807f58040405050386092e0603d776022c0103a90920083c082eba74660402051706038777d60404050503f9083c0603d776900403050d0603a301200402050903807f58040405050386092e06082e082eac74660402051706038177d60404050503ff083c0603d7769003a9092003d776022501040205100603d3003c051b8b051025085b0603aa7fc805090603ff00200401050e03f60274021b0001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d756c2e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e72730003000000d40100000400ab000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006879706f742e7273000200006d6163726f732e727300030000737172742e7273000200006d6174682e7273000300000005160a000502ffffffff03ea08010402050503b677d60401051603ca08200402050503b777f20508210401051603a909820402050a03df76ac05086a0603513c060332083c06034e3c0403050e0603f5032e06038b7c2004020508060332c806034e3c0403050e0603f5032e06038b7c200402050806033720060349081206033ec80603423c050f0603c20008660603be7f3c05090603c500acd50603bc7ff20510060338200403050e03bd035806038b7c20040205090603c100bad5060340d6050e06030f2006740505060855050a21050506740621052c3e050e0658051d82050e82050506e0050a21050506740621052c3e050e0658051d82050e820603392e04040517030f3c040205050371200603b77f3c0403050e0603f5032002030001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006879706f742e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e72730001000000a201000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c6f67662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050803ad7708200603613c050f06032b820603553c06032d083c06035358050c0603219006035f4a0603247406035c2e0509060329740401051603c9082006038e779e040205140603252006035bc80403050e0603f5032006038b7c3c0402051a06032266051406580403050e0603d3032006038b7c200402050506033282050b5905050620050e06030c3c052f83050a037482050506740401051606039a09200402050d03e97666051603099e051103789e050d0620051006c0050d29750519d805120666050e200519069d05120666050e20050d0622050923050506200403050e0603b5037402010001019a000000040094000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c6f67662e7273000200006d6163726f732e727300030000002c0100000400b6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006636342e727300020000696e745f6d6163726f732e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a038a7f089003ac0608e40608200401050e0603cc7a08c80403051403cf7c08ac0511c522051273051c060812051120051c065905260658051b2005162005153c05090622051803c700d6210404051603bf08200401050e03a97a2002010001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000696e745f6d6163726f732e7273000100006d6163726f732e7273000200006636342e7273000100000086000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000003a01000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e727300010000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03cb00010603b47f7405110603ca004a050f920603b47f085803cc0082040205120603e406ac04010531039d7974050d06ba040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a050f0673050d92050f1e0603b47fba03cc0066053106c9050d0690050f06730403050e03c303084a02010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e72730003000000c60100000400b7000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006173696e662e72730002000066616273662e727300020000737172742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050e03b97708120508920603533c0603369e06034a3c0403051d06030b08660402050d03353c0512750404051703173c0402052503440882051d0666051920051166050d2005120683050d066605050621051f032420051b06200516200511200509580505200508069f0405050e03b2032e06038b7c200402050c06033982051aa105250360f2051d0666051920051166050d2005120683050d0666050506210514031e200510063c0405050e0603b9033c06038b7c200402050c06032f900603513c05150603335805100658034d3c0405050e0603f5032006038b7c3c040205150603312005140608580405050e0603c4032e02010001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006173696e662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000066616273662e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e7273000100000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000010100000400be000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e727300010000636f70797369676e662e727300020000726f756e64662e7273000200007472756e63662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050b0398779005050674040105160603c409200403050c03b976200404051d3f0405050e03eb032002010001019b000000040095000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e727300010000636f70797369676e662e727300020000726f756e64662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003c000000040036000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800007472756e63662e72730001000000590200000400a9000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e727300010000666d6f642e7273000200006d6163726f732e7273000300006d6f642e7273000100006d6174682e7273000300000005160a000502ffffffff03ea080104020513039c77ac0512064a0508067906037490030cba03743c051006030d200403050e03e8039e06038b7c200402050806030fac06037182060317ac0603696605090603189e050f590603673c050d06031a9e75050f560511940509063c036358050c060310c80403050e03e5038206038b7c200402050906031fba9f0603603c0508060322c806035e3c050906032366050f5906035c3c050d0603259e75050f560511940509063c03585806032aba9f06035574050b06032f200404050503e208900402050c03a077c806034f3c05100603328206034e3c0518060333ac0403050e03c2032006038b7c20040205090603375875050b037720060351ba0404050506039109200402050803aa77ac0603453c050c06033c820603443c051406033dac0403050e03b8032006038b7c200402050b0603c100f20603bf7f3c05090603c300c8050bd4050975050b570603bf7f4a05080603c70008900603b97f3c05110603cb004a0509063c03b57f580603c800ba0510590509062003b77f3c05050603cd00200401051603ff08580403050e03a97a2002010001019b000000040095000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e727300010000666d6f642e72730002000075696e745f6d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000099000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e727300020000736469762e72730002000000000502ffffffff03f20301040205170a03a67c083c0403050103dc00ac0402051703a47f083c0403050103dc0008580690200401050e060380034a0403050103807dc80401050e038003d602010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000480200000400aa000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e727300010000666d6f64662e7273000200006d6163726f732e7273000300006d6f642e7273000100006d6174682e7273000300000005160a000502ffffffff03f1080104020513039677ac0512064a0508067906037390030d8203734a051006030e200403050e03e7039e06038b7c2004020508060311ac06036f8206031aac0603664a050906031b9e050f590603643c050d06031d9e75050f560511950509063c035f58050c060312900403050e03e3038206038b7c2004020509060323826706035c3c0508060327200603598205090603289e050f590603573c050d06032a9e75050f560511950509063c035258060330826706034f3c050b060335200404050503c408900402050c03be77c80603493c0518060339e40403050e03bc032006038b7c200402050906033d5876050b03762006034bba040405050603f908200402050803ca77ac0603bd7f3c05140603c500e40403050e03b0032006038b7c200402050b0603ca00ba0603b67f3c05090603cc00c8050b9c050975050b570603b67f4a05080603d000084a0603b07f3c05110603d4004a0509063c03ac7f580603d100820510590509062003ae7f3c05050603d600200401051603f808580403050e03a77a2002010001019c000000040096000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e727300010000666d6f64662e72730002000075696e745f6d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000006d030000040003010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e72730002000074616e2e7273000300006b5f74616e2e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03f80408c80403050e03c3770812050808140603503c06033f9e051741050a06c8051174050d74040205160603a708580404050f03d577f20508bb0603bf7f66040305100603c0002006034090050c060331ac06034f3c0404050f0603c000c80508bb0603bf7f58050c0603c30090050db00509069e03b97f580403051c060334d6050006034c0858040505090603ac0c3c0603d473820404050c0603c3009e050dcc050c9a051a860509062003b97ff2050d0603ca00200309900529d7050d037720054408b2053c069e05382005309e052c2005249e05202005189e051420050d9e054a0608590541069e053d2005359e05312005299e052520051d9e05192005119e050d20051a06220516062005159e051120050d9e062f0508590603aa7f6605250603d900f2052d06083c052520052020051b200515200511580513069f0603a67f66040305000603c500580404050d410309900529d7050d037720054408ea053c069e05382005309e052c2005249e05202005189e051420050d9e054a0608590541069e053d2005359e05312005299e052520051d9e05192005119e050d20051a062205160620051520051120050d20062f0508596c0603a47f58050d0603e20090040205160389083c0404051403fd77ac0402051603e40820039f7f200404051403fd77ac0402051603e408200404051503987720050f06ba0511061d050d0674051f0623050e063c050a20050520039c7f74051d0603d8009e0517063c05115805250621052d06ac052558052020051b200515200511580513069f0603a67f4a0401050e0603f50320020e000101e30000000400dd000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e72730001000074616e2e7273000200006b5f74616e2e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000da040000040054010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e740073726300006633322e7273000100006269742e727300020000636d702e7273000300006d756c2e7273000400006d6f642e7273000100006d6f642e7273000400006d6f642e7273000500006d6163726f732e72730006000061726974682e7273000200000005160a000502ffffffff03f108010402052e03b9789e0401051603c7073c0402052e03b9789e053003c8013c052e03b87eac051103a10374052e03df7c4a051103a103022301052e03df7c4a0403053403c60a660404050803ba74580603552e032bc803553c0402052e0603ab01900403053403c80a900404050c03bf742006034e2e040305340603f30b08120404050c03c3742006034a2e040305340603990b820404050c03a175200603462e040305340603990b820404050c03ab7520030b2e5d0603ac7f58040305340603ed0bc8060393743c040505050603f9082e03d6793c03aa06ac0406051503ab78200603dc7e3c040305340603ed0b8204050505038c7d3c0404050d03ea775804050505039608d60406051503ab78200603dc7e3c040205110603d603580407051503f27e820402053503ce03820407051503b27c200405050503c906200407051503a0792004050505031e58065804070515060365900402052e03f77e900603d57e3c052d06038f024a0511038d05c80405050503b37b820603b17d580404051006033b200603454a0408050e0603f5035806038b7c20040405100603c500200603bb7f4a0408050e0603f5035806038b7c20040105160603ce09200408050e03a77a3c06038b7c20040505050603cf02660603b17d3c0404050806038701660603f97e3c06038b01660603f57e3c040205110603d6034a053603f90182053503c700200603ea7958040505050603f9083c0404050c039a78740402052d03fc003c04040529038b7f900402052d03f50020051103bd0220052d03c37d58051103df053c0603927890052d06038f02900401051603bf074a0408050e03a77a2006038b7c200402052d06038f02900401051603bf074a0408050e03a77a2006038b7c200402052d06038f02820401051603bf07200408050e03a77a2006038b7c200402052d06038f02820401051603bf07200408050e03a77a2006038b7c200402052d06038f02900401051603bf07200408050e03a77a2006038b7c20040105160603ce09200408050e03a77a3c06038b7c200402053506039606200403053403dd0508120404050803bd75200603d07e2e040905330603f7054a0401051603d703200408050e03a77a2006038b7c20040305340603990bac04040508039b76200603cc7e2e0402052e0603ab01660409053303cc04200603897a3c040105160603ce09200408050e03a77a3c02010001017d010000040077010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f696e7400006633322e7273000100006d6f642e7273000200006d756c2e7273000200006d6163726f732e7273000300006269742e727300040000636d702e7273000500006d6f642e72730006000075696e745f6d6163726f732e727300010000696e745f6d6163726f732e72730001000061726974682e7273000400006636342e7273000100000096000000040090000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e7273000100006d6f642e727300020000696e745f6d6163726f732e727300010000008e0100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03947c9005133f06037674040305150603b4024a04040505039406580620040305150603e97990040405050397063c0405052d03c779740403050103cd003c0404050503ec05200403050103947a900515035e200603c67d3c0401050e0603f5032006038b7c3c040405050603c808740403051503867a4a0401050e03a701200201000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300006269742e727300040000006c0100000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000063627274662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402051703b177e405089206035b3c06032b0812050c3e06035358050e060330740401051603c208200402050903bf779006034fac050e0603c00020050503760820050006034a5805050603374a04010516039709200402050503f0762005092105050658050d063d0509063c052a3c05297405052005090626050506ac050d06210509063c052a2005297405052006230403050e03ab032006038b7c200402051006032720060359740403050e0603f5032002030001019b000000040095000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000063627274662e7273000200006d6163726f732e727300030000009f01000004002d010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006d6f642e7273000100006d6163726f732e7273000200006269742e7273000300006164647375622e727300040000636d702e7273000500006d6f642e7273000400000005050a000502ffffffff039009010402050e03e47a740403052203c87cac0401050503d40820063c040405150603fb763c04010505038509200620040405180603f676580402050e03ee032e0405053403f807ac06200404050f0603cc74f20402050e03bc032002040001013b010000040035010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e7273000300006269742e727300040000636d702e7273000500000061000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f203010402050d0a03ce7c083c0401050e03b40308f202160001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000c90100000400f8000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e72730002000074616e682e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03d9050890039f7f580403050503a777085805093f05050620050806920603693c050f0603218206035f3c060325820515430404050903800c820603d4738204030513060327ba050d06200667051206d6050920035858050c060319ac0603673c051706031e082005110658051d06e505170620050d20036158051706031c9e050d06ba036458051306032320050d0658051106082f05090620035c3c0401050e0603f503200403050803bb7cac0401050e03c503ac0201000101d80000000400d2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e72730001000074616e682e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000090100000400a4000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000636f6e762e7273000100006d6f642e7273000200006633322e7273000200006d6163726f732e727300030000696e745f6d6163726f732e72730002000000050c0a000502ffffffff1a06037782040205050603cf02c803aa067404010511039477580509da051163051c7505260658051b2005162005153c0509062206036f9e05180603ee00ac210403051603df08200404050e03a77a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000008b000000040085000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000696e745f6d6163726f732e7273000200006633322e727300020000003a01000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e727300010000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03cb00010603b47f7405110603ca004a050f920603b47f085803cc0082040205120603e406ac04010531039d7974050d06ba040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a050f0673050d92050f1e0603b47fba03cc0066053106c9050d0690050f06730403050e03c303084a02010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e72730003000000c20100000400f9000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006633322e72730002000074616e68662e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03db05087403a47f580403050503967708120511940603743c050f0603158206036b3c0603199005154204040509038d0c9e0603d473820403051806031b820511062005090667050e069e050920036458050c06030eac0603723c051c0603129e05150658051706ad05120620050d20036d58051206031066050d068203705805180603172005110658050d06e50509062003683c0401050e0603f503200403050803ad7cac0401050e03d303ac0201000101d90000000400d3000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006633322e72730001000074616e68662e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002303000004000f010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e72730002000073696e2e7273000300006b5f636f732e7273000300006b5f73696e2e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03f80408580403050e03c577900508081506034d3c0603c2000820051741051106c8050d74050a74050b06750603b87f7405100603c300200603bd7f900404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e062305260620051d580509200505200403050e06030f200603b47f580405050d0603302093052cda051406d6050d06037a20052691053406ba052e9e052620051cd605169e051220050d9e051e063305130620050f20050e20050d3c0509200349580404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e062305260620051d580509200505200343580405050d0603302093052cda051406d6050d06037a20052691053406ba052e9e052620051cd605169e051220050d9e051e063305130620050f20050e20050d3c0509200403050e060314200603b57f58050c060334ac0405050d385b56052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b74040305100603379e0603493c051d06033ac80406050903f20b4a0603d473820403051d060338d60406050903f40b4a0603d473660401050e0603f50320020e000101ef0000000400e9000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e72730001000073696e2e7273000200006b5f636f732e7273000200006b5f73696e2e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000005e0100000400af000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e72730001000073696e68662e7273000200006633322e7273000300006b5f6578706f32662e7273000200006d6174682e72730001000000000502ffffffff03f20301040205080a03957c9e0403051603c6095803a47f5804020505039a77ac0508950505030c3c0404050a0370ba05050620040206031008200401050e03d8032006038b7c200402051106031220050c083d06036d3c051d060319c8051906200514200510200401050e0603dc032006038b7c2004020510060314ac05193f05220674052aba05222005182005142003693c0401050e0603f5032002030001018a000000040084000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000073696e68662e7273000100006633322e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003e000000040038000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800006b5f6578706f32662e727300010000007501000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f61740073726300006636342e7273000100006269742e727300020000636d702e727300030000636d702e7273000400006d6163726f732e7273000500006d6f642e7273000400000005160a000502ffffffff03ea08010402052e03c078d60403053403c80aba0401051603f87c200402052e03c078d60404050503b77fba0405050e0393032e02010001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006636342e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e72730005000000ed01000004002c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400006d6163726f732e7273000100006633322e7273000200006269742e727300030000636d702e727300040000636d702e7273000500006d6f642e72730005000000000502ffffffff03f20301040205160a03ff04740403052e03b978c80404053403c80a900405050803bf7420050006034e2e05080332083c0403052d0603dd013c0405050803a87e740603492e0401050e0603f5032e06038b7c200403052e0603ab01580404053403c60aac0405050803cf74200404053403b30b2e0405050f03d974580603b47f4a040405340603ed0b200405050c03d474580603bf7f2e040405340603990b200603e774740401050e0603f5032002030001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006633322e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e7273000500000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000076000000040053000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680073726300007467616d6d61662e7273000100006d6163726f732e7273000200006d6174682e72730002000000050c0a000502ffffffff160505063c0402050e0603f0037402010001013d000000040037000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800007467616d6d61662e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000c30200000400b6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006d6163726f732e7273000100006636342e727300020000636f732e7273000300006b5f636f732e7273000300006b5f73696e2e7273000300006d6174682e72730001000000000502ffffffff03f20301040205160a03f80408900403050e03c377082e0508081506034f3c06033d82051741051106c8050d74050a74050b06750603bd7f74050c060332025c0106034e2e0332082e034e3c0404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200343580403051006033e20060342900405050d0603302093052cda051406d6050d06037a20052691053406ba052e9e052620051cd605169e051220050d9e051e063305130620050f20050e20050d3c0509200349580404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e062305260620051d580509200505200343580405050d0603302093052cda051406d6050d06037a20052691053406ba052e9e052620051cd605169e051220050d9e051e063305130620050f20050e20050d3c0509200403050e06030e200603bb7f580404050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e062305260620051d580509200505200403050e060309200603ba7f3c04010603f50320020e000101a000000004009a000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e727300010000636f732e7273000200006b5f636f732e7273000200006b5f73696e2e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000070100000400a4000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000636f6e762e7273000100006d6f642e7273000200006636342e7273000200006d6163726f732e727300030000696e745f6d6163726f732e72730002000000050c0a000502ffffffff03140106036b82040205050603cf02f203aa06740401051103a1773c05096705111e051f0674051120050906300603653c05190603f4007405180620064b0403051603d708200404050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000008b000000040085000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000696e745f6d6163726f732e7273000200006636342e72730002000000c301000004009a000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e7273000100006d75745f7074722e727300020000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050c0a000502ffffffff03d700010513030aac06039e7f5803e2004a039e7ff203e2004a040205120603b307740403039b7f740401053503b3797405110658040305120603cd06740401053503b379580511064a040305120603cd06740401053503b379580511064a040305120603cd06740401053503b379580511064a069105131e053508910511069005130673050c0376084a0513310603a57f5803db009e03a57f6603db004a040305120603d506d60401053503ad79740511068206730513730603a57fd603db004a040305120603d5069e0401053503ad79ba051106c8040305120603d306740401053503ad79580511064a040305120603d306740401053503ad79580511064a05353c051174067305131f0404050e03b403660201000101a000000004009a000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e7273000200006d75745f7074722e727300030000636f6e73745f7074722e727300030000003a01000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e727300010000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03cb00010603b47f7405110603ca004a050f920603b47f085803cc0082040205120603e406ac04010531039d7974050d06ba040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a040205120603e3067404010531039d7958050d064a050f0673050d92050f1e0603b47fba03cc0066053106c9050d0690050f06730403050e03c303084a02010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e7273000300000093000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e72730002000000050f0a000502ffffffff03fd00010603827f7405110603f100083c050f030d900603827f085803fe0082050d06ad050f025411050d92050f1e0603827fba03fe0066050d064b050fc70402050e039103d602010001013d000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e7273000200000061000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f20301040205090a03b17c083c0401050e03d103082e020e0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000035080000040081010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006d6163726f732e7273000100006633322e727300020000706f77662e72730003000066616273662e727300030000636f6e73745f7074722e72730004000073717274662e7273000300007363616c626e662e7273000300006d6174682e7273000100006d6f642e7273000300006d6f642e727300050000696e6465782e72730005000000000502ffffffff03f20301040205160a03ff04d60403050803e077083c0603ae7f2e03d200ba03ae7f580603dc0008660603a47f3c03dc008203a47f3c0603e6004a06039a7f3c050c0603e700ba0603997f3c05130603e900820603977f3c05170603eb00c805104b0603947f9e051e0603ed00660511062003937f5805100603dd00200401050e0398035806038b7c20040305080603f300082006038d7f3c03f30082038d7f3c050c0603f5008206038b7f3c05130603f8009e0603887f3c05170603fd00c80401050e03f8022006038b7c20040305140603fa00c80401050e03fb022006038b7c200403051306038201580603fe7e3c0401050e0603f5032e06038b7c200403050806038501c80603fb7e3c038501820510063e0401050e03ee025806038b7c200403050b06038c01580603f47e3c0404051d06030b200403050803890108820603ec7ed6050c06039701660508034f0812050c0336200603e47e2e051106039d019e051006200515063d051106580401050e0603d7025806038b7c20040305080603e600ba03c100200603d97e2e051706039f0108120401050e03d6022e06038b7c20040305140603aa01200401050e03cb029e06038b7c20040305080603b401082e0603cc7e3c050c0603da01740509085e92050e710509069e050c06f606039d7e3c05130603e6019006039a7e3c050d0603ec01e4730603957e3c040505120603b007580620040305270603de7a900405051203a20582040303c17a900402051603dd073c0403051303a478580509063c061f0510cf050f067405370659051e0620040205160603d507820403050903a578200402051603ff06740403051e038479660402051603d807200403051903ad78200514063c061f05090674052606210513063c0509200625050fd705141e050e06740509061e050d59054906083c054366053e20053866053320052d66052820052266051d200517660509200621220402051603f1063c0403051e0391794a0402051603cb07200403050d03b978200514d30513062005093c0519062305090620061f930402051603e9063c0403051e0399794a0402051603c307200403051303be782005090658051c0668050f068205092e040505120603a205200403051d03e17aac0509d2050f24050e063c0509061f3d0402051603e1063c0403051d03a1794a0402051603bb0720040303c678200515065805143c05093c03ec7d58050c0603b701ac0603c97e3c0603bf019e0603c17e3c05090603c90174050d851e053406082e052266051e20051720050920051b06680509062006b9220402051603a5073c0403051d03dd784a0402051603ff072004030512038278200509065803b07e5805170603c001740603c07e3c05110603c301740401050e03b2027406038b7c20040305110603c101820401050e03b4027406038b7c20040305170603b801740603c87e3c05110603bb01740401050e03ba027406038b7c20040305110603b901820603c77e900401050e0603f5032006038b7c3c0403052806038201660401050e03f3023c06038b7c2004060517060317200401050e03de033c06038b7c200403051906039902f20402051603b507200403050503cd7820051b3b050b067405058206220402051603d6063c0403050803ac79ac0603e27d3c050f0603a102820603df7d3c050c0603a3027405180620050c5803dd7d4a05140603a402740401050e03d1017406038b7c20040305100603a002820401050e03d5017406038b7c200403050f0603a602c80603da7dba0603aa02820603d67d3c03aa027403d67d4a05100603ae02740401050e03c7017406038b7c20040305100603a902820401050e03cc017406038b7c20040305080603b702c80603c97d3c05200603b902e40509062e050e06a1050d0666053082050c06c90509fd052721051c062004020516060393073c0403050903f278200505220402051603b0063c06038e773c0403050a0603ce0274051803767404020516038a07200403050503f7788205239f0510062005097405057406213e0536089105300666052c20052666052220051c66051820051266050e20050520050906210514069e050920050d061d05050674052606230521067405052006210402051603a606740403050503dc793c0508830402051603ff063c04030505038779580401050e03a0012006038b7c200407050806dd0603793c050f0603115806036f3c050906031274050c8406036c3c0509060828050c840603763c050d06031508200510ca0603699e050d06030b820510ca06037382051806031c900402051603b209820407050503ce7620040303b902200401050e03a00120020100010149010000040043010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006633322e727300010000706f77662e727300020000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400007363616c626e662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000066616273662e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000073717274662e7273000100000041000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000005110a000502ffffffff03f30301050e9f0201000101610100000400ab000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e72730001000073696e682e7273000200006636342e7273000300006578706f322e7273000200006d6174682e72730001000000000502ffffffff03f20301040205080a03a27cd60403051603b70958039f7f580402050503ae77f205093f0505062005080693050903103c0404035ef205050620040206032208900401050e03c6032006038b7c200402050d06032020050c083d06035f3c051d06032a0812051906200514200510200401050e0603cb032006038b7c2004020510060322ac05194105230674052bf205232005182005142003593c0401050e0603f50320020300010189000000040083000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000073696e682e7273000100006636342e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800006578706f322e727300010000005203000004007c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006d6163726f732e7273000100006636342e727300020000657870322e7273000300006d6f642e7273000400006d6f642e727300020000636f6e73745f7074722e7273000400007363616c626e2e7273000300006d6174682e7273000100006d6f642e7273000300006d6f642e727300050000696e6465782e72730005000000000502ffffffff03f20301040205160a03f80408580403050e03ed79ac0508f30603a77d3c050f0603ef02820603917d3c05100603f102ac0401050e0384012006038b7c200403050c0603db029e0603a57d2e03db028203a57d3c0603e102c806039f7d3c0603e5025806039b7d4a05140603e3029e0401050e0392013c06038b7c20040305100603e802d60603987d4a051d0603e902ac0404050903c309740401050e03c977e406038b7c20040305200603e802ba0603987df2051d0603e902ac0404050903c309740603d473820403050d0603de02ba0401050e0397012006038b7c200403051b0603f502ba0402051603f6052004030512038b7a3c040505050383064a0406051203b77e580403051c03cf7bd6050e08380511210406051203b404900403051903d07b200505063c05110621053d06083c05379e053320052d9e05292005239e051f2005199e051120050d20050e060378740407050803907d08120603773c050f0603136606036d3c0509060316ac050c920603683c050906030a0858050c920603743c050d06031908580510ca0603659e050d06030dba0510ca0603718205190603208205180620040205160603ac094a0407050503d476200401050e03d5032002010001016401000004005e010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006636342e727300010000657870322e7273000200006d6f642e72730003000075696e745f6d6163726f732e727300010000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400007363616c626e2e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000074020000040073010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e740073726300006633322e7273000100006269742e7273000200006d6f642e727300010000636d702e727300030000657874656e642e7273000400006d6f642e72730005000061726974682e7273000200006636342e7273000100006d6163726f732e7273000600006d6f642e72730004000075696e745f6d6163726f732e7273000100000005160a000502ffffffff03f108010402052e03b978e40403050503ce07820404053403f402740405050803b9742006035a2e040405340603f10bba0405050f03bd7420030b2e0603474a0402053506039606740603ea790858040605430603f00220040305050389063c0405052b03c777740403050503d108200402053003e279ac0405052003cc7d4a0406054303b1023c0403050503a1063c0402052d03fe78200603f17d58040605430603f002200403050503a106580407053303e67cac0603897a3c0402052e0603ab01ac0406054303c501200403050503a1063c0402052d03fe78200408051603bd07200409050e03a97a2002010001016f010000040069010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006633322e7273000100006d6f642e727300020000657874656e642e7273000200006d6163726f732e7273000300006269742e72730004000075696e745f6d6163726f732e7273000100006d6f642e727300050000636d702e72730006000061726974682e7273000400006636342e727300010000008300000004007d000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e74000075696e745f6d6163726f732e7273000100006d6f642e727300020000002501000004009f000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000666d61662e7273000100006636342e7273000200006d6163726f732e7273000300006d6174682e72730003000000050a0a000502ffffffff0336010515065805053c0513062105050658040205160603b3083c0401050803d177ac0603449e033c0882050a06420603be7fba03c2005803be7f5805120603de0058051906f2050f068f0519210512063c050f06a30508064a040205160603e9084a0603b4763c0403050e0603f5034a02010001019a000000040094000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000666d61662e7273000100006d6163726f732e7273000200006636342e727300030000008e000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03b57d08740403050d03997f023e010402050103e70008820401050e03cd02f20402050103b37dc80401050e03cd0290020f0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000001b0100000400a5000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006633322e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a03b60508580403051403917708580402050503ef08660401050e03cc7a08740403051403c57c08660511c5300525c705240620051182051c069105260658051b2005162005153c0509062204040516039309200401050e03a77a20020100010186000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006633322e7273000200000087000000040043000000010101fb0e0d0001010101000000010000017372632f6d656d007372630000696d706c732e7273000100006d6163726f732e7273000200006d6f642e72730001000000050b0a000502ffffffff039d02010603e27d900402050e06039b032e0603e57c200401050b06039e02580509083d050b570402050e03fd00820203000101410100000400eb000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e7400006d6163726f732e7273000100006d6f642e727300020000706f772e72730003000061726974682e7273000400006d6f642e72730005000000000502ffffffff03f20301040205050a03dc7e083c0403050c03bc7daca20404053303e5063c0403050c039779083c94050973050c3d0508b205110372900508030e200401050e03e003200201000101f80000000400f2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e74007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f70730000696e745f6d6163726f732e7273000100006d6f642e727300020000706f772e7273000300006d6163726f732e72730004000061726974682e727300050000003a0200000400ad000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006174616e32662e7273000100006d6163726f732e7273000200006633322e72730003000066616273662e7273000100006d6174682e7273000200000005080a000502ffffffff031c010510e50402050e03d7035806038b7c20040305160603f208200401050803b177c805103e0402050e03d0038206038b7c2004010521060327580520063c040305160603cb08200401050e03b57790050d062005050608840508230603544a060334088206034c58033482034c3c0513060339820603473c050d06033aba0603462e033a4a0402050e0603bb03ac06038b7c2003f5033c038b7c2003f50366038b7c2004010510060335660402050e03c0033c06038b7c20040105080603ca00d60603b67f2e050003ca008205082003b67f5805100603cb00660402050e03aa033c06038b7c20040105100603cf00200603b17f9003cf00f203b17f5805150603d300200404051d03b87f580401050903c800200603ad7f82050e0603d90008660402039c037406038b7c2004010603d700200402039e033c06038b7c20040105130603d800c8050e0620040206039d032006038b7c200401050d0603c100c80603bf7f2e03c1004a03bf7fc80402050e0603f5032002030001018b000000040085000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006174616e32662e7273000100006633322e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000066616273662e72730001000000fe0000000400bb000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e727300010000636f70797369676e2e727300020000726f756e642e7273000200007472756e632e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402050b039f77d6050506ac040105160603c209200403050b03bb76200404051d3f0405050e03eb0320020100010199000000040093000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e727300010000636f70797369676e2e727300020000726f756e642e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800007472756e632e7273000100000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000a1010000040006010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e727300020000636f73682e7273000300006b5f6578706f322e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03d9050874039f7f580403050503a37708200508cd06036d3c06031ee40603623c0404050906030dac05050620037308c80403051106031f20051b08300516063c05109e035f58050c060314e4051141051583052306f2051d2005155805109e0366580519060316d60405050903960c4a0603d47308120401050e0603f50320020e000101d80000000400d2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e727300010000636f73682e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003d000000040037000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800006b5f6578706f322e7273000100000079000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f20301040205170a03bf7c083c0510082f0401050006034d740402050d0603347406034c3c0401050e0603f50320020e0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000cf000000040093000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263007372632f696e7400006d6f642e7273000100006d6163726f732e7273000200006164647375622e7273000300006d6f642e7273000300000005050a000502ffffffff039009010402050e03e47a7404010505039c05580674040305180603f676580402050e03ee032e0204000101a100000004009b000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e7273000300000077000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f203010402051b0a03e87c083c051408f30603a47f7405110603dd0008120603a37f9e0401050e0603f50320021a0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000095000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03ae7d08900690200403051b0603ba7f0234010402050103c600022a010401050e03d402023c010402050103ac7d740401050e03d40282020f0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000ac040000040054010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e7400006d6163726f732e7273000100006636342e7273000200006269742e727300030000636d702e7273000400006d756c2e7273000500006d6f642e7273000200006d6f642e7273000500006d6f642e72730006000061726974682e72730003000000000502ffffffff03f20301040205160a03f80408ac0403052e03c078d60402051603c0073c0403052e03c078d6053003c8013c052e03b87ef2051103a10374052e03df7c4a051103a103022501052e03df7c4a0404053403c60a660405050803ba74580603552e032bc803553c0403052e0603ab01d60404053403c80ad60405050c03bf742006034e2e040405340603f30b089e0405050c03c3742006034a2e040405340603990bc80405050c03a175200603462e040405340603990bc80405050c03ab752005000603bc7f2e050c0603cf003c0404053403ca0a2e0405050c03bb753c0603ac7f2e040405340603ed0b08120406050503a47d3c0368900407051503ab78200406050503ed075803be793c0603b17d3c040405340603ed0bba0406050503a47d3c0368900407051503ab78200406050503ed073c0405050d03d2775806039d7f66040305110603d60374053503c0020890040605050393033c0408053e03c77966063c0406050506035f3c06200603da06580403052e03827808900404053403f009200603e5744a0403052d06038f024a0511038d05c80406050503b37b820603b17d580404053406039b0b200405051003a0753c0603453c0603c50008120603bb7f3c040205160603cc09d60603b47674040605050603cf02660603b17d3c0405050806038701660603f97e3c06038b01660408054303e5013c0403051103e60058053603f901ba053503c700200603ea795804060505060391093c0405050c038278740403052d03fc003c04050529038b7f900403051103bc0220052d03b97e20051103bd0220052d03c37d82051103df053c0603927890052d06038f02d60402051603bd074a0603b476580403052d06038f02d60402051603bd074a0603b476580403052d06038f02ba0402051603bd07200603b476580403052d06038f02ba0402051603bd07200603b476580403052d06038f02d60402051603bd07200603b4765803cc092003b476740403053506039606200404053403dd0508580405050803bd75200603d07e2e040905330603f7054a0402051603d503200603b47658040405340603990bf204050508039b76200603cc7e2e0403052e0603ab01660409053303cc04200603897a3c040205160603cc09200603b476580401050e0603f50320020e0001017501000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f61740073726300006633322e7273000100006269742e727300020000636d702e727300030000636d702e7273000400006d6163726f732e7273000500006d6f642e7273000400000005160a000502ffffffff03f108010402052e03b978900403053403c80a740401051603ff7c200402052e03b978900404050503b77f740405050e0393032e02010001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006633322e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e727300050000008e0100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03c37c9005133e06034874040305150603b4024a04040505039406740620040305010603947a580404050503ec05580403051503e979c804040505039706200405052d03c7793c0403050103cd00580515035e200603c67d3c0401050e0603f5032006038b7c3c040305150603b4025804040505039406580401050e03ad7b2e0201000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300006269742e727300040000009c0200000400f9000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006636342e7273000200006c6f6731702e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03f804083c0403050a03ea777405050620050806085a0603a97f2e03d7008203a97f3c050c0603d900900603a77f3c0603e0004a0603a07f9e05100603e3008206039d7f4a0401050e0603f5032e06038b7c200403050f0603ee00900603927f3c0401050e0603f5032e06038b7c200403050c0603e800083c050803092006038f7f2e050e0603f20008820402051603f907200403050e03887874050906200659050d590509064a050c06087605143d050d0228170603837f58050e060382017405090674050e0621052206ba050920040205160603c908200403050903b8779e050503093c0603f37e74051d0603e400200404050903c80b820401050e03c9778206038b7c20040305100603db00088205143f0603a27f08120401050e0603f5032006038b7c3c0403053506038e01ba051706d6051620050d060379f205050620050c06f1050506200622750520083d0519069e051520050e9e050520052b0608210524069e05202005199e051520050e9e0505200621050922050506200401050e0603e702740201000101d90000000400d3000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006636342e7273000100006c6f6731702e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000008c000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e727300020000736469762e72730002000000000502ffffffff03f20301040205090a03997c083c0403050c03fa00accb0402050903837f740401050e03e903c80403050c03987dc80401050e03e802d602010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003c0200000400d8000000010101fb0e0d000101010100000001000001737263007372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400006d6163726f732e72730001000062696e6172795f6c6f6e672e7273000200006d6f642e7273000300006e6f726d5f73686966742e727300020000756469762e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f20301040205100a03aa7c7406036390040305050603f9082e063c040405170603c7773c051e2205180674040205200603d2024a560403050503e7057404020510039c7a3c0603eb7c7406039903820603e77c3c051106039b03c8051b210511c60403050503df05200402051403a67a74f60603dd7c740603ae03820603d27c8203ae03e403d27c5803ae03ac03d27c3c040305050603f908660620040205280603be7af20403050503c205200402051403b57a740603d27c9e03ae035803d27c3c040305050603f9089e0620040205280603be7af20403050503c20520063c20040205280603be7af20403050503c20520063c20040205280603be7af20403050503c20520063c20040205280603be7af20403050503c205200402051103b87a7405141d0603d27c4a05290603ba032e0515067403c67c9e0405051006031a20050d75060365740401050e0603f503200203000101b00000000400aa000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000062696e6172795f6c6f6e672e72730001000075696e745f6d6163726f732e7273000200006e6f726d5f73686966742e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000d9040000040022010000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e72730001000073696e662e7273000200006633322e72730003000072656d5f70696f32662e7273000200006b5f636f73662e7273000200006b5f73696e662e7273000200006d6f642e7273000400006d6174682e7273000100006d6f642e72730002000000000502ffffffff03f203010402050f0a03aa7c08c80403051603d508580402050503b177e405089206035b3c0603339e06034d3c0603c3009e0603bd7f3c0603d10008200603af7f3c0404051c0603274a0508e80603553c051306032eac08410511bb06034c08c8033420034c82033408120523022512051d200532ba051d20034c58050f06033c90050e064a05210659051c06200403051606039109200404050503ef7620050d83040205100364086604040508031d200509310603be7f9005110603c0003c0516065805155803403c0402050b0603d700580603a97f7405100603d200200603ae7f900405050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402050e06033f2e0603a57f580406050d06031920773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660405050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660406050d060319200402051503c100580406050d0342581e0520770512b8050d069e05200622051506d6050f9e050b2005062005053c0363660402050c0603c500ac0603bb7f3c05100603220858051a032b200406050d034c4a773a0520770512b8050d069e05200622051506f2050f9e050b2005062005052003636604020510060322740325200603b97f2e05200603ca00ac0405050d034f20050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402051806032e2e0603b67f58051f0603c800ba0405050d035120050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660402050c060335ac06034b3c05100603220858051a031b200406050d035c4a0402051a0324580406050d035f581e0520770512b8050d069e05200622051506d6050f9e050b2005062005053c03636604020510060322740315200603492e051f06033aac0405050d035f20050ef50507069e050d061e0518f405060620052220051206f1050d069e052206210505062003646604020520060338ba0405050d036120050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402051806031c2e06034858050c060327ac0406050d03723c5b560520770512b8050d069e05200622051506d6050f9e050b2005062005053c0363660402051c06032a9e05000603560820040705090603ac0c3c0603d473660401050e0603f50320020e000101f20000000400ec000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472000073696e662e7273000100006633322e7273000200006b5f636f73662e7273000100006b5f73696e662e7273000100006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000008e000000040088000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000072656d5f70696f32662e7273000100006633322e72730002000000590200000400fa000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006633322e7273000200006c6f673170662e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03ff04f20403050803b87708660603563c050c06032c820603543c0603334a06034d9e05100603368206034a4a0401050e0603f5032e06038b7c200403050f0603c100900603bf7f3c0401050e0603f5032e06038b7c200403050c06033bf205080309200603bc7f2e050e0603c50008120402051603ad08200403050903d57782050d590509064a050c06083e05143d050d08e90603b07f58050e0603d5008205090674040205160603f908200403050903897766050503093c0603a07f74051d060337200404050903f50b9e0401050e03c9778206038b7c200403051006032e081205143f06034fc80401050e0603f5032006038b7c3c040305350603e100820517069e051620050d060378ba05050620050c06c005050620061b750515d8050e06660505200515069d050e06660505200622050923050506200401050e06039403740201000101da0000000400d4000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006633322e7273000100006c6f673170662e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000ad010000040004010000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e727300040000696e745f6d6163726f732e72730003000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03aa7c9005134206035d74040305150603b4024a04040505031b2e04030501030d5804040505039d068203d6793c040305150362200404050503c8063c0405052d0396793c0403050103cd00200515035e200603c67d3c0401050e0603f5032006038b7c3c040305010603dc025805150358ba04040505031b2e04030501030d3c0515035e200401050e03bb01200201000101000100000400fa000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e727300010000696e745f6d6163726f732e72730003000075696e745f6d6163726f732e7273000300006269742e72730004000000db010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d756c2e7273000200006d6f642e7273000200006d6f642e72730003000000000502ffffffff03f20301040205100a03cf7c740603be7f6605090603f2004a0401050e0383035806038b7c20040205100603c200580603be7f740603cb0066051b930510037a08120403050d03db00c80402050903807f2006035d2e0403050d0603a301820402050903807f200404050503d6082e06038777c8040305150603c802740404050503b106200402050006038777900404050503f90820040305150603d579740404050503ab06200402051703b777c8060350580403050d0603a301900402050903807f2006035d2e040305150603c802660404050503b106200402050006038777900404050503f90820040305150603d579740404050503ab06200402051703b177c806035658040405050603f9082006038777ac040205100603d3003c051b8b051025230603aa7fc805090603f200200401050e0383037402030001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d756c2e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e727300030000000b0100000400a4000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000636f6e762e7273000100006d6f642e7273000200006636342e7273000200006d6163726f732e727300030000696e745f6d6163726f732e72730002000000050c0a000502ffffffff0328010603579e040205050603e602c803ab067404010511039c77580509da051163051c7505260658051b2005162005153c0509062206034fe4051806038001f2210403051603cb08200404050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000008b000000040085000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e727300010000696e745f6d6163726f732e7273000200006636342e7273000200000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000080200000400d8000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263007372632f696e74000062696e6172795f6c6f6e672e7273000100006d6f642e7273000200006e6f726d5f73686966742e7273000100006d6163726f732e727300030000756469762e72730004000075696e745f6d6163726f732e7273000200000005100a000502ffffffff031c010402050503dc08900674040305170603c7773c051e2205180674040105200603d0024a0402050503e7053c04010510039c7a3c0603eb7c7406039903660603e77c3c051106039a03820402050503df05200401051403a67a90320603dd7c740603ae03820603d27c7403ae038203d27c5803ae03ac03d27c3c040205050603f908660620040105280603be7af20402050503c205200401051403b57a740603d27cd6040205050603f908660620040105280603be7af20402050503c20520063c20040105280603be7af20402050503c20520063c20040105280603be7af20402050503c20520063c20040105280603be7af20402050503c205200401051103b87a7405141d0529030c660603c67c740404050e0603f503200203000101b00000000400aa000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000062696e6172795f6c6f6e672e72730001000075696e745f6d6163726f732e7273000200006e6f726d5f73686966742e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000041000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000005110a000502ffffffff03f30301050e9f0201000101390100000400e2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e7400006d6f642e7273000100006d6163726f732e7273000200006269742e7273000300006164647375622e7273000400006d6f642e7273000400000005050a000502ffffffff039009010402050e03e47a740403052203c87cac0401050503d40820063c040405150603fb763c04010505038509200620040405180603f676580402050e03ee032e0204000101f00000000400ea000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e7273000300006269742e72730004000000f70500000400c7000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006c67616d6d615f722e7273000200006d6174682e7273000300006d6163726f732e727300030000666c6f6f722e7273000200006b5f73696e2e7273000200006b5f636f732e7273000200000005160a000502ffffffff03ea08010402050b03d278c8050a0620050574050806910603c27e3c0603c101ba0603bf7e3c05050603bc014a0508030d200603b77e2e05050603bc0108ac050c270403050903a67f3c0402050c03da0082051240051106660404050e0603ae022006038b7c200402051006039801ba0405051d03f87e200402050f0388015805050620050906f4050506ba03e67e08c8039a012003e67e82039a01082e050e0608750509063c050a0621050506c8069f08140603e17e740406050d06033020933a052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b580407050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200343580406050d060330200402051403f100580406050d03927f581e052691053406ba052e9e052620051cd605169e051220050d9e051706310511069e050d20050920034b740407050d0603389e050ef5050d21050bd7050a063c0521060839051b069e05172005119e050d20061f052c590544060820053e9e053a2005349e052c20050d20051e0623052606ba051d200509200505200402050e0603e500200603de7e3c050c0603cc01d60603b47e3c0603d001e4051908950514063c05102003ab7e9e051b0603ce019e0515065803b27e5805110603bf01200603c17e74040305090603e900580404050e038c033c06038b7c3c040205090603db01e40603a57e3c03db018203a57e3c053203db012003a57e58050d0603df0108740603a17e3c050f06039702d605000603e97d3c050f0603b10208200603cf7d3c05110603ba02c80509062003c67d5806039902ba0603e77d08c80399022003e77d82039902082e05110608590509063c050d06bd054908720543069e053f2005399e053520052f9e052b2005259e052120051b9e05172005119e0509200545060859053f069e053b2005359e053120052b9e05272005219e051d2005179e05132005099e0517062105090620050c060310740603d37d5805090603b4029e3d05440891053e069e053a2005349e053020052a9e05262005209e051c2005169e05122005099e050d06bb051906ba050d2005092003c97d5805120603ae02d6050c0846081d037a022901cb081523050d24051221050d066603d17d58050c0603e001084a0603a07e3c05100603ef01820603917e3c05120603e2010882050d0682051006085906039d7e3c05170603e6018206039a7e3c0603f301088206038d7e3c05110603f801ac0603887ed6054806038e0208740542069e053e2005389e053420052e9e052a2005249e052020051a9e051120054406083d053e069e053a2005349e053020052a9e05262005209e051c2005119e05210621051606ba05112e03f07d580603f501ba06038b7ed6060385022075053908750533069e052f2005299e052520051f9e051b2005119e05150623053a08b80533069e052f2005299e052520051f9e051b2005119e053a06083d0533069e052f2005299e052520051f9e051b2005119e052e062105280620052420051e200511200516069f0511062003f57d580603fe018205430891053d069e05392005339e052f2005299e052520051f9e051b2005119e05150622054808570542069e053e2005389e053420052e9e052a2005249e052020051a9e0511200621051abb0516062005112003fe7d3c040305090603e900200402050503d30008200508038001200404050e03b901200201000101a500000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006c67616d6d615f722e7273000200006b5f73696e2e7273000200006b5f636f732e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666c6f6f722e727300010000007f030000040007010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e7273000100006d6f642e727300020000636f6e73745f7074722e7273000300006d75745f7074722e727300030000696d706c732e7273000200006d6163726f732e72730004000075696e745f6d6163726f732e7273000100000005050a000502ffffffff03db09010402050c03c676c804030512038e0758040403e500740405050803b479c80603b77e3c040405120603e403ac0405052103e87d900404052203a507200405050f039178580603fe7e0812040405120603e403660405051503a17d20050d0674050f06710603fe7e9e05090603d0012e0517ae05000603ae7e20040305120603d503580405052003fe7dac0603ad7e4a050f0603aa014a0603d67e3c051f0603a101f2050f030958051dc40603da7e74040405120603e403660405051d03ca7d20051c7205445a051d0658050d0626050f0376740603d67eba06038f01660603f17ec8040405120603e403660405051b03ae7d20050d0674050f06710402050c03937fba0405050803c2009e06039c7f3c040105050603dc09ac04050521038b77580404051203ae07200405050f038b785806036074051506032182050d06900403051206038f0774040403e500740405050f038b7820050903cb00900517ae05000603937f20040305120603b007580405052003be79c8050c210603917f3c050f0603c8004a0603b87f3c051f06033ff2050f030958051dc47c051c8e05325a051d0658050d0625050f0377740404051203cd07740405050f03b37820050c032790050f03be7f660603533c051b06032e4a050d0690040405120603e7077406740405050f0603987820050903c900c80403051203ba063c0603d0787404050515060321c8050d06900403051206038f0774040403e500740405050f038b782003ef0090050903cc0066050f03a77f200603fe7e58038201085803fe7e3c040405120603e403660405051503a17d20050d0674050f06710406050e039902ba020300010150000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000380100000400b6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006633322e727300020000696e745f6d6163726f732e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a038a7f089003ac0608e40403051403917708200402050503ef08660401050e03cc7a08740403051403c57c08660511c5300525c705240620051182051c069105260658051b2005162005153c05090622051803cb0058910404051603c708200401050e03a77a2002010001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000696e745f6d6163726f732e7273000100006d6163726f732e7273000200006633322e7273000100000086000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000003801000004009a000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e7273000100006d75745f7074722e727300020000636f6e73745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03cb00010603b47f7403cc004a03b47ff203cc004a040205120603c907740403039b7f7404010531039d7974050d0658040305120603e3067404010531039d7958050d064a040305120603e3067404010531039d7958050d064a040305120603e3067404010531039d7958050d064a0691050f1e05310891050d0690050f06730404050e03c303084a0201000101a000000004009a000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e7273000200006d75745f7074722e727300030000636f6e73745f7074722e72730003000000f601000004002c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400006d6163726f732e7273000100006636342e7273000200006269742e727300030000636d702e727300040000636d702e7273000500006d6f642e72730005000000000502ffffffff03f20301040205160a03f804900403052e03c07808200404053403c80ad60405050803bf7420050006034e2e0508033208c80403052d0603dd013c04040534038a097404050508039e75200603493c0401050e0603f5032e06038b7c200403052e0603ab01200404053403c60aac0405050803cf74200404053403b30b2e0405050f03d974580603b47f4a040405340603ed0b200405050c03d474580603bf7f2e040405340603990b200603e774740401050e0603f5032002030001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006636342e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e72730005000000cc01000004008c000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006d6f642e727300020000636f6e73745f7074722e72730003000000000502ffffffff038c0401040205110a03ca7c74050c3d0513030aac06039e7f5803e20082039e7f085803e20082040305120603ce06ac0402053503b37974051106ba040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a0513067305119205131e06039e7fba03e20066053506c90511069005130673050c0376084a0513310603a57f5803db004a03a57fe403db004a05350608e605110690051306720603a57f087403db005803a57f3c03db006603a57ff2040305120603b007660402053503ad79580511064a040305120603d306740402053503ad79580511064a040305120603d306740402053503ad79580511064a05353c051174051306720511d705131f0401050e03b4036602010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e7273000300000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000410100000400eb000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e7400006d6163726f732e7273000100006d6f642e727300020000706f772e72730003000061726974682e7273000400006d6f642e72730005000000000502ffffffff03f20301040205050a03dc7e08740403050c03bc7daca20404053303e5063c0403050c039779087494050973050c3d0508ea05110372900508030e200401050e03e003200201000101f80000000400f2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e74007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f70730000696e745f6d6163726f732e7273000100006d6f642e727300020000706f772e7273000300006d6163726f732e72730004000061726974682e72730005000000bb000000040092000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f61740073726300006636342e7273000100007375622e7273000200006d6163726f732e7273000300006d6f642e7273000200000005160a000502ffffffff03cb09010402050903c176580403050e03e8036602010001018e000000040088000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f61740073726300006636342e7273000100006d6f642e7273000200006d6163726f732e7273000300000088000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03ab7d08c804030509038d7f083c0401050e03ca03c80402050103a97dc80690200401050e0603d7022002010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000560100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000300006269742e7273000400006d6f642e72730002000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03947cba05133f060376580403050506039109660620200603687403185806200404052d0603fe782e040305050382073c0603ef7690039109742003ef76820401050e0603f50320020f000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e72730002000075696e745f6d6163726f732e7273000300006d6f642e7273000100006269742e727300040000003c050000040066010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e740073726300006633322e7273000100006269742e727300020000636d702e7273000300006469762e7273000400006d6f642e7273000100006d6f642e72730004000061726974682e7273000200006d6f642e7273000500006d6163726f732e72730006000075696e745f6d6163726f732e7273000100000005160a000502ffffffff03f108010402052e03b9789e0401051603c7073c0402052e03b9789e053003c8013c052e03b87eac051103a10374052e03df7c4a051103a1030882052e03df7c4a0403053403c60a660404050803c874580603472e0339c803473c0402052e0603ab01900403053403c80a900404050c03cd74200603402e040305340603f30b08120404050c03d174200603bc7f2e040305340603990b820404050c03af75200603b87f2e040305340603990b820404050c03ba752032030b5806039e7f58040305340603ed0bc80404050c03fc74200603977f2e040505050603f9082e03d6793c03aa06ac0406051503ab78200603dc7e3c040305340603ed0b820404050c0382752004050505038a082e03d6793c0404050d03a27e7404050505038808900406051503ab78200603dc7e3c040505050603f9082006740402053506039d7d0890051103c07d580405050503a305200404051203c4793c05110666052106650540780517062005165805120671051106200521068105407805170620051658051206710511062005210681054078051706200516580407052d0603947f740408051503f400740402053503ce0382051103c07d580408051503f27e200405050503c9063c0408051503a3793c0403053403b909900404052f038077200603937d2e040205110603d6034a0398045804050505038b012006588203877758040205110603d603580405050503a3052006580603d679820603b17d740404050806039d03660603e37c3c05190603a403820603dc7c3c050c0603aa03660603d67c3c03aa0366040505050603cf05200404052903b47a740405050503cc053c0404050d03bb7a200405050503c505660603877758040105160603ce09200409050e03a77a3c06038b7c20040405100603a603580402052e03857e82053503eb04200511038601740603e4783c052e0603ab01740407053303cc04200403053403fc053c0404050c03cb773c0402052d03d17e200401051603bf073c0409050e03a77a2006038b7c20040305340603990b08200404051003b075200603b77f2e0402052d06038f02820401051603bf074a0603b2763c0409050e0603f5032006038b7c3c0402052d06038f02820401051603bf07200409050e03a77a2006038b7c200402052d06038f02820401051603bf07200409050e03a77a2006038b7c20040105160603ce09200409050e03a77a3c06038b7c20040405100603d800900409050e039d033c06038b7c200402052d06038f02900401051603bf07200409050e03a77a2006038b7c200402052d06038f02900401051603bf07200409050e03a77a2002010001017d010000040077010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f696e7400006633322e7273000100006d6f642e7273000200006469762e7273000200006d6163726f732e7273000300006269742e727300040000636d702e72730005000075696e745f6d6163726f732e7273000100006d6f642e72730006000061726974682e727300040000696e745f6d6163726f732e7273000100006636342e7273000100000096000000040090000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e7273000100006d6f642e727300020000696e745f6d6163726f732e7273000100000048030000040072010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e740073726300006636342e7273000100006269742e7273000200006d6f642e727300010000636d702e7273000300007472756e632e7273000400006d6f642e72730005000061726974682e7273000200006633322e7273000100006d6163726f732e7273000600006d6f642e72730004000075696e745f6d6163726f732e7273000100000005160a000502ffffffff03ea08010402052e03c07808900403050503e607c806d6040405340603dc02200405050803c5742006034e2e040405340603f30bc80405050f03cf74200603be7f2e040405340603f10b084a0405050f03d974200603b67f2e040205110603cc04ac0406053903a47e200405051503e27d3c050c5d0603a97f3c0402052e0603ab01ac052d03e4009e051103bd0220069e040605390603a47e200402052e03bb7eac0405052d03af7f740402051103fc02200404053403c5073c0405051d03bf75200402052e03d100200404053403c80a900405051003f1742006039c7f2e040405340603990b820405051503cf75200603987f2e0402052e0603ab014a0407053303cc04200603897a74040205110603cc04580406053903a47e200402052e03bb7eac0404053403c80a900405050c03c874200603452e040405340603990b082e0405051303a575200603422e0402052e0603ab01660407053303cc04200603897a58040205110603cc04580406053903a47e200402053503a603c80603ea7958040705330603f705580603897a5803f7059003897a3c0403050506039109740406053903df79200402052d039f7f820408051603bf07200409050e03a77a2002010001016e010000040068010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006636342e7273000100006d6f642e7273000200007472756e632e7273000200006d6163726f732e7273000300006269742e72730004000075696e745f6d6163726f732e7273000100006d6f642e727300050000636d702e72730006000061726974682e7273000400006633322e72730001000000c3050000040077010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f6174007372632f696e7400006d6163726f732e7273000100006636342e7273000200006269742e727300030000636d702e7273000400006469762e7273000500006d6f642e7273000200006d6f642e72730005000061726974682e7273000300006d6f642e727300060000696e745f6d6163726f732e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205160a03f80408900403052e03c078d60402051603c0073c0403052e03c078d6053003c8013c052e03b87ef2051103a10374052e03df7c4a051103a103089e052e03df7c4a0404053403c60a6604050508038a78580603857c2e03fb03c803857c3c0403052e0603ab01d60404053403c80ad60405050c038f78200603fe7b2e040405340603f30b089e0405050c039378200603fa7b2e040405340603990bc80405050c03f178200603f67b2e040405340603990bc80405050c03fc7820040405340384072e0405050c0380793c040405340380072e0405050c038b793c0603dc7b2e040405340603ed0b08120405050c03be78200406050503e6042e0368900407051503ab78200406050503ed075803be793c0603b17d3c040405340603ed0bba0405050c03c478200406050503e0042e0368900407051503ab78200406050503ed073c03be793c0405050d03e401580603cd7b3c040305350603960608900405050d03d67e5804060505038d04200405052503a07c900406050503f803ba0405052403887c5805150620053c06030f740406050503e903200405051c03977c5805250371740406050503f803200405052403887c7405150620053c06030f740406050503e903200405051c03977c5805250371740406050503f803200405052403887c7405150620053c06030f740406050503e903200405051c03977c580406050503d1033c0405050d03e17c740403051103fc7df20405051803fa01740536030a200535063c0406050506038c7d200405051703f70266052d220517b7051b240406050503b103660408052d03c3784a0403053503c204d6051103c07d580406050503d305580368660409054303df79580406050503a1063c0318ac0404053403c402e40405052f03c17a200603d2792e040305110603d6034a039804580406050503a3012006588203ef7658040305110603d603580406050503bb052006580603d5798206039a7d74040505080603de06660603a2793c05190603e5068206039b793c050c0603eb0666060395793c040605050603f908660318200405052303de7d740406050503a2023c0405050d03e57d2004060505039b02660603ef7658040205160603cc09200603b47674040505100603e706580403052e03c47aba053503eb04200511038601740603e4783c052e0603ab01740408053303cc04200404053403fc053c0405050c038c7b3c0403052d03907b2e0402051603bd073c0603b47658040405340603990b08820405051003f278200603f57b2e0403052d06038f02c80402051603bd074a0603b476580403052d06038f02ba0402051603bd07200603b476580403052d06038f02ba0402051603bd07200603b4765803cc092003b47674040405340603990bc8040505100381793c0603e67b580403052d06038f02d60402051603bd07200603b476580403052d06038f02d60402051603bd07200603b4763c0401050e0603f50320020e0001010f0100000400a5000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006636342e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a03b60508580608580401050e0603cc7a08c80403051403cf7c08ac0511c522051273051c060812051120051c065905260658051b2005162005153c0509062204040516038709200401050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006636342e7273000200000092000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03b67d08740690200403050d0603a47f0234010402050103dc0008820401050e03cc02820402050103b47dc80401050e03cc0290020f0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000fb01000004002c010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263007372632f666c6f617400006d6163726f732e7273000100006636342e7273000200006269742e727300030000636d702e727300040000636d702e7273000500006d6f642e72730005000000000502ffffffff03f20301040205160a03f804900403052e03c07808200404053403c80ad60405050803bf7420050006034e2e0508033208c80403052d0603dd013c04040534038a097404050508039e75200603493c0401050e0603f5032e06038b7c200403052e0603ab01200404053403c60aac0405050803cf74200603402e040405340603f30b4a0405050f03d974580603b47f4a040405340603ed0b580405050c03d474580603bf7f2e040405340603990b200603e774740401050e0603f5032002030001013201000004002c010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006636342e7273000100006d6f642e727300020000636d702e7273000200006d6163726f732e7273000300006269742e727300040000636d702e7273000500000071010000040004010000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e727300040000696e745f6d6163726f732e72730003000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03aa7cd605134206035d4a040305010603dc02ac04040505030a900620039a7d660603f9085803ed795806200603ab068206200405052d0603fe784a0404050503d7003c06039a7d740401050e0603f50320020f000101000100000400fa000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e727300010000696e745f6d6163726f732e72730003000075696e745f6d6163726f732e7273000300006269742e72730004000000be0100000400f7000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e727300010000696d706c732e7273000200006d6f642e7273000300006d75745f7074722e7273000400006d6f642e72730002000075696e745f6d6163726f732e72730003000000000502ffffffff039803010402050f0a03e47eac0508062003837e2e040305050603dc09ac0402051c03a4785804040512039506200402050f03d0795806039b7e74050d0603e6014a0404051203af06c80402050f03d079200509031e900517ae04040512039006200402050f03e279ac0603897e3c050d0603f801d604040512039d06c80402050f03e2792005090311c80603f87d3c050d0603e601e40404051203af06c80402050f03d0792006039b7e740401050e06039b032e0203000101d30100000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c6f6732662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050803bc7708200603523c050f06033b820603453c06033d083c06034358050c060330900603504a0603337406034d2e0509060338740401051603ba082006038e779e040205140603342006034cc80403050e0603f5032006038b7c3c0402051a06033166051406580403050e0603c4032006038b7c20040205050603c20082050a84050506740401051606038a09200402050503fa7666050cc10505062006220401051603a1083c0402050503e1774a0401051603fb08200402052a03887782050a1f050d03740812050506200621910515d8050e06660505200515069d050e06660505200622051e27051a0620050520051b068305050620050a06036d08120505062005390603133c050506200403050e06039f032002010001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006c6f6732662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002e0100000400af000000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100007363616c626e662e7273000200006633322e7273000300006d6174682e7273000100006c64657870662e72730002000000000502ffffffff03f20301040205080a03947cd60603793c050f0603115806036f3c050906031274050c8406036c3c0509060828050c840603763c050d06031508200510ca0603699e050d06030b820510ca06037382051806031c740403051603b209820402050503ce76200401050e03d90320020100010199000000040093000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00007363616c626e662e7273000100006c64657870662e7273000100006633322e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003e0200000400ac000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000061636f73662e72730002000073717274662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050e03bb7708120508920603513c0603399e0603473c0603c100660603bf7f3c05090603c80058050506820403051706034f2004020525f5051d0666051920051166050d2005120683050d06660505062105090331200401051603a508200402051d03d9778204010516038309200402051203fe7620050d0658051d20050d5805050621050a210505063c0404050e0603a7035806038b7c200402050d0603c200c8050906660403051706035520040205250823051d0666051920051166050d2005120683050d066605050621050d0328200509066605200621051506200510200404050e0603b0035806038b7c200402050c06033af20603463c053006033e580525035cf2051d0666051920051166050d2005120683050d066605050621052a032220051f063c0510200404050e0603b7039006038b7c200402050c060330900603503c05150603365805100658034a3c0404050e0603f5032006038b7c3c04020510060331e4050006034f200404050e0603f5032002010001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e72730001000061636f73662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000073717274662e7273000100000061000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f203010402050d0a03da7c083c0401050e03a80308f202160001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000ee00000004009f000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e72730001000072696e742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea080104020508039c770820060379e4051606030aac051702250e051624050cdc0603703c050d060311082006036f580403050e0603f5032002030001019a000000040094000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e72730001000072696e742e7273000200006d6163726f732e72730003000000da00000004008a000000010101fb0e0d0001010101000000010000017372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720073726300006d6f642e7273000100006d75745f7074722e7273000200006d6163726f732e72730003000000050f0a000502ffffffff03fd00010603827f7403fe004a03827ff203fe004a0402051206039707740401050d03ea7874025313050f1e050d082f050fc70403050e039103d602010001019000000004008a000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e7273000200006d75745f7074722e727300030000000c0100000400a5000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006633322e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a039e05c8040305140393773c0402050503ed08ac040305110390779030051273051b0674051120051c068305260658051b2005162005153c050906220404051603a909200401050e03a77a20020100010186000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006633322e72730002000000cc01000004008c000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006d6f642e727300020000636f6e73745f7074722e72730003000000000502ffffffff038c0401040205110a03ca7c74050c3d0513030aac06039e7f5803e20082039e7f085803e20082040305120603ce06ac0402053503b37974051106ba040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a0513067305119205131e06039e7fba03e20066053506c90511069005130673050c0376084a0513310603a57f5803db004a03a57fe403db004a05350608e605110690051306720603a57f087403db005803a57f3c03db006603a57ff2040305120603b007660402053503ad79580511064a040305120603d306740402053503ad79580511064a040305120603d306740402053503ad79580511064a05353c051174051306720511d705131f0401050e03b4036602010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e72730003000000310200000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006c6f6731302e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402050803cf7708200603462e033ac803463c050f0603c600820603ba7f3c0603c80008660603b87f3c052303c8007403b87f580403050e0603f5039006038b7c200402050c06033bd60603454a06033e580603422e05090603c300ac0401051603a808200402050e03da77580509062003bb7f8205050603cd0074050a59050506200603183cbb050a03689005050674050a0621051e06ba050520040105160603fc0820040205050387779e050cf30505062006030a2004010516038d083c0402050503f577740401051603ec082004020505039977ba030b20050f3d050a03719e050d0373084a050506200621910520083d0519069e051520050e9e050520052b0608210524069e05202005199e051520050e9e0505200621051e28051a0620050520053606c0050e06ba051f20050ee405052006030920230403050e0381032006038b7c200402051406033f2006034108120403050e0603f5032006038b7c3c0402051a06033c9e051406580403050e0603b9032002010001018a000000040084000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006c6f6731302e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000a0010000040008010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006633322e727300020000636f7368662e7273000300006b5f6578706f32662e7273000300006d6f642e7273000400006d6174682e7273000100006d6f642e72730003000000000502ffffffff03f20301040205160a03db05087403a47f5804030505039e77c805089506036b3c06031f9e0603613c0404050a06030d7405050620037308580403051106032020051be50516063c051066035f58050c060316ac051140051583052306ba051d2005155805106603655805190603179e0405050903950c4a0603d473c80401050e0603f50320020e000101d90000000400d3000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006633322e727300010000636f7368662e7273000200006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003e000000040038000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800006b5f6578706f32662e727300010000009501000004002d010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006d6f642e7273000100006d6163726f732e7273000200006269742e7273000300006164647375622e727300040000636d702e7273000500006d6f642e7273000400000005050a000502ffffffff039009010402050e03e47a740403052203c87cac0401050503d40820063c040405150603fb763c04010505038509200620040405180603f676580402050e03ee032e0405053403f807580402050e038878082002040001013b010000040035010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e7273000300006269742e727300040000636d702e72730005000000ec0000000400a0000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000072696e74662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f1080104020508039577c80603799e051606030a740517087e051624050ca40603703c050d0603119e06036f580403050e0603f5032002030001019b000000040095000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e72730001000072696e74662e7273000200006d6163726f732e72730003000000bf020000040070010000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006d6163726f732e7273000100006633322e72730002000065787032662e7273000300006d6f642e727300040000636f6e73745f7074722e7273000400006636342e7273000200006d6174682e7273000100006d6f642e7273000300006d6f642e727300050000696e6465782e72730005000000000502ffffffff03f20301040205160a03ff0408200403050e03e977e40508910603a47f3c050f0603f1008206038f7f3c05100603f300740401050e0382032006038b7c200403050c0603de00ac0603a27f3c0401050e0603f5032e06038b7c200403050c0603e200c806039e7f3c0603e7004a0603997f58050d0603e400820401050e0391032006038b7c20040305100603e900ac0603977f3c03e9007403977f3c051d0603ea00820404050903c20b660403051003c074d60603947f3c0401050e0603f5035806038b7c200403051b0603f700820402051603fb072004030505038778585b0405051203b4063c0403052103d179820505d30512210527cc051a069e0512061f0516590512063c0553ba05469e053c2005385805124a050d06037758051f4b051e0620040605160603d1084a0403050503ba77200401050e03ef022e02010001015001000004004a010000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f707472002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f736c69636500006633322e72730001000065787032662e7273000200006d6f642e727300030000636f6e73745f7074722e727300030000696e6465782e7273000400006d6f642e7273000400006636342e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000091000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03a37d08c804030517039c7f083c0402050103e40008580690200401050e0603df024a0402050103a17dc80401050e03df02d602010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000960100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000200006d6f642e7273000300006269742e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03c37c9005133e06034874040305150603b4024a0404050503c5062e0403050103e3795804040505039d0682063c040305150603b879200404050503c8063c0405052d0396793c0403050103cd00200515035e200603c67d3c0401050e0603f5032006038b7c3c040305150603b402580404050503c5062e0403051503d2793c0401050e03aa01200201000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300006269742e7273000400000061000000040038000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e72730002000000000502ffffffff03f20301040205090a03b87c083c0401050e03ca03082e020e0001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000fd000000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d6f642e7273000200006d6f642e7273000300006d756c2e72730002000000000502ffffffff03f20301040205150a03d87ec806ac0403050506031b2004020515034e900403050503322004020515034ec80403050503322003173c0401050e03f800740403050503f17e58031774036908660658060317580401050e03f8002e02040001019d000000040097000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6f642e7273000100006d756c2e7273000100006d6163726f732e727300020000696e745f6d6163726f732e727300030000001b0200000400d8000000010101fb0e0d000101010100000001000001737263007372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400006d6163726f732e72730001000062696e6172795f6c6f6e672e7273000200006d6f642e7273000300006e6f726d5f73686966742e727300020000756469762e72730004000075696e745f6d6163726f732e72730003000000000502ffffffff03f20301040205100a03aa7c7406036390040305050603f9082e063c040405170603c7773c051e2205180674040205200603d2024a560403050503e7057404020510039c7a3c0603eb7c7406039903820603e77c3c051106039b03c8051b210511c60403050503df05200402051403a67a74f60603dd7c740603ae03820603d27c7403ae038203d27c5803ae03ac03d27c3c040305050603f908660620040205280603be7af20403050503c205200402051403b57a740603d27cd6040305050603f908660620040205280603be7af20403050503c20520063c20040205280603be7af20403050503c20520063c20040205280603be7af20403050503c20520063c20040205280603be7af20403050503c205200402051103b87a7405141d0515030c660603c67c9e0401050e0603f503200203000101b00000000400aa000000010101fb0e0d0001010101000000010000017372632f696e742f7370656369616c697a65645f6469765f72656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000062696e6172795f6c6f6e672e72730001000075696e745f6d6163726f732e7273000200006e6f726d5f73686966742e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000006a0100000400ad000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006879706f74662e7273000200006d6163726f732e72730003000073717274662e7273000200006d6174682e7273000300000005160a000502ffffffff03f1080104020505039d77900401051603e3082004020505039e77ac0508210401051603bd09820402050803cb76e40603673c06031c08ba06036482031cac03643c0603218206035f3c050f060325e406035b3c0509060328749d060359ba051006031d200403050e03d8035806038b7c2004020509060324829d06035d9e052606032a200510069e050f820404051706036d2e040205050313200603563c0403050e0603f5032002030001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006879706f74662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003b000000040035000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468000073717274662e727300010000002a0700000400d6000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c67616d6d61665f722e7273000200006c6f67662e727300020000666c6f6f72662e7273000200006b5f73696e662e7273000200006b5f636f73662e7273000200006d6174682e7273000300006d6163726f732e7273000300000005160a000502ffffffff03f1080104020505038a78089e0508910603837f3c06038001ba0603807f3c05050603fb00e40508030d200603f87e2e05050603fb00084a050c270401051603f0073c0403050803ad779e0603613c050f06032b820603553c06032d083c06035358050c0603219006035f4a0603247406035c2e0509060329740401051603c9082006038e779e040305140603252006035be4040205100603d800820404051d03b57f200402050f03cb005805050620050906bc0505068203a67f089003da002003a67f8205090603dc00200505082c050e083d0509063c05160621050506c8069f08130603a27f740405050d06031920773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660406050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660405050d060319200402051503c700580405050d03bc7f581e0520770512b8050d069e05200622051506d6050f9e050b2005062005053c0363660406050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402050e0603c5002e06039f7f3c050c06038b019e0603f57e3c06038f01ac051a08790515063c040105160603de07200403050803ad779e0603613c050f06032b820603553c06032d083c06035358050c0603219006035f4a0603247406035c2e0509060329740401051603c9082006038e779e040305140603252006035be40402051b06038d01660515065803f37e5805110603fe00200603827f74040705090603ef00580408050e0386033c06038b7c3c0403051a0603226605140658035e58050506033282050b5905050620050e06030c3c052f83050a037482050506740401051606039a09200403050d03e97666051603099e051103789e050d0620051006c0050d29750519d805120666050e200519069d05120666050e20050d0622050923050506200340ac051a0603226605140658035e58050506033282050b5905050620050e06030c3c052f83050a037482050506740401051606039a09200403050d03e97666051603099e051103789e050d0620051006c0050d29750519d805120666050e200519069d05120666050e20050d062205092305050620034090040705090603ef009e0402051103173c0408050e03ef023c06038b7c200402050806039a01ac0603e67e3c039a018203e67e3c050d06039e019e0603e27e3c050f0603d601d605000603aa7e3c050f0603f00108200603907e3c05110603f901900509062003877e580603d801820603a87e089003d8012003a87e8203d801082e05110608210509063c050d06850549083a05430666053f20053966053520052f66052b20052566052120051b660517200511660509200545060821053f0666053b20053566053120052b66052720052166051d200517660513200509660517062105090620050c060310740603947e5805090603f301663d05440859053e0666053a20053466053020052a66052620052066051c20051666051220050966050d068305190682050d20050920038a7e5805120603ed019e050cc4d3037a08ba93cb23050d24051221050d066603927e58050c06039f01084a0603e17e3c05100603ae01820603d27e3c05120603a1010812050d068205100608210603de7e3c05170603a501820603db7e3c0603b201084a0603ce7e3c05110603b701740603c97e9e05480603cd01083c05420666053e20053866053420052e66052a20052466052020051a66051120054406f3053e0666053a20053466053020052a66052620052066051c20051166052106210516068205112e03b17e580603b401820603cc7e9e0603c40120750539083d05330666052f20052966052520051f66051b2005116605150623053a084805330666052f20052966052520051f66051b20051166053a06f305330666052f20052966052520051f66051b20051166052e062105280620052420051e20051120051606670511062003b67e580603bd018205430859053d0666053920053366052f20052966052520051f66051b20051166051506220548081f05420666053e20053866053420052e66052a20052466052020051a660511200621051a830516062005112003bf7e3c040705090603ef002004020505030c08200508038001200408050e03fa012002010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003c000000040036000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666c6f6f72662e72730001000000cb0200000400aa000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e72730001000061636f732e727300020000737172742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402050a03de77c80505062006750508920603b47f3c0603d9009e0603a77f3c0603e1006606039f7f3c05090603e80090050506ba0403051706037020040105160393085804020519038078900401051603e108200402050e03a1772005090658051920050558054906034708740542069e053e2005379e053320052c9e05282005219e051d2005169e05122005390608210532069e052e2005279e052320051c9e05182005129e05050621050903382005050620050a06210505063c0404050e060386035806038b7c200402050d0603e200084a0509069e040305170603762004020549035c08ac0542069e053e2005379e053320052c9e05282005219e051d2005169e05122005390608210532069e052e2005279e052320051c9e05182005129e05050621050d032e200509069e05200621051506200510200404050e060390035806038b7c200402050c0603da00083c0603a67f3c05300603de00900549035608900542069e053e2005379e053320052c9e05282005219e051d2005169e05122005390608210532069e052e2005279e052320051c9e05182005129e05050621052a032820051f063c0510200404050e06039703c806038b7c200402050d0603cf009005171e050c3e0603b17f4a05150603d600900510065803aa7f3c0404050e0603f5032006038b7c3c040205100603d100086605000603af7f200404050e0603f50320020100010189000000040083000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e72730001000061636f732e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e72730001000000ef000000040093000000010101fb0e0d0001010101000000010000017372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e7273000100006d6163726f732e7273000200006d6f642e7273000300006636342e72730003000000050c0a000502ffffffff03140106036b660402050e0603f5039006038b7c20040305050603f9084a0401051103a1773c05096705111e051f0674051120050906300404051603b109200402050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006636342e727300020000003c010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d6f642e7273000200006d6f642e7273000300006d756c2e72730002000000000502ffffffff03f20301040205150a03c17e740403050503c506200402051503bb79740403050503c5062003183c0402051503a0794a031a90036620031aac0403050503ae06200402050103e3793c0515035e20037a580674040305050603c506200402050103e3793c0403050503b5064a0368200402051503d279580403050503ae06200402051503d279580403050503c60620064a0401050e0603e47a2002010001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6f642e7273000100006d756c2e7273000100006d6163726f732e72730002000075696e745f6d6163726f732e7273000300000042010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d6f642e7273000200006d756c2e7273000200006d6f642e72730003000000000502ffffffff03f203010402050d0a03b07d084a0403050903807f740402050d0380012e0403050903807f58040405050386092e0603d776022c0103a90920083c082eba74660403051706038777d60404050503f9083c0603d776900402050d0603a301200403050903807f58040405050386092e06082e082eac74660403051706038177d60404050503ff083c0603d7769003a9092003d7760225010401050e0603f5032002220001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6f642e7273000100006d756c2e7273000100006d6163726f732e72730002000075696e745f6d6163726f732e7273000300000092000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e72730002000000050f0a000502ffffffff03fd00010603827f7405110603f100d6050f030d900603827f085803fe0082050d06ad050f025311050d92050f1e0603827fba03fe0066050d064b050fc70402050e039103d602010001013d000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e727300020000003e0400000400c6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006d6163726f732e7273000100006636342e727300020000666d612e7273000300006d6f642e7273000200007363616c626e2e7273000300006d6174682e727300010000696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205160a03f804022201040303a6779005057605082106036c4a050e060315ac0402051603d608200403050d03ab7758050906580510065906036990040205160603eb0820040303a6779005057605082106036c4a050e060315ac0402051603d608200403050d03ab7758050906580510065906036990040205160603eb0820040303a6779005057605082106036c4a050e060315ac0402051603d608200403050d03ab77580509065805100659060369900508060335d606034b3c033558034b3c06033808660603483c040405050603a909025b0104030516039e770866ad050876050c03153c0603a17f74060339f205143e060345ba05130603e100e406039f7f3c0603e20082052006d6051fe4050d2e039e7f58050c0603cb00660603b57f3c050d0603d100580510bc0603ad7f3c05170603d400740603ac7f3c051e0603d5000866051706580529ac05175805352005347405112e063d0603aa7f9005100603362006034aba050d0603cc0020051bbb050d065803b37f5805190603e90020050808150510770404050503a208580403051603de779e0509062003917f58040405050603910920067490580403050c0603e4776606038b7f3c040405050603e602c80403050d03927e900538d5050d062e03897f5805130603fa0020050840050f4105100309820603f47eba0404050506039109200403050c03f477660603fb7e5805090603840166050d240603f87e8205130603860158051e0658050d2003fa7e900404050506039109200403050903ef779e050f220521069e051a3c050f20052d20052c7405092e067f0603817f3c0508060392016605165b050503793c0508030908200603e97e3c050c06039901580603e77e3c051e0603b9017405110674051006ad050d5b0405050903d97e9e050c840603683c050806030908200603773c050f0603135806036d3c050906031758d506036a5806030b66d506037658051006031b66050dd4060367580403051006039b0108823f0603e27e740603a701580603d97e7405230603a201ba05472f0518069e03dd7e5805160603a8017405210658051520051406f305115b05152105110658052a06420525081f051a210515066603cd7e3c04050509060316ba06036a8205190603208205180620040205160603ac094a0405050503d476200603603c0401050e0603f50320020e000101b80000000400b2000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e727300010000666d612e72730002000075696e745f6d6163726f732e727300010000696e745f6d6163726f732e7273000100007363616c626e2e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8038202010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000007b0200000400b5000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d61746800737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006174616e322e7273000100006d6163726f732e7273000200006636342e7273000300006d6f642e727300030000666162732e7273000100006d6174682e7273000200000005080a000502ffffffff0334010510e50402050e03bf035806038b7c20040305160603eb08200401051203cd77900404050503c1089e0401050e03c0772005083f05105a0402050e03b7038206038b7c20040105210603c000580520063c040305160603ab08200401050e03d57790050d062e051206037ac805058a050e0379200508030a580603bb7f3c0402050e0603f503089006038b7c2003f5039e038b7c20040105080603cd009e0603b37f820603d100ba0603af7f3c050c0603d200820603ae7f3c05140603d300f20603ad7f2e03d3004a0402050e0603a203ac06038b7c20040105080603e300d606039d7f2e050003e30074050820039d7f5805100603e4009e0402050e0391033c06038b7c20040105100603e800200603987f9003e800082e03987f5805130603ec00200405051d03a17f580401050903df00200603947f82050e0603f200089e0402038303ac06038b7c2004010603f0002004020385033c06038b7c20040105130603f100084a050e06200402060384032006038b7c20040105140603da0008120603a67f2e03da004a03a67fc80402050e0603f5032006038b7c3c040105100603ce009e0402050e03a7033c02010001019c000000040096000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006174616e322e7273000100006636342e72730002000075696e745f6d6163726f732e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666162732e72730001000000510100000400f3000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f707300006d6163726f732e72730001000073686966742e7273000200006d6f642e7273000300006269742e7273000400006d6f642e72730002000075696e745f6d6163726f732e72730003000000000502ffffffff03f203010402050c0a03c37cba05133e06034858040305050603f9084a031858062082200404052d0603fe784a040305050382073c0603ef7690039109742003ef76820401050e0603f50320020f000101ef0000000400e9000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6f7073000073686966742e7273000100006d6163726f732e72730002000075696e745f6d6163726f732e7273000300006d6f642e7273000100006269742e72730004000000f6000000040093000000010101fb0e0d0001010101000000010000017372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e7273000100006d6163726f732e7273000200006d6f642e7273000300006633322e72730003000000050c0a000502ffffffff1a060377660402050e0603f5035806038b7c20040305050603f9082004010511039477580509da051163051c7505260658051b2005162005153c050906220404051603bd09820402050e03a77a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006633322e72730002000000b6040000040022010000010101fb0e0d000101010100000001000001737263007372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e727300010000636f73662e7273000200006633322e72730003000072656d5f70696f32662e7273000200006b5f73696e662e7273000200006b5f636f73662e7273000200006d6f642e7273000400006d6174682e7273000100006d6f642e72730002000000000502ffffffff03f203010402050f0a03aa7c08c80403051603d508580402050503b177082e05089206035b3c06032f9e0603513c06033a9e0603463c0603c70008200603b97f3c0404051c0603274a0508e80603553c051306032eac08410511bb06034c08c8033420034c82033408120523022512051d200532ba051d20034c58050f06033c90050e064a05210659051c06200403051606039109200404050503ef7620050d83040205100364086604040508031d200509310603be7f9005110603c0003c0516065805155803403c0402050b0603cd00580603b37f7405100603c800200603b87f900405050d06031920773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660406050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660405050d06031920040205150336580405050d034d581e0520770512b8050d069e05200622051506d6050f9e050b2005062005053c0363660406050d06031920050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200402050e0603342e0603b07f58050c06033c900603443c0510060322660513031d200603412e051b0603c200ac0405050d035720773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660402051b0603c0009e0405050d03593c773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660402050c0603319006034f3c051006032266051303122006034c2e051b060337900405050d03623c773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660402051b060335ba0405050d036420773a0520770512b8050d069e05200622051506f2050f9e050b200506200505200363660402050c060327ac0406050d03723c050ef50507069e050d061e0518f405060620052220051206f1050d069e05220621050506200364660402051906032a9e0407050903820c4a0603d473e4040205100603220866051e031c200406050d035b4a050ef50507069e050d061e0518f405060620052220051206f1050d069e0522062105050620036466040205100603220866051f0311200406050d03664a050ef50507069e050d061e0518f405060620052220051206f1050d069e0522062105050620040205140603172e06034d3c0401050e0603f50320020e000101f20000000400ec000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f7074720000636f73662e7273000100006633322e7273000200006b5f73696e662e7273000100006b5f636f73662e7273000100006d6f642e727300030000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000008e000000040088000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d617468002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d000072656d5f70696f32662e7273000100006633322e7273000200000041000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000005110a000502ffffffff03990301050ebb0201000101b9010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d756c2e7273000200006d6f642e7273000200006d6f642e72730003000000000502ffffffff03f20301040205100a03cf7ce40603be7fba0603cb0066051b930510037a08120403050d03db00e40402050903807f2006035d2e0403050d0603a3019e0402050903807f200404050503ee082e0603ef76c8040305150603c802900404050503c90620040205000603ef76900404050503910920040305150603bd79740404050503c3062004020517039f77e4060350580403050d0603a301ac0402050903807f2006035d2e040305150603c802820404050503c90620040205000603ef76900404050503910920040305150603bd79740404050503c3062004020517039977e4060356580404050506039109200603ef76ac040205100603d3003c051b8b051025230603aa7fc805090603f800200401050e03fd027402030001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d756c2e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e72730003000000880200000400bf000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006636342e7273000100006d6f642e7273000200006173696e2e727300020000666162732e727300020000737172742e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03ea08010402050503ec79c8040303f77d820508920603b07f3c0603db00d60603a57f3c0404051d06030d900403050903d7003c0505069e054906035708580541069e053d2005359e05312005299e052520051d9e05192005119e050d200537060821052f069e052b2005239e051f2005179e051320050d9e0505062104050517031b3c04030508030fc80603997f3c040105160603eb08900402050503ff79900401051603e206200403055303a47720054206580512069d050d0674051b2005095805370621052c0658051e2005098203907ff2050c0603dd00740523a10549035b08900541069e053d2005359e05312005299e052520051d9e05192005119e050d200537060821052f069e052b2005239e051f2005179e051320050d9e0505062105180323200514063c0406050e060395033c06038b7c20040305220603e9009e051d06740518200517d605092003977f3c05080603f2009e0406050e0383032e06038b7c200403050d0603d3009004020505038902200403050c03f77d3c0603ad7f4a051a0603d700900514065803a97f3c0406050e0603f5032006038b7c3c040305140603d500ba0406050e03a003ac02010001019300000004008d000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006636342e7273000100006d6f642e7273000200006173696e2e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000666162732e727300010000003a000000040034000000010101fb0e0d0001010101000000010000017372632f2e2e2f6c69626d2f7372632f6d6174680000737172742e72730001000000bb000000040092000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f61740073726300006633322e7273000100007375622e7273000200006d6163726f732e7273000300006d6f642e7273000200000005160a000502ffffffff03cd09010402050903ba76580403050e03ed036602010001018e000000040088000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f61740073726300006633322e7273000100006d6f642e7273000200006d6163726f732e7273000300000057000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e7273000200000005090a000502ffffffff033b010402050e03df02ba020100010190000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000756469762e727300020000736469762e72730002000000000502ffffffff03f20301040205090a039f7c083c04030501038201ac0402050903fe7e083c0401050e03e303c804030501039f7dc80690200401050e0603e1022002010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000d60100000400a1000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d6174680073726300006633322e7273000100006c6f673130662e7273000200006d6163726f732e7273000300006d6174682e7273000300000005160a000502ffffffff03f108010402050803bf77082006034f3c050f06033e820603423c0603c000083c06034058050c0603339006034d4a0603367406034a2e050906033b740401051603b7082006038e779e0402051406033720060349c80403050e0603f5032006038b7c3c0402051a06033466051406580403050e0603c1032006038b7c20040205050603c50082050a59050506200603133c054d83050a036d82050506740401051606038709200402050503fd7666050cc105050620062204010516039e083c0402050503e4774a0401051603f808200402053d038c7782050a1e050d03740812050506200621910515d8050e06660505200515069d050e06660505200622051e27051a0620050520052d0684050506820516200505ac0403050e06039b034a02010001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f2e2e2f6c69626d2f7372632f6d61746800006633322e7273000100006c6f673130662e727300020000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000048020000040007010000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e727300010000696d706c732e7273000200006d6f642e7273000300006d75745f7074722e727300040000636f6e73745f7074722e7273000400006d6f642e72730002000075696e745f6d6163726f732e72730003000000000502ffffffff03980301040205080a03cb7dac06039c7f3c040305050603dc09ac04020521038b77580404051203ae07200402050f038b785806036074051506032182050d06900405051206038f0774040403e500740402050f038b7820050903cb00900517ae05000603937f20040505120603b007580402052003be79c8050c210603917f3c050f0603c8004a0603b87f3c051f06033ff2050f030958051dc47c051c8e05325a051d0658050d0625050f0377740404051203cd07740402050f03b37820050c032790050f03be7f660603533c051b06032e4a050d0690040405120603e7077406740402050f0603987820050903c900c80405051203ba063c0603d0787404020515060321e4050d06900405051206038f0774040403e500740402050f038b7820060360740401050e06039b032e0203000101290100000400b6000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f617400006d6163726f732e7273000100006d6f642e727300020000636f6e762e7273000300006633322e727300020000696e745f6d6163726f732e72730002000075696e745f6d6163726f732e72730002000000000502ffffffff03f20301040205050a03f37e082e03ab0674040305140393773c0402050503ed08ac040305110390779030051273051b0674051120051c068305260658051b2005162005153c05090622051803d50058910404051603d308200401050e03a77a2002010001018b000000040085000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372630000696e745f6d6163726f732e7273000100006d6163726f732e7273000200006633322e7273000100000086000000040080000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f666c6f6174000075696e745f6d6163726f732e727300010000636f6e762e72730002000000cc01000004008c000000010101fb0e0d000101010100000001000001737263007372632f6d656d002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6163726f732e7273000100006d6f642e727300020000636f6e73745f7074722e72730003000000000502ffffffff038c0401040205110a03ca7c74050c3d0513030aac06039e7f5803e20082039e7f085803e20082040305120603ce06ac0402053503b37974051106ba040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a040305120603cd06740402053503b379580511064a0513067305119205131e06039e7fba03e20066053506c90511069005130673050c0376084a0513310603a57f5803db004a03a57fe403db004a05350608e605110690051306720603a57f087403db005803a57f3c03db006603a57ff2040305120603b007660402053503ad79580511064a040305120603d306740402053503ad79580511064a040305120603d306740402053503ad79580511064a05353c051174051306720511d705131f0401050e03b4036602010001019200000004008c000000010101fb0e0d0001010101000000010000017372632f6d656d00737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f70747200006d6f642e7273000100006d6163726f732e727300020000636f6e73745f7074722e727300030000007a000000040041000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e7273000100006c656164696e675f7a65726f732e72730002000000000502ffffffff03f203010402050c0a03ae7c08200508a4f7e996050c036ae4050896a3a3500401050e03be032002010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e72730001000000350100000400de000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f73726300006d6f642e7273000100006d6163726f732e7273000200006164647375622e727300030000636d702e7273000400006d6f642e7273000300000005050a000502ffffffff039009010402050e03e47a7404010505039c05580674040305180603f676580402050e03ee034a0404053403f807ac06200403050f0603bf74c80402050e03c903200204000101ec0000000400e6000000010101fb0e0d0001010101000000010000012f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d007372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f737263000075696e745f6d6163726f732e7273000100006d6f642e7273000200006164647375622e7273000200006d6163726f732e727300030000636d702e7273000400000050000000040030000000010101fb0e0d00010101010000000100000173726300006d6174682e7273000100006d6163726f732e7273000100000005010a000502ffffffff031c010402050e03d8039e02010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000078010000040090000000010101fb0e0d000101010100000001000001737263007372632f696e74002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006d756c2e7273000200006d6f642e7273000200006d6f642e72730003000000000502ffffffff03f20301040205100a03cf7c0225010603be7f08200603cb002efd0869051baf0510037a082e0403050d03db00900402050903807f3c0403050d0380012e0402050903807f58040405050386092e0603d776022c0103a90920083c082eba74660402051706038777d60404050503f9083c0603d776900403050d0603a301200402050903807f58040405050386092e06082e082eac74660402051706038177d60404050503ff083c0603d7769003a9092003d776022501040205100603d3003c051b8b051025085b0603aa7fc80401050e0603f5032002220001019e000000040098000000010101fb0e0d0001010101000000010000017372632f696e7400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d756c2e7273000100006d6163726f732e7273000200006d6f642e72730001000075696e745f6d6163726f732e7273000300000092000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e72730002000000050f0a000502ffffffff03fd00010603827f7405110603f100ba050f030d900603827f085803fe0082050d06ad050f025311050d92050f1e0603827fba03fe0066050d064b050fc70402050e039103d602010001013d000000040037000000010101fb0e0d0001010101000000010000017372632f6d656d0073726300006d6f642e7273000100006d6163726f732e72730002000000f8000000040093000000010101fb0e0d0001010101000000010000017372632f666c6f617400737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e7273000100006d6163726f732e7273000200006d6f642e7273000300006636342e72730003000000050c0a000502ffffffff032801060357820402050e0603f5039006038b7c2004030505060391092004010511039c77580509da051163051c7505260658051b2005162005153c0509062204040516039b09c80402050e03a97a20020100010186000000040080000000010101fb0e0d0001010101000000010000017372632f666c6f6174002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d0000636f6e762e72730001000075696e745f6d6163726f732e727300020000007a000000040074000000010101fb0e0d000101010100000001000001737263002f72757374632f323163636532316438633031326631346366373464356166646464373935643332343630306461632f6c6962726172792f636f72652f7372632f6e756d00006d6163726f732e7273000100006636342e7273000200000084000000040043000000010101fb0e0d000101010100000001000001737263007372632f696e7400006d6163726f732e727300010000736469762e727300020000756469762e72730002000000000502ffffffff03f20301040205010a03aa7d08c80403050903877f083c0401050e03d103c80402050103a87dc80401050e03d802d602010001012b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e727300010000002b000000040025000000010101fb0e0d00010101010000000100000173726300006d6163726f732e7273000100000000e504046e616d6501b6041000126d427566666572476574417267756d656e74010f6765744e756d417267756d656e7473020b7369676e616c4572726f72030f6d4275666665725365744279746573040e636865636b4e6f5061796d656e7405126d42756666657253746f726167654c6f6164060d6d42756666657246696e69736807136d42756666657253746f7261676553746f7265084c5f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c6531356c6f61645f73696e676c655f617267313768346261633661376232393336323661384509685f5a4e32366d756c746976657273785f73635f7761736d5f616461707465723361706931336d616e616765645f747970657331397374617469635f7661725f6170695f6e6f646531316e6578745f68616e646c6531376835333632316637376439633438653438450a535f5a4e31336d756c746976657273785f736332696f31366172675f6e65737465645f7475706c653232636865636b5f6e756d5f617267756d656e74735f657131376832323433373861336636323965666162450b725f5a4e31336d756c746976657273785f7363357479706573376d616e6167656435626173696331346d616e616765645f62756666657232324d616e61676564427566666572244c54244d2447542431346e65775f66726f6d5f627974657331376834386436363662393536333038653066450c04696e69740d0a6c6f61645f62797465730e0b73746f72655f62797465730f0863616c6c4261636b071201000f5f5f737461636b5f706f696e74657209110200072e726f6461746101052e6461746100550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e37362e302d6e696768746c79202832316363653231643820323032332d31322d313129002c0f7461726765745f6665617475726573022b0f6d757461626c652d676c6f62616c732b087369676e2d657874" -} diff --git a/test/features/basic-features/output/basic-features-storage-bytes.mxsc.json b/test/features/basic-features/output/basic-features-storage-bytes.mxsc.json index 619430b7a..c8955f067 100644 --- a/test/features/basic-features/output/basic-features-storage-bytes.mxsc.json +++ b/test/features/basic-features/output/basic-features-storage-bytes.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.76.0-nightly", - "commitHash": "d86d65bbc19b928387f68427fcc3a0da498d8a19", - "commitDate": "2023-12-10", - "channel": "Nightly", - "short": "rustc 1.76.0-nightly (d86d65bbc 2023-12-10)" + "version": "1.79.0", + "commitHash": "129f3b9964af4d4a709d1383930ade12dfe7c081", + "commitDate": "2024-06-10", + "channel": "Stable", + "short": "rustc 1.79.0 (129f3b996 2024-06-10)" }, "contractCrate": { "name": "basic-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.47.1" + "version": "0.51.1" } }, "abi": { @@ -246,6 +246,28 @@ } } }, - "size": 539, - "code": "0061736d0100000001230760000060027f7f017f6000017f60027f7f0060037f7f7f017f60017f017f60017f0002b4010803656e76126d427566666572476574417267756d656e74000103656e760f6765744e756d417267756d656e7473000203656e760b7369676e616c4572726f72000303656e760f6d4275666665725365744279746573000403656e760e636865636b4e6f5061796d656e74000003656e76126d42756666657253746f726167654c6f6164000103656e760d6d42756666657246696e697368000503656e76136d42756666657253746f7261676553746f72650001030807020602000000000503010003060f027f0041ac80080b7f0041b080080b075207066d656d6f7279020004696e6974000b0a6c6f61645f6279746573000c0b73746f72655f6279746573000d0863616c6c4261636b000e0a5f5f646174615f656e6403000b5f5f686561705f6261736503010a8501071901017f41a8800841a8800828020041016b220036020020000b1400100120004604400f0b4180800841191002000b1301017f1008220041998008410d10031a20000b08001004410010090b1801017f100441001009100a1008220010051a200010061a0b1a01017f10044101100941001008220010001a100a200010071a0b0300010b0b390200418080080b2677726f6e67206e756d626572206f6620617267756d656e747373746f726167655f62797465730041a880080b049cffffff" + "code": "0061736d0100000001230760000060027f7f017f6000017f60027f7f0060037f7f7f017f60017f017f60017f0002b4010803656e76126d427566666572476574417267756d656e74000103656e760f6765744e756d417267756d656e7473000203656e760b7369676e616c4572726f72000303656e760f6d4275666665725365744279746573000403656e760e636865636b4e6f5061796d656e74000003656e76126d42756666657253746f726167654c6f6164000103656e760d6d42756666657246696e697368000503656e76136d42756666657253746f7261676553746f72650001030807020602000000000503010003060f027f0041ac80080b7f0041b080080b075207066d656d6f7279020004696e6974000b0a6c6f61645f6279746573000c0b73746f72655f6279746573000d0863616c6c4261636b000e0a5f5f646174615f656e6403000b5f5f686561705f6261736503010a8401071901017f41a8800841a8800828020041016b220036020020000b1400100120004604400f0b4180800841191002000b1301017f1008220041998008410d10031a20000b08001004410010090b1801017f100441001009100a1008220010051a200010061a0b1a01017f10044101100941001008220010001a100a200010071a0b02000b0b390200418080080b2677726f6e67206e756d626572206f6620617267756d656e747373746f726167655f62797465730041a880080b0438ffffff", + "report": { + "imports": [ + "checkNoPayment", + "getNumArguments", + "mBufferFinish", + "mBufferGetArgument", + "mBufferSetBytes", + "mBufferStorageLoad", + "mBufferStorageStore", + "signalError" + ], + "isMemGrow": false, + "eiCheck": { + "eiVersion": "1.3", + "ok": true + }, + "codeReport": { + "path": "../output/basic-features-storage-bytes.wasm", + "size": 538, + "hasAllocator": false, + "hasPanic": "none" + } + } } diff --git a/test/features/basic-features/output/basic-features.mxsc.json b/test/features/basic-features/output/basic-features.mxsc.json index 066ef6a2c..103456c17 100644 --- a/test/features/basic-features/output/basic-features.mxsc.json +++ b/test/features/basic-features/output/basic-features.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.76.0-nightly", - "commitHash": "d86d65bbc19b928387f68427fcc3a0da498d8a19", - "commitDate": "2023-12-10", - "channel": "Nightly", - "short": "rustc 1.76.0-nightly (d86d65bbc 2023-12-10)" + "version": "1.79.0", + "commitHash": "129f3b9964af4d4a709d1383930ade12dfe7c081", + "commitDate": "2024-06-10", + "channel": "Stable", + "short": "rustc 1.79.0 (129f3b996 2024-06-10)" }, "contractCrate": { "name": "basic-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.47.1" + "version": "0.51.1" } }, "abi": { @@ -3317,25 +3317,6 @@ } ] }, - { - "name": "managed_vec_array_push", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List>" - }, - { - "name": "item", - "type": "array5" - } - ], - "outputs": [ - { - "type": "List>" - } - ] - }, { "name": "managed_ref_explicit", "mutability": "mutable", @@ -4597,6 +4578,71 @@ } ] }, + { + "name": "set_mapper_front", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "set_mapper_back", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "set_mapper_next", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "set_mapper_previous", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "set_mapper_iter_from_and_count", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, { "name": "map_my_single_value_mapper", "mutability": "readonly", @@ -4705,6 +4751,21 @@ } ] }, + { + "name": "set_single_value_mapper_with_key", + "mutability": "mutable", + "inputs": [ + { + "name": "key", + "type": "u32" + }, + { + "name": "value", + "type": "bytes" + } + ], + "outputs": [] + }, { "name": "vec_mapper", "mutability": "readonly", @@ -5348,6 +5409,62 @@ } ] }, + { + "name": "unordered_set_mapper", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "variadic", + "multi_result": true + } + ] + }, + { + "name": "unordered_set_mapper_insert", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "unordered_set_mapper_contains", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "unordered_set_mapper_remove", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, { "name": "managed_struct_eq", "mutability": "mutable", @@ -5638,6 +5755,19 @@ } ] }, + { + "name": "returns_egld_decimal", + "mutability": "mutable", + "payableInTokens": [ + "EGLD" + ], + "inputs": [], + "outputs": [ + { + "type": "ManagedDecimal<18>" + } + ] + }, { "name": "set_contract_address", "mutability": "mutable", @@ -5684,6 +5814,106 @@ } ] }, + { + "name": "next_at_address", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "previous_at_address", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "front_at_address", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "back_at_address", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "keys_at_address", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "name": "values_at_address", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "List" + } + ] + }, + { + "name": "contains_unordered_at_address", + "mutability": "mutable", + "inputs": [ + { + "name": "item", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "get_by_index", + "mutability": "mutable", + "inputs": [ + { + "name": "index", + "type": "u32" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, { "name": "fill_set_mapper", "mutability": "mutable", @@ -5694,6 +5924,154 @@ } ], "outputs": [] + }, + { + "name": "fill_map_mapper", + "mutability": "mutable", + "inputs": [ + { + "name": "value", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "fill_unordered_set_mapper", + "mutability": "mutable", + "inputs": [ + { + "name": "value", + "type": "u32" + } + ], + "outputs": [] + }, + { + "name": "get_value_from_address_with_keys", + "mutability": "readonly", + "inputs": [ + { + "name": "address", + "type": "Address" + }, + { + "name": "extra_key", + "type": "u32" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "managed_decimal_addition", + "mutability": "mutable", + "inputs": [ + { + "name": "first", + "type": "ManagedDecimal<2>" + }, + { + "name": "second", + "type": "ManagedDecimal<2>" + } + ], + "outputs": [ + { + "type": "ManagedDecimal<2>" + } + ] + }, + { + "name": "managed_decimal_subtraction", + "mutability": "mutable", + "inputs": [ + { + "name": "first", + "type": "ManagedDecimal<2>" + }, + { + "name": "second", + "type": "ManagedDecimal<2>" + } + ], + "outputs": [ + { + "type": "ManagedDecimal<2>" + } + ] + }, + { + "name": "managed_decimal_eq", + "mutability": "mutable", + "inputs": [ + { + "name": "first", + "type": "ManagedDecimal<2>" + }, + { + "name": "second", + "type": "ManagedDecimal<2>" + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "managed_decimal_trunc", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "managed_decimal_into_raw_units", + "mutability": "mutable", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "managed_decimal_ln", + "mutability": "mutable", + "inputs": [ + { + "name": "x", + "type": "ManagedDecimal<9>" + } + ], + "outputs": [ + { + "type": "ManagedDecimalSigned<9>" + } + ] + }, + { + "name": "managed_decimal_log2", + "mutability": "mutable", + "inputs": [ + { + "name": "x", + "type": "ManagedDecimal<9>" + } + ], + "outputs": [ + { + "type": "ManagedDecimalSigned<9>" + } + ] } ], "events": [ @@ -5897,6 +6275,134 @@ } } }, - "size": 61709, - "code": "0061736d0100000001f2012460000060027f7f0060027f7f017f60017f017f60037f7f7f0060017f0060037f7f7f017f6000017f60047f7f7f7f0060047f7f7f7f017f6000017e60027f7e0060057f7f7f7f7f0060017f017e60037f7e7f0060037f7f7e017f60027f7f017e60057f7f7e7f7f017f60057f7f7f7e7f0060017e0060067f7f7f7f7f7f017f60047f7f7e7f0060027e7f0060027f7e017f60047f7f7f7e0060017e017f60067e7f7f7f7f7f017f60077f7f7f7f7f7f7f00600b7f7f7e7f7f7f7f7f7f7f7f0060037e7f7f017f60037f7f7f017e60017e017e60037f7f7e0060067f7f7f7f7f7f0060047f7e7f7f0060067f7e7f7f7f7f0002e2146e03656e76126d616e616765645369676e616c4572726f72000503656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000403656e760b7369676e616c4572726f72000103656e760a6d4275666665724e6577000703656e760d6d427566666572417070656e64000203656e76096d4275666665724571000203656e76136d42756666657253746f7261676553746f7265000203656e760d6d42756666657246696e697368000303656e760a6765744761734c656674000a03656e76106d616e61676564534341646472657373000503656e7609626967496e744e6577001903656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001a03656e760f636c65616e52657475726e44617461000003656e76126d427566666572417070656e644279746573000603656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465001103656e760d6d616e6167656443616c6c6572000503656e76186d616e616765644765744f726967696e616c547848617368000503656e76106d4275666665724765744c656e677468000303656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365001203656e76136d616e616765644f776e657241646472657373000503656e7612626967496e7447657443616c6c56616c7565000503656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000503656e76126d427566666572476574417267756d656e74000203656e76136765744e756d455344545472616e7366657273000703656e7611676574417267756d656e744c656e677468000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000d03656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000d03656e7617626967496e744765745369676e6564417267756d656e74000103656e760f6765744e756d417267756d656e7473000703656e7616736d616c6c496e7446696e697368556e7369676e6564001303656e7614626967496e7446696e697368556e7369676e6564000503656e760666696e697368000103656e7609626967496e74537562000403656e760f6d4275666665725365744279746573000603656e7616656c6c6970746963437572766547657456616c756573001403656e761067657443757276654c656e6774684543000303656e76086372656174654543000203656e76146d427566666572436f707942797465536c696365000903656e7609626967496e7453686c000403656e7609626967496e74536872000403656e76176d42756666657246726f6d426967496e745369676e6564000203656e76156d427566666572546f426967496e745369676e6564000203656e7609626967496e74506f77000403656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e760a626967496e7453717274000103656e761776616c6964617465546f6b656e4964656e746966696572000303656e76126d42756666657253746f726167654c6f6164000203656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000403656e761b6d616e616765645472616e7366657256616c756545786563757465001103656e7609626967496e74436d70000203656e760f6973536d617274436f6e7472616374000303656e760f6d616e6167656457726974654c6f67000103656e760e636865636b4e6f5061796d656e74000003656e760a626967496e744c6f6732000303656e7612626967496e7446696e6973685369676e6564000503656e7614736d616c6c496e7446696e6973685369676e6564001303656e7609626967496e74416273000103656e7609626967496e744e6567000103656e7609626967496e744d756c000403656e760a626967496e7454446976000403656e760a626967496e74544d6f64000403656e7609626967496e74416e64000403656e7608626967496e744f72000403656e7609626967496e74586f72000403656e7611676574426c6f636b54696d657374616d70000a03656e760d676574426c6f636b4e6f6e6365000a03656e760d676574426c6f636b526f756e64000a03656e760d676574426c6f636b45706f6368000a03656e76196d616e61676564476574426c6f636b52616e646f6d53656564000503656e761567657450726576426c6f636b54696d657374616d70000a03656e761167657450726576426c6f636b4e6f6e6365000a03656e761167657450726576426c6f636b526f756e64000a03656e761167657450726576426c6f636b45706f6368000a03656e761d6d616e6167656447657450726576426c6f636b52616e646f6d53656564000503656e761167657453686172644f6641646472657373000303656e76176d616e616765644765745374617465526f6f7448617368000503656e76166d616e61676564476574436f64654d65746164617461000103656e76186d616e6167656449734275696c74696e46756e6374696f6e000303656e760d6d616e61676564536861323536000203656e76106d616e616765644b656363616b323536000203656e76106d616e61676564526970656d64313630000203656e76106d616e61676564566572696679424c53000603656e76146d616e6167656456657269667945643235353139000603656e76166d616e61676564566572696679536563703235366b31000603656e761c6d616e61676564566572696679437573746f6d536563703235366b31000903656e76226d616e61676564456e636f6465536563703235366b314465725369676e6174757265000603656e760f6d616e616765644372656174654543000303656e7616676574507269764b6579427974654c656e6774684543000303656e76056164644543001b03656e7608646f75626c654543000c03656e760b69734f6e43757276654543000603656e76136d616e616765645363616c61724d756c744543001403656e76176d616e616765645363616c6172426173654d756c744543000903656e76106d616e616765644d61727368616c4543000903656e761a6d616e616765644d61727368616c436f6d707265737365644543000903656e76126d616e61676564556e6d61727368616c4543000903656e761c6d616e61676564556e6d61727368616c436f6d707265737365644543000903656e76146d616e6167656447656e65726174654b65794543000903656e76106d42756666657253657452616e646f6d000203656e76136d42756666657253657442797465536c696365000903656e76176d616e6167656447657445534454546f6b656e44617461001c03656e760d626967496e744973496e743634000303656e760e626967496e74476574496e743634000d03656e760a626967496e745369676e000303656e76136d42756666657247657442797465536c696365000903656e76106d616e616765644173796e6343616c6c0008039f059d05070203070501010c0003020201040201080101040108050103050108070102010301010301010103040401150e010b011d0e07070f0507070507090210080006060806060601060306030601060602090601060c1e0602070606060303030502020409060403080501050500010305090516010101010105010501050105040308040308010c05070104040601080b0404010303080204010117021f0201010103020201010203070b0408040309040503030d0303030303010104040504010502100202020102080b060102020402010804010202060204020202080101090101080103010304010608060201020102040402040401040801040101050b01032017030e02101610050703010403080205210202020f010318040f0f15010618040c0112020503030501050704010c0301220304050103020505050503070707050705070705000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e230405030100030616037f01418080080b7f004195e7080b7f0041a0e7080b07e244fc02066d656d6f7279020004696e697400b4031070616e6963576974684d65737361676500b5030a636f756e745f6f6e657300b70319656e64706f696e745f776974685f6d757461626c655f61726700b8030d737172745f6269675f75696e7400b9030d6c6f67325f6269675f75696e7400ba030b706f775f6269675f696e7400bb030c706f775f6269675f75696e7400bc030f6269675f75696e745f746f5f75363400bd031562696775696e745f6f76657277726974655f75363400bf030d6269675f75696e745f7a65726f00c003136269675f75696e745f66726f6d5f7536345f3100c1031162696775696e745f66726f6d5f7531323800c2031c6269675f75696e745f66726f6d5f6d616e616765645f62756666657200c3030c6269675f696e745f7a65726f00c403126269675f696e745f66726f6d5f6936345f3100c5030f6269675f75696e745f65715f75363400c6030e6269675f696e745f746f5f69363400c70314626967696e745f6f76657277726974655f69363400c803106269675f696e745f746f5f706172747300c903146269675f696e745f66726f6d5f62696775696e7400ca030b6164645f6269675f696e7400cb03146164645f6269675f696e745f6269675f75696e7400cc03146164645f6269675f75696e745f6269675f696e7400cd03186164645f6269675f696e745f6269675f75696e745f72656600ce03186164645f6269675f75696e745f6269675f696e745f72656600cf030f6164645f6269675f696e745f72656600d0030c6164645f6269675f75696e7400d103106164645f6269675f75696e745f72656600d2030b7375625f6269675f696e7400d3030f7375625f6269675f696e745f72656600d4030c7375625f6269675f75696e7400d503107375625f6269675f75696e745f72656600d6030b6d756c5f6269675f696e7400d7030f6d756c5f6269675f696e745f72656600d8030c6d756c5f6269675f75696e7400d903106d756c5f6269675f75696e745f72656600da030b6469765f6269675f696e7400db030f6469765f6269675f696e745f72656600dc030c6469765f6269675f75696e7400dd03106469765f6269675f75696e745f72656600de030b72656d5f6269675f696e7400df030f72656d5f6269675f696e745f72656600e0030c72656d5f6269675f75696e7400e1031072656d5f6269675f75696e745f72656600e203126164645f61737369676e5f6269675f696e7400e303166164645f61737369676e5f6269675f696e745f72656600e403136164645f61737369676e5f6269675f75696e7400e503127375625f61737369676e5f6269675f696e7400e603167375625f61737369676e5f6269675f696e745f72656600e703137375625f61737369676e5f6269675f75696e7400e803126d756c5f61737369676e5f6269675f696e7400e903136d756c5f61737369676e5f6269675f75696e7400ea03126469765f61737369676e5f6269675f696e7400eb03136469765f61737369676e5f6269675f75696e7400ec031272656d5f61737369676e5f6269675f696e7400ed031372656d5f61737369676e5f6269675f75696e7400ee03106269745f616e645f6269675f75696e7400ef03146269745f616e645f6269675f75696e745f72656600f0030f6269745f6f725f6269675f75696e7400f103136269745f6f725f6269675f75696e745f72656600f203106269745f786f725f6269675f75696e7400f303146269745f786f725f6269675f75696e745f72656600f403176269745f616e645f61737369676e5f6269675f75696e7400f503166269745f6f725f61737369676e5f6269675f75696e7400f603176269745f786f725f61737369676e5f6269675f75696e7400f7030c7368725f6269675f75696e7400f803107368725f6269675f75696e745f72656600f9030c73686c5f6269675f75696e7400fa031073686c5f6269675f75696e745f72656600fb03137368725f61737369676e5f6269675f75696e7400fc031373686c5f61737369676e5f6269675f75696e7400fd03136765745f626c6f636b5f74696d657374616d7000fe030f6765745f626c6f636b5f6e6f6e636500ff030f6765745f626c6f636b5f726f756e640080040f6765745f626c6f636b5f65706f6368008104156765745f626c6f636b5f72616e646f6d5f73656564008204186765745f707265765f626c6f636b5f74696d657374616d70008304146765745f707265765f626c6f636b5f6e6f6e6365008404146765745f707265765f626c6f636b5f726f756e64008504146765745f707265765f626c6f636b5f65706f63680086041a6765745f707265765f626c6f636b5f72616e646f6d5f736565640087040a6765745f63616c6c6572008804116765745f6f776e65725f61646472657373008904146765745f73686172645f6f665f61646472657373008a041169735f736d6172745f636f6e7472616374008b04136765745f73746174655f726f6f745f68617368008c040b6765745f74785f68617368008d040c6765745f6761735f6c656674008e041f6765745f63756d756c617465645f76616c696461746f725f72657761726473008f04116765745f636f64655f6d657461646174610090041369735f6275696c74696e5f66756e6374696f6e00910410636f6465635f6572725f66696e69736800920415636f6465635f6572725f73746f726167655f6b657900930415636f6465635f6572725f73746f726167655f67657400940415636f6465635f6572725f73746f726167655f73657400950415636f6465635f6572725f6576656e745f746f70696300960414636f6465635f6572725f6576656e745f6461746100970417636f6465635f6572725f636f6e74726163745f696e697400980417636f6465635f6572725f636f6e74726163745f63616c6c0099040e636f6d707574655f736861323536009a0411636f6d707574655f6b656363616b323536009b0411636f6d707574655f726970656d64313630009c04147665726966795f626c735f7369676e6174757265009d04187665726966795f656432353531395f7369676e6174757265009e041a7665726966795f736563703235366b315f7369676e6174757265009f04217665726966795f637573746f6d5f736563703235366b315f7369676e617475726500a0041f636f6d707574655f736563703235366b315f6465725f7369676e617475726500a104086563686f5f75363400a204086563686f5f69363400a304086563686f5f69333200a404086563686f5f75333200a5040a6563686f5f6973697a6500a604076563686f5f693800a704076563686f5f753800a804096563686f5f626f6f6c00a9040d6563686f5f6f70745f626f6f6c00aa040c6563686f5f6e6f7468696e6700ab040d6563686f5f61727261795f753800ac04146563686f5f6d756c74695f76616c75655f75333200ad04176563686f5f6d756c74695f76616c75655f7475706c657300ae04126563686f5f7365725f6578616d706c655f3200af04106563686f5f73696d706c655f656e756d00b0041c66696e6973685f73696d706c655f656e756d5f76617269616e745f3100b104136563686f5f6e6f6e5f7a65726f5f7573697a6500b2041c6563686f5f736f6d655f617267735f69676e6f72655f6f746865727300b3040d6563686f5f617272617976656300b4040d6563686f5f6269675f75696e7400b5040c6563686f5f6269675f696e7400b604136563686f5f6d616e616765645f62756666657200b704146563686f5f6d616e616765645f6164647265737300b804186563686f5f6269675f696e745f6d616e616765645f76656300b904126563686f5f6269675f696e745f7475706c6500ba04136563686f5f6269675f696e745f6f7074696f6e00bb041b6563686f5f7475706c655f696e746f5f6d756c7469726573756c7400bc041f6563686f5f6d616e616765645f7665635f6f665f6d616e616765645f76656300bd04246563686f5f6d616e616765645f7665635f6f665f746f6b656e5f6964656e74696669657200be041f6563686f5f6d616e616765645f6173796e635f726573756c745f656d70747900bf04176563686f5f7661726167735f6d616e616765645f73756d00c00412636f6d707574655f6765745f76616c75657300c10411636f6d707574655f6372656174655f656300c20415636f6d707574655f6765745f65635f6c656e67746800c30420636f6d707574655f6765745f707269765f6b65795f627974655f6c656e67746800c4040e636f6d707574655f65635f61646400c50411636f6d707574655f65635f646f75626c6500c60416636f6d707574655f69735f6f6e5f63757276655f656300c70413636f6d707574655f7363616c61725f6d756c7400c80418636f6d707574655f7363616c61725f626173655f6d756c7400c90412636f6d707574655f6d61727368616c5f656300ca041d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300cb0414636f6d707574655f756e6d61727368616c5f656300cc041f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f656300cd0417636f6d707574655f67656e65726174655f6b65795f656300ce04096c6f674576656e744100cf040f6c6f674576656e744152657065617400d004096c6f674576656e744200d104136f6e6c795f6f776e65725f656e64706f696e7400d2041a6f6e6c795f757365725f6163636f756e745f656e64706f696e7400d3040e726571756972655f657175616c7300d4040873635f70616e696300d504136d616464726573735f66726f6d5f617272617900d6041c6d616464726573735f66726f6d5f6d616e616765645f62756666657200d7040b6d6275666665725f6e657700d8040e6d6275666665725f636f6e63617400d904126d6275666665725f636f70795f736c69636500da04126d6275666665725f7365745f72616e646f6d00db040a6d6275666665725f657100dc04146d616e616765645f616464726573735f7a65726f00dd04126d616e616765645f616464726573735f657100de040f6d616e616765645f7665635f6e657700df04186d616e616765645f7665635f62696775696e745f7075736800e004166d616e616765645f7665635f62696775696e745f657100e104186d616e616765645f7665635f616464726573735f7075736800e2040f6d616e616765645f7665635f73657400e304126d616e616765645f7665635f72656d6f766500e404106d616e616765645f7665635f66696e6400e504146d616e616765645f7665635f636f6e7461696e7300e604166d616e616765645f7665635f61727261795f7075736800e704146d616e616765645f7265665f6578706c6963697400e8041073746f726167655f726561645f72617700e9041173746f726167655f77726974655f72617700ea041973746f726167655f726561645f66726f6d5f6164647265737300eb040a6c6f61645f627974657300ec040d6c6f61645f6269675f75696e7400ed040c6c6f61645f6269675f696e7400ee04086c6f61645f75363400ef040a6c6f61645f7573697a6500f004086c6f61645f69363400f104096c6f61645f626f6f6c00f204096c6f61645f6164647200f3040d6c6f61645f6f70745f6164647200f4041169735f656d7074795f6f70745f6164647200f5040f6765745f6e725f746f5f636c65617200f60413636c6561725f73746f726167655f76616c756500f7040a6c6f61645f7365725f3200f804096c6f61645f6d61703100f904096c6f61645f6d61703200fa04096c6f61645f6d61703300fb04156c6f61645f66726f6d5f616464726573735f72617700fc040b73746f72655f627974657300fd040e73746f72655f6269675f75696e7400fe040d73746f72655f6269675f696e7400ff040b73746f72655f7573697a650080050973746f72655f6933320081050973746f72655f7536340082050973746f72655f6936340083050a73746f72655f626f6f6c0084050a73746f72655f616464720085050e73746f72655f6f70745f616464720086050b73746f72655f7365725f320087050a73746f72655f6d6170310088050a73746f72655f6d6170320089050a73746f72655f6d617033008a051273746f72655f72657365727665645f693634008b051773746f72655f72657365727665645f6269675f75696e74008c051573746f72655f72657365727665645f7665635f7538008d051b616464726573735f746f5f69645f6d61707065725f6765745f6964008e0524616464726573735f746f5f69645f6d61707065725f6765745f69645f6e6f6e5f7a65726f008f0520616464726573735f746f5f69645f6d61707065725f6765745f616464726573730090051d616464726573735f746f5f69645f6d61707065725f636f6e7461696e7300910518616464726573735f746f5f69645f6d61707065725f73657400920525616464726573735f746f5f69645f6d61707065725f6765745f69645f6f725f696e7365727400930521616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f696400940526616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f616464726573730095050d6765744c6973744d6170706572009605126c6973744d6170706572507573684261636b009705136c6973744d61707065725075736846726f6e74009905126c6973744d6170706572506f7046726f6e74009a05116c6973744d6170706572506f704261636b009b050f6c6973744d617070657246726f6e74009c050e6c6973744d61707065724261636b009d05136c6973744d6170706572507573684166746572009e05146c6973744d6170706572507573684265666f7265009f05146c6973744d617070657252656d6f76654e6f646500a005186c6973744d617070657252656d6f76654e6f64654279496400a105126c6973744d617070657253657456616c756500a205166c6973744d617070657253657456616c75654279496400a305176c6973744d617070657249746572617465427948616e6400a405176c6973744d61707065724974657261746542794974657200a5050c71756575655f6d617070657200a6051671756575655f6d61707065725f707573685f6261636b00a7051671756575655f6d61707065725f706f705f66726f6e7400a8051271756575655f6d61707065725f66726f6e7400a9050a6d61705f6d617070657200aa050f6d61705f6d61707065725f6b65797300ab05116d61705f6d61707065725f76616c75657300ac05116d61705f6d61707065725f696e7365727400ad05176d61705f6d61707065725f636f6e7461696e735f6b657900ae050e6d61705f6d61707065725f67657400af05116d61705f6d61707065725f72656d6f766500b0052c6d61705f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e7400b105226d61705f6d61707065725f656e7472795f6f725f696e736572745f64656661756c7400b2051b6d61705f6d61707065725f656e7472795f616e645f6d6f6469667900b305236d61705f6d61707065725f656e7472795f6f725f696e736572745f776974685f6b657900b405176d61705f73746f726167655f6d61707065725f7669657700b505216d61705f73746f726167655f6d61707065725f696e736572745f64656661756c7400b6051f6d61705f73746f726167655f6d61707065725f636f6e7461696e735f6b657900b705166d61705f73746f726167655f6d61707065725f67657400b8051f6d61705f73746f726167655f6d61707065725f696e736572745f76616c756500b9051c6d61705f73746f726167655f6d61707065725f6765745f76616c756500ba05196d61705f73746f726167655f6d61707065725f72656d6f766500bb05186d61705f73746f726167655f6d61707065725f636c65617200bc05346d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e7400bd05386d61705f73746f726167655f6d61707065725f656e7472795f616e645f6d6f646966795f696e6372656d656e745f6f725f64656661756c7400be052a6d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f75706461746500bf050a7365745f6d617070657200c005117365745f6d61707065725f696e7365727400c105137365745f6d61707065725f636f6e7461696e7300c205117365745f6d61707065725f72656d6f766500c3051a6d61705f6d795f73696e676c655f76616c75655f6d617070657200c405226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3100c505226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3200c6052c6d795f73696e676c655f76616c75655f6d61707065725f73756274726163745f776974685f7265717569726500c705236d795f73696e676c655f76616c75655f6d61707065725f7365745f69665f656d70747900c80519636c6561725f73696e676c655f76616c75655f6d617070657200c905246765745f66726f6d5f616464726573735f73696e676c655f76616c75655f6d617070657200ca052769735f656d7074795f61745f616464726573735f73696e676c655f76616c75655f6d617070657200cb05237261775f627974655f6c656e6774685f73696e676c655f76616c75655f6d617070657200cc050a7665635f6d617070657200cd050f7665635f6d61707065725f7075736800ce050e7665635f6d61707065725f67657400cf05197665635f6d61707065725f6765745f61745f6164647265737300d0050e7665635f6d61707065725f6c656e00d105197665635f6d61707065725f6c656e5f61745f6164647265737300d20514746f6b656e5f617474726962757465735f73657400d30517746f6b656e5f617474726962757465735f75706461746500d4051f746f6b656e5f617474726962757465735f6765745f6174747269627574657300d5051a746f6b656e5f617474726962757465735f6765745f6e6f6e636500d60516746f6b656e5f617474726962757465735f636c65617200d7051f746f6b656e5f617474726962757465735f6861735f6174747269627574657300d805106164645f746f5f77686974656c69737400d9051572656d6f76655f66726f6d5f77686974656c69737400da050e636865636b5f636f6e7461696e7300db0519636865636b5f636f6e7461696e735f61745f6164647265737300dc0510726571756972655f636f6e7461696e7300dd051b726571756972655f636f6e7461696e735f61745f6164647265737300de051f69737375655f66756e6769626c655f64656661756c745f63616c6c6261636b00df051e69737375655f66756e6769626c655f637573746f6d5f63616c6c6261636b00e0052069737375655f616e645f7365745f616c6c5f726f6c65735f66756e6769626c6500e105187365745f6c6f63616c5f726f6c65735f66756e6769626c6500e2050d6d696e745f66756e6769626c6500e305166d696e745f616e645f73656e645f66756e6769626c6500e4050d6275726e5f66756e6769626c6500e505146765745f62616c616e63655f66756e6769626c6500e6051b726571756972655f73616d655f746f6b656e5f66756e6769626c6500e7051f726571756972655f616c6c5f73616d655f746f6b656e5f66756e6769626c6500e8051267657446756e6769626c65546f6b656e496400e9051c69737375655f616e645f7365745f616c6c5f726f6c65735f6d65746100ea05176d61707065725f6e66745f7365745f746f6b656e5f696400eb05116d61707065725f6e66745f63726561746500ec051a6d61707065725f6e66745f6372656174655f616e645f73656e6400ed05176d61707065725f6e66745f6164645f7175616e7469747900ee05206d61707065725f6e66745f6164645f7175616e746974795f616e645f73656e6400ef050f6d61707065725f6e66745f6275726e00f005166d61707065725f6e66745f6765745f62616c616e636500f1051b6d61707065725f6765745f746f6b656e5f6174747269627574657300f205156765744e6f6e46756e6769626c65546f6b656e496400f30515696e69745f756e697175655f69645f6d617070657200f40514756e697175655f69645f6d61707065725f67657400f5051c756e697175655f69645f6d61707065725f737761705f72656d6f766500f60514756e697175655f69645f6d61707065725f73657400f70510756e697175655f69645f6d617070657200f805116d616e616765645f7374727563745f657100f9050c6f766572666c6f775f75313600fa050f6e6f5f6f766572666c6f775f69313600fb050c6f766572666c6f775f69313600fc0515746f6b656e5f6964656e7469666965725f65676c6400fd051b746f6b656e5f6964656e7469666965725f69735f76616c69645f3100fe051b746f6b656e5f6964656e7469666965725f69735f76616c69645f3200ff05136e6f6e5f7a65726f5f7573697a655f69746572008006146e6f6e5f7a65726f5f7573697a655f6d6163726f008106147365745f636f6e74726163745f616464726573730082061369735f656d7074795f61745f6164647265737300830613636f6e7461696e735f61745f616464726573730084060e6c656e5f61745f616464726573730085060f66696c6c5f7365745f6d61707065720086060863616c6c4261636b008706196563686f5f7661726167735f6d616e616765645f656167657200ad04136269675f75696e745f66726f6d5f7536345f3200c103126269675f696e745f66726f6d5f6936345f3200c5031c69735f656d7074795f73696e676c655f76616c75655f6d617070657200ca050e6f766572666c6f775f7573697a6500fa050b6f766572666c6f775f753800fa050c6f766572666c6f775f75333200fa050c6f766572666c6f775f75363400fa050e6f766572666c6f775f6973697a6500fc050b6f766572666c6f775f693800fc050c6f766572666c6f775f69333200fc050c6f766572666c6f775f69363400fc050a6563686f5f7573697a6500a504116c6f67325f6269675f75696e745f72656600ba03176164645f61737369676e5f6269675f75696e745f72656600e503177375625f61737369676e5f6269675f75696e745f72656600e803166d756c5f61737369676e5f6269675f696e745f72656600e903176d756c5f61737369676e5f6269675f75696e745f72656600ea03166469765f61737369676e5f6269675f696e745f72656600eb03176469765f61737369676e5f6269675f75696e745f72656600ec031672656d5f61737369676e5f6269675f696e745f72656600ed031772656d5f61737369676e5f6269675f75696e745f72656600ee031b6269745f616e645f61737369676e5f6269675f75696e745f72656600f5031a6269745f6f725f61737369676e5f6269675f75696e745f72656600f6031b6269745f786f725f61737369676e5f6269675f75696e745f72656600f703177368725f61737369676e5f6269675f75696e745f72656600fc031773686c5f61737369676e5f6269675f75696e745f72656600fd0311737172745f6269675f75696e745f72656600b903206269675f75696e745f66726f6d5f6d616e616765645f6275666665725f72656600c303116e6f5f6f766572666c6f775f7573697a6500fb050e6e6f5f6f766572666c6f775f753800fb050f6e6f5f6f766572666c6f775f75333200fb050f6e6f5f6f766572666c6f775f75363400fb050f6e6f5f6f766572666c6f775f75313600fb05116e6f5f6f766572666c6f775f6973697a6500fb050e6e6f5f6f766572666c6f775f693800fb050f6e6f5f6f766572666c6f775f69333200fb050f6e6f5f6f766572666c6f775f69363400fb050f706f775f6269675f696e745f72656600bb0310706f775f6269675f75696e745f72656600bc030a5f5f646174615f656e6403010b5f5f686561705f6261736503020ae3e8029d050a0041808008410f106f0b1101017f107122022000200110241a20020b1601017f1071220142001001200120012000100220010b2701027f41b09808280200220141016b2200200148044041b09808200036020020000f0b1076000b0d0020004116418f8008108a060b7301027f230041106b22022400027f410020011095012201108e020d001a2001101241074604402002410036000b2002410036020820014100200241086a2203410710a8011a41012003410741e78f08410710d0010d011a0b41020b21032000200136020420002003360200200241106a24000b0900200020011003000b2e000240200120024d0440200220044d0d011076000b1076000b2000200220016b3602042000200120036a3602000b060010b603000b0f01017f10042201200010051a20010b0b0020002001100641004a0b1100200041024f0440200110771a0b20000b5b01037f230041106b2203240020012802042202047f200341086a200128020022042802002002107b2001200328020c36020420042802002002107c210241010541000b21012000200236020420002001360200200341106a24000b820101027f230041206b220324002003410c6a2204200141c98708410b200210cc02109401200410d30221012003410c6a10d3022102200328020c200328021010c40104402003411c6a2d0000044041c4e608410036020041c8e60841003a00000b2000200236020420002001360200200341206a24000f0b41a58008410e10ff01000b1200200041d487084106200110cc02109f020b0f002000200141db8008411b107e000b160020002001106f220020022003100e1a20001000000b820101017f230041306b2202240020002001280200047f200241286a2001410c6a2902003702002002410136021c200220012902043702202002410c6a2002411c6a10800120012001280214280200200241146a22012802001081012000410c6a20012902003702002000200229020c37020441010541000b360200200241306a24000b280020012802004504401076000b20002001290204370200200041086a2001410c6a2902003702000b2401017f20002001200210dd02047f410005200041046a2001200210de0241010b3602000b7001027f230041106b22022400200241086a2001107a20002002280208410146047f200220012802082201280200200141086a280200200228020c2201108301200228020421032002280200108401200041086a20033602002000200136020441010541000b360200200241106a24000b2a002001200310ba02047f2002200310b902210341010541000b210120002003360204200020013602000b0b0020004504401076000b0b0c002001200010860110071a0b0f01017f107122012000102e1a20010b6f01027f230041106b220124002000027f41c8e6082d0000220245044041c8e60841013a000041c4e6084100360200200141086a41001088012001280208200128020c41d894084100108901108a010c010b41d894084100106f0b360200200020024101733a0004200141106a24000b3e01017f230041106b22022400200241086a41b498084190ce00200110fb01200228020c21012000200228020836020020002001360204200241106a24000bb50201067f200120034604402001220341104f04402000410020006b41037122046a210520040440200221010340200020012d00003a0000200141016a2101200041016a22002005490d000b0b2005200320046b2203417c7122066a21000240200220046a22044103710440200641004c0d012004410374220141187121072004417c71220841046a2102410020016b4118712109200828020021010340200520012007762002280200220120097472360200200241046a2102200541046a22052000490d000b0c010b200641004c0d0020042102034020052002280200360200200241046a2102200541046a22052000490d000b0b20034103712103200420066a21020b20030440200020036a21010340200020022d00003a0000200241016a2102200041016a22002001490d000b0b0f0b1076000b1301017f1071220041d89408410010241a20000b0c0020002001108c0110081a0b4901017f230041106b22022400200220013a000c20022000360208200241086a109d02200228020820022d000c044041c4e608410036020041c8e60841003a00000b200241106a24000b0c0020002001108e01108f010b0d0020001071220010181a20000b3301017f200110122102200041106a41003a00002000410c6a20023602002000200136020820002002360204200041003602000b0c00200010910120011092010b0f01017f107122012000102b1a20010b5101027f230041106b22022400200220001012220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410f7012001200010e401200241106a24000b0c00200010860120011092010b0c0020002001109501108f010b0d0020001071220010321a20000b3b01017f230041106b22032400200341086a20011095012002109701200328020c21012000200328020836020020002001360204200341106a24000b5b01027f230041106b2203240020011012220441084d0440200341086a2002200410fe012001410020032802082201200328020c220210a8011a2000200236020420002001360200200341106a24000f0b41a58008410e10ff01000b0900200020011074000be90101047f108a012106108a012107230041106b22042400108a0121052001107721012003107021032004200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484843702042004200141187420014180fe03714108747220014108764180fe0371200141187672723602002004200341187420034180fe03714108747220034108764180fe03712003411876727236020c200520044110100e1a20002005420020062007100f1a200441106a24000b150020002001200241ba8108410b41ad81081089060b0f00108a011a20002001107710b3010b1501017f108a012202200110fc012000200210b3010b1000108a011a2000200110860110b3010b1d004167100a200041674200100b2001200210712201100c1a100d20010b150020002001200241d28108411241c581081089060b0c01017f10712200101020000b0c01017f10712200101120000b2e01027f10712103200110122104200010a301200141f5e60810131a41d5e60841f5e608200420022003101420030b0b00200041d5e60810131a0b0c01017f10712200101520000b2b01017f41d0e6082d000022000440417541ffffffff0720001b0f0b41d0e60841013a00004175101641750bbd01020a7f017e230041206b22012400024010a701220410124170714110460440200410122105200141106a2106410121030340200241106a220720054b0d02200642003703002001420037030820042002200141086a2202411010a8011a2001410036021c200320022001411c6a220310a90121092002200310aa01210b2002200310a901210a20072102410021030d000b10b603000b4191820841221003000b2000200a36020c200020093602082000200b370300200141206a24000b2b01017f41d4e6082d000022000440416b41ffffffff0720001b0f0b41d4e60841013a0000416b1017416b0b0f002000200120032002106c4100470b7f01037f230041106b220224002002410036020c2001280200220341046a220420034904401076000b2002200320042000411010752002410c6a41042002280200200228020410890120012004360200200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720bb30102017e037f230041106b22032400200342003703082001280200220441086a220520044904401076000b200320042005200041101075200341086a4108200328020020032802041089012001200536020020032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b2e01017f41b382084117106f220420002001100e1a200441ca82084103100e1a200420022003100e1a20041000000b120010194504400f0b41cd820841251003000b3001017f2000280200220341cce6082802004e04402001200241f28208411110ab01000b2000200341016a36020020030b2c01017e2000101d22034280808080087d42ffffffff6f5804402001200241a99008411210ab01000b2003a70b5d01027f027f410020012002200310b001220445200441ebde0146720d001a200128020041cce6082802004e0440108a01210541010c010b20012002200310b101210541010b21012000200536020820002004360204200020013602000b120020002001200210ad012001200210bb010b0e0020002001200210ad01108e010b2f01017f108a0121030340200028020041cce6082802004e450440200320002001200210b10110b3010c010b0b20030b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100e1a200241106a24000b21002000108e012200101241204704402001200241ee8f08411010ab01000b20000b2b00200041bb9008410e10b601107722001012412047044041bb9008410e41ee8f08411010ab01000b20000b5e01027f230041106b22032400200341086a200028020020002802082204109902024020032802084101460440200441016a22010d011076000b2001200241f28208411110ab01000b200328020c200020013602081077200341106a24000b0d00200041bb8e08410b10b8010b0d0020002001200210b60110770ba70101027f230041106b22022400027f200141b98f08410610b001220341ebde0147410020031b450440200141b98f08410610ad01108e0121012002410036020441040c010b027f200128020041cce6082802004e0440108a010c010b200141b98f08410610b1010b2101200220033602082002410136020441080b200241046a6a200136020020002002290204370200200041086a2002410c6a280200360200200241106a24000b0b0020002001200210bb010b2601017e2000101b220342ffffffff0f5804402003a70f0b2001200241a58008410e10ab01000b1300200020014d0440200120006b0f0b1076000b6101027f230041106b22042400200441086a2000280208200028020022052001108202024020042802084101460440200120056a220120054f0d011076000b2002200341d18508410f10ab01000b200428020c20002001360200200441106a24000b2301017e2000101b220342ff015804402003a70f0b2001200241a58008410e10ab01000bde0102037f017e230041206b22022400200241046a22032001108d01200341cb8f08410a10c0012104200242003703182003200241186a2201410841cb8f08410a10c10120014108410010c2012105200341cb8f08410a10c3012101108a0121030340200104402003200241046a41cb8f08410a10c30110b301200141016b21010c010b0b2002280204200228020810c4010440200241146a2d0000044041c4e608410036020041c8e60841003a00000b2000200336020c2000200436020820002005370300200241206a24000f0b41cb8f08410a41a58008410e10ab01000b0e0020002001200210c7011081020b43000240200041086a200028020020012002109b024504402000280200220120026a220220014f0d011076000b2003200441d18508410f10ab01000b200020023602000b4401017e02402001450d002002044020002c0000410775ac21030b03402001450d01200141016b210120003100002003420886842103200041016a21000c000b000b20030b3902017f017e230041106b220324002003410036020c20002003410c6a220041042001200210c10120004104410010c201200341106a2400a70b0a002000200110bc01450b0d00410041dc8d08410110ae010b3001017f230041106b22032400200341003a000f20002003410f6a41012001200210c10120032d000f200341106a24000b1400200020002001200210c3012001200210bd010b0b0020002001200210b4010b1000200041cb8b08410110c7011080020ba10101037f230041206b220124002001410c6a22022000108d01200241cb8f08410a10c60121002001410c6a41cb8f08410a10c60121022001410c6a41cb8f08410a10c6012103200128020c200128021010c40104402001411c6a2d0000044041c4e608410036020041c8e60841003a00000b200141206a2400200041ff01712003411074200241ff017141087472720f0b41cb8f08410a41a58008410e10ab01000b0c00200010712200101c20000b1f01017f230041106b220124002000450440200141106a24000f0b10b603000b3301017e027f02402000101b2202420158044041002002a741016b0d021a0c010b2001410141a99008411210ab01000b41010b0b2601017e4100101d22024280017d42ff7d5804402000200141a99008411210ab01000b2002a70bfa0102027f017e230041206b22032400024002404100101a450d002003410c6a22044100108d010240024002400240024020042001200210c60141ff017122040e0404010203000b2001200241b38008410d10ab01000b2003410c6a2001200210c301ad2105410121040c020b2003410c6a2001200210c301ad2003410c6a2001200210c301ad422086842105410221040c010b2003410c6a2001200210c301ad2105410321040b200328020c200328021010c401450d012003411c6a2d0000450d0041c4e608410036020041c8e60841003a00000b2000200537020420002004360200200341206a24000f0b2001200241a58008410e10ab01000b5301027f2001200346047f4100210302402001450d00034020002d0000220420022d00002205460440200041016a2100200241016a2102200141016b22010d010c020b0b200420056b21030b20030541010b450b9a0101047f230041206b220324002000108e012104108a0121052004101221002003411c6a41003a0000200341186a200036020020032004360214200320003602102003410036020c037f2006200010bc01047f20052003410c6a2001200210c00110b30120032802102100200328020c21060c010520032d001c044041c4e608410036020041c8e60841003a00000b200341206a240020050b0b0b920101037f230041206b220324002003410c6a22042001108d0120042002410210c001210120042002410210c301210520042002410210c7012104200328020c200328021010c40104402003411c6a2d0000044041c4e608410036020041c8e60841003a00000b200020043602082000200536020420002001360200200341206a24000f0b2002410241a58008410e10ab01000b0c00200010712200101e20000be20102057f017e230041206b2204240020042001108d01200441186a21074105210103402001044020042002200310c6012106200541044b2208450440200520076a20063a0000200541016a21050b200810cc01200141016b21010c01050240200541054f0d002002200341869008411210ab01000b0b0b200429021821092004280200200428020410c4010440200441106a2d0000044041c4e608410036020041c8e60841003a00000b20002009a722013b0000200020094218883d0003200041026a20014110763a0000200441206a24000f0b2002200341a58008410e10ab01000b1900200041cce6082802004e04400f0b4183830841121003000b1400200020014d04400f0b4183830841121003000b1400101f20004604400f0b4195830841191003000b1900200041cce6082802004c04400f0b41f2820841111003000b0b0041cce608101f3602000b2001017f200110db0121022000410036020820002002360204200020013602000b0900200010124102760bab0101047f230041206b22012400200141086a108701200120012d000c3a00182001200128020836021420001012210402400340200241046a22032002490d01200320044d04402001410036021c200020022001411c6a410410dd011a200128021c220241187420024180fe03714108747220024108764180fe037120024118767272200141146a109301200321020c010b0b200128021420012d0018108b01200141206a24000f0b1076000b0d00200020012002200310a8010b5d01027f230041106b220124002001108701200120012d00043a000c200120012802003602082000280208200141086a22021092012000290300200210df01200028020c2002109301200128020820012d000c108b01200141106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810f701200241106a24000b0d0020004504402001ad10200b0b0a0020001021200110210b6001017f230041106b220224000240200045044041d89408410010220c010b2002108701200220022d00043a000c20022002280200360208200241086a2200410110e3012000200110e401200228020820022d000c108b010b200241106a24000b2701017f230041106b22022400200220013a000f20002002410f6a410110f701200241106a24000b8b0101027f230041106b220324000240024020002d000404402001101221021099032002490d0141c4e608280200220020026a220220004f0440200341086a20002002109a03200141002003280208200328020c10dd011a41c4e60820023602000c030b1076000b20002802002001108d020c010b2000109d0220002802002001108d020b200341106a24000b5001017f230041206b2201240020012000280200101236021c20014100360218200120003602140340200141086a200141146a10e60120012802080440200128020c10081a0c010b0b200141206a24000b9c0101047f230041106b22032400027f02402001280204220241046a220420024f0440200420012802084d0d0141000c020b1076000b20012802002003410036020c28020020022003410c6a410410dd011a200328020c210220012004360204200241187420024180fe03714108747220024108764180fe037120024118767272210241010b21012000200236020420002001360200200341106a24000bff0101027f230041206b2201240002400240024002400240200028020041016b0e03010203000b420010200c030b2001108701200120012d00043a001c20012001280200360218200141186a2202410110e3012000280204200210e801200128021820012d001c108b010c020b200141086a108701200120012d000c3a001c20012001280208360218200141186a2202410210e3012000280204200210e8012000280208200210e801200128021820012d001c108b010c010b200141106a108701200120012d00143a001c20012001280210360218200141186a2202410310e3012000280204200210e801200128021820012d001c108b010b200141206a24000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410f701200241106a24000b2a00200028020004402000280204200041086a2802001074000b2000280204200041086a28020010ea010b6001017f230041106b220224000240200045044041d89408410010220c010b2002108701200220022d00043a000c20022002280200360208200241086a2200410110e3012001200010e801200228020820022d000c108b010b200241106a24000b7b01027f230041106b220124002001108701200120012d00043a000c200120012802003602082000280200200141086a22021093012000280204200210930120002802082002109301200028020c2002109301200028021020021093012000280214200210e801200128020820012d000c108b01200141106a24000b20002000200120021023200010ed0141ff017104400f0b41cc830841301003000b1500410241012000106b22001b4100200041004e1b0b220020002001200210ef0120004181840841fc830820031b4104410520031b10ef010b0d00200020012002106f10b3010b080020004120106f0b2b0020022003106f2102108a0121032000427f3703082000200336020420002002360200200020013602100b1601017f108a0122022001ad10fc012000200210b3010bbc0101027f230041206b22052400200541e3840810f00141908508411610f101200541186a22062001360200200528020422012002109b0120002005290308370308200041106a200541106a290300370300200041186a20062903003703002005280200210220012003109b01200441ff0171410274220341f093086a28020021042003418494086a2802002103108a0122062003200410241a2001200610b3012001410010f2012000200136020420002002360200200541206a24000bc90101057f230041306b2201240020002802102202044010f501200141106a108701200120012d00143a00202001200128021036021c200041146a28020022032001411c6a220410f60120042002200310f701200041186a2202280200220310db01200410f60120012003101236022c20014100360228200120023602240340200141086a200141246a10e60120012802080440200128020c2001411c6a1092010c010b0b200128021c20012d002010f8010b2000280208200028020c20002802002000280204106d000b1a01027f10a101210041c78508410a106f2201200010051a20010b09002000200110e8010b880101027f230041106b220324000240024020002d000404401099032002490d0141c4e608280200220020026a220420004f0440200341086a20002004109a032003280208200328020c2001200210890141c4e60820043602000c030b1076000b200028020020012002100e1a0c010b2000109d02200028020020012002100e1a0b200341106a24000b0e00200020012002108c0110071a0b4301027f230041106b2203240020022000280220460440200341086a410020022000412010752003280208200328020c2001200210d00121040b200341106a240020040b9e0101057f230041306b22022400200241286a22034200370300200241206a22044200370300200241186a2205420037030020024200370310200241086a200241106a412020011012220610fb01200141002002280208200228020c10dd011a20002006360220200041186a2003290300370000200041106a2004290300370000200041086a200529030037000020002002290310370000200241306a24000b3b01017f230041106b22042400200441086a41002003200120021075200428020c21012000200428020836020020002001360204200441106a24000b3801017f230041106b2202240020024200370308200220014100200241086a109f0320002002280200200228020410241a200241106a24000b6101027f230041106b2203240020011012220441084d0440200341086a2002200410fe012001410020032802082201200328020c220210a8011a2000200236020420002001360200200341106a24000f0b41fe8f08410841a58008410e10ab01000b3a01017f230041106b22032400200341086a20014108200210fb01200328020c21012000200328020836020020002001360204200341106a24000b1a01017f41b58b084116106f220220002001100e1a20021000000b0d00200010712200102c1a20000b0d00200010712200102f1a20000b1f0020012002200310042201102821022000200136020420002002453602000b5d01027f230041106b22022400200241086a2000280208200028020022032001108202024020022802084101460440200120036a220120034f0d011076000b41d18508410f10ff01000b200228020c20002001360200200241106a24000b0b00200020012002100e1a0b0900200120001086020b1601017f108a0122022000ad10fc012001200210b3010b1e002001500440200010ed0141016b0f0b417220011001200041721088020b1500417f200020011035220041004720004100481b0b15002000420053044041e0850841111003000b20000b0e002000200110880241ff0171450b5301057f20014200100b22024200100b22034200100b22044200100b22054200100b220610251a200020011026360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41f18508200141e001460d001a2001418904470440200141800347044041002001418002470d031a41f585080c020b41f985080c010b41fd85080b41041027210241010b210120002002360204200020013602000b09002000200110051a0b070020001012450b0c00200020002001100220000b1001017f1071220220002001100220020b0a0020002000200110020b0a0020002000200110230b1301017f1071220220002001109402102d20020b0b0041722000ad100141720b0e01017f107122004200100120000b0b002000200110890210010bb40101077f230041106b2204240020011012210703400240027f02402008220541ffffffff03470440200641046a220920074d0d0141000c020b1076000b2004410036020c200120062004410c6a410410dd011a200428020c220341187420034180fe03714108747220034108764180fe0371200341187672722002108a02450d012005210341010b21012000200336020420002001360200200441106a24000f0b200541016a210820092106200521030c000b000b5301017f230041106b2204240020034102742203200241027422024f0440200441086a20012002200320026b108202200428020c21012000200428020836020020002001360204200441106a24000f0b1076000b7501017f230041106b22032400200241ffffffff034d04402003410036020c200120024102742003410c6a410410dd012102200328020c2101200020024101733602002000200141187420014180fe03714108747220014108764180fe037120014118767272360204200341106a24000f0b1076000b0900200010314100470bc50101037f230041106b220424000240027f024020002d000845044020002802002205101222064190ce004b0d0141c8e6082d00000d0141c4e608200636020041c8e60841013a0000200441086a2006108801200541002004280208200428020c10dd011a200041013a00080b200120036a22002001490d024101200041c4e6082802004b0d011a200420012000109c02200220032004280200200428020410890141000c010b200041003a0008200520012002200310dd010b200441106a24000f0b1076000b32000240200120024d044020024190ce004d0d011076000b1076000b2000200220016b3602042000200141b498086a3602000b5801027f230041106b2201240020002d0004200041003a00040440200141086a410041c4e608280200109c0220002802002001280208200128020c100e1a41c4e608410036020041c8e60841003a00000b200141106a24000b0a0020001095011080020b2201017e200010a00222014280808080105a044041a58008410e10ff01000b2001a70b3802017f017e230041106b220124002001420037030820012000200141086a10960120012802002001280204410010c201200141106a24000b1d00200010950122001012412047044041ee8f08411010ff01000b20000b3001017e027f0240200010a0022201420158044041002001a741016b0d021a0c010b41a99008411210ff01000b41010b0b0a0020001095011081020b1f01017e200010a00222014280025a044041a58008410e10ff01000b2001a70b0d002000416710321a416710120b09002000200110a7020b09002000200110071a0b3400024002400240200141016b0e020102000b41d894084100200010a9020f0b41e78f084107200010a9020f0b2000200210a7020b0b0020022000200110ab020b0d00200041d89408410010ab020b0d00200020012002106f10071a0b0c002000200110910110071a0b1400416c41d89408410010241a2000416c10071a0b2401017e2000200110af0222024280808080105a044041a58008410e10ff01000b2002a70b3d02017f017e230041106b220224002002420037030820022000200110b202200241086a10970120022802002002280204410010c201200241106a24000b09002000200110b1020b0e002000200141671033416710120b0e002000200110712200103320000b0c002000200110b40210ad020b1a0020001077220041b587084107100e1a2001200010b80220000b5602037f017e230041106b22042400200441086a20012802002205200128020822062002108301200429030821072006200210b4022003ad10b60220052001280204200210b7021a20002007370300200441106a24000b0b002000200141001088060b2c01017f2000200210ba0222034504402001200210c20221012000200210c1022001ad10b6020b20034101730b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104108402200241106a24000b0c002000200110b402109f020b0c002000200110c4024100470b2801017f2001280200200210ba022103200041086a200236020020002001360204200020033602000b3801017f230041106b22022400200241086a2000280200200041086a2802002001108301200228020c2002280208108401200241106a24000b5601037f230041106b22022400200141086a28020021042001280204210320002001280200047f200405200241086a20032004410010be0220022802082103200228020c0b36020420002003360200200241106a24000b3001017f230041106b22042400200441086a20012002200310b5022000200136020020002002360204200441106a24000b2801017f20011077210320002002107736020c2000200336020820002002360204200020013602000b0c002000200110c10210aa020b1a0020001077220041bc87084108100e1a2001200010b80220000bb10101047f230041206b22022400200241106a200010ce020240200228021c41016a220304402002200336021c024020022802102205450440200220033602140c010b200241086a200020022802182204107b200020042002280208200310cf020b200020032004410010cf0220022003360218200041d487084106200310cc022001ad10b602200541016a22010d011076000b1076000b200220013602102000200241106a10d002200241206a240020030b3801027f230041106b220324002000200210c40222040440200341086a2001200410c5022000200210c0020b200341106a240020044100470b0c002000200110c102109f020be00101037f230041306b2203240002402002047f200341186a20012002107b200328021c210420032802182105200341206a200110ce02024020050440200341106a20012005107b200120052003280210200410cf020c010b200320043602240b024020040440200341086a20012004107b200120042005200328020c10cf020c010b200320053602280b2001200210cb0220012002107c21042001200210cd0220032802202202450d012003200241016b3602202001200341206a10d00241010541000b21012000200436020420002001360200200341306a24000f0b1076000b0c002000200110c702109f020b1a0020001077220041c487084105100e1a2001200010ca0220000b2401017e2001200010af0222024280808080105a044041a58008410e10ff01000b2002a70b2b0002402002450d002001109f022002490d002000200210c7022003ad10b6020f0b41eb950841121003000b09002000200110b8020b1200200041c98708410b200110cc0210aa020b180020001077220020012002100e1a2003200010b80220000b1200200041d487084106200110cc0210aa020bb30101047f230041206b2202240002400240200110d102220110a502450440410021010c010b2002410c6a22032001109401200310d30221012002410c6a10d30221032002410c6a10d30221042002410c6a10d3022105200228020c200228021010c401450d012002411c6a2d0000450d0041c4e608410036020041c8e60841003a00000b2000200536020c200020043602082000200336020420002001360200200241206a24000f0b41a58008410e10ff01000b5a01017f230041106b22042400200041c98708410b200110cc022004108701200420042d00043a000c200420042802003602082002200441086a220110e8012003200110e801200428020820042d000c10f801200441106a24000b870101027f230041106b22022400200010d102210002402001280200220304402002108701200220022d00043a000c200220022802003602082003200241086a220310e8012001280204200310e8012001280208200310e801200128020c200310e8012000200228020820022d000c10f8010c010b200041d89408410010ab020b200241106a24000b130020001077220041da87084105100e1a20000b2f01017f230041106b220224002002200128020010ce022000200228020436020420002001360200200241106a24000b3502017f017e230041106b220124002001410036020c20002001410c6a2200410410870320004104410010c201200141106a2400a70bed0101037f230041206b2203240020021077220241da87084105100e1a024002402001200210b10245044041002101410021020c010b2001200210b2022202101221012003411c6a41003a0000200341186a200136020020032002360214200320013602102003410036020c2003410c6a10d30221012003410c6a10d30221022003410c6a10d30221042003410c6a10d3022105200328020c200328021010c401450d0120032d001c450d0041c4e608410036020041c8e60841003a00000b2000200536020c200020043602082000200236020420002001360200200341206a24000f0b41a58008410e10ff01000b190020001077220041ee87084104100e1a20002001ad10b6020b2f0002402002450d002001109f022002490d002000200210c702109f022200200220001b0f0b41eb950841121003000b15002000200120022003410020022003471b10c9020b110020012000200210d90210b0024100470b0f00200120001077220010da0220000b5101027f230041106b22022400200220001012220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410840220012000108d02200241106a24000b0f002000200110d90210a5024100470bc80101047f230041206b22022400024020002001280204220510dd024504402002200010ce020240200128020c22030440200241106a22042000200310de0220022001280208220136021820002003200410df020c010b2002200128020822013602040b024020010440200241106a22042000200110de022002200336021c20002001200410df020c010b200220033602080b2000200510e0024101410010ab0220022802002201450d012002200141016b3602002000200210d0020b200241206a24000f0b1076000b0d002000200110e00210a502450b9e0101037f230041206b220324002003410c6a22042001200210e002109401200410d30221012003410c6a10d30221022003410c6a10d30221042003410c6a10d3022105200328020c200328021010c40104402003411c6a2d0000044041c4e608410036020041c8e60841003a00000b2000200536020c200020043602082000200236020420002001360200200341206a24000f0b41a58008410e10ff01000b6e01017f230041106b220324002000200110e0022003108701200320032d00043a000c200320032802003602082002280200200341086a220110e8012002280204200110e8012002280208200110e801200228020c200110e801200328020820032d000c10f801200341106a24000b1a0020001077220041f287084105100e1a2001200010b80220000b2401017f20002001280204220310dd024504402001200236020020002003200110df020b0b6301027f230041306b2203240020002001200210dd02047f4100052003411c6a2204200120021081012003410c6a220220041080012001200210dc022000410c6a200341146a2902003702002000200329020c37020441010b360200200341306a24000b2701017f230041106b220224002002200110ce02200020012002280204108101200241106a24000b2f01017f230041106b2203240020032001280200200141086a280200200210e5022000200310e602200341106a24000b2401017f20002001200310ba02047f200041046a2002200310e70241010541000b3602000b280020012802004504401076000b20002001290204370200200041086a2001410c6a2802003602000b1f0020011077220141f787084108100e1a2002200110b8022000200110e8020b3501027f230041106b22022400200110772103200241086a20011097032000200229030837020020002003360208200241106a24000b3f01027f200141086a28020021032001280204210220012802004504402002280200200241046a280200200310b7021a0b20002003360204200020023602000b09002000420110eb020b0b002000200141011088060b09002000200110ac020b0800200010a502450b2f01017f2001200210ef02220110a502047f200110a102210141010541000b210320002001360204200020033602000b1a0020001077220041cc95084106100e1a2001200010f40220000b130020001077220041d695084106100e1a20000b16002000200210f20210ad022000200110ef0210ad020b1a0020001077220041d295084104100e1a20002001108d0220000b3e01017e200010f00210a00242017c2202504504402000200110f202200210b6022000200210ef02200110a602200010f002200210b60220020f0b1076000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108108402200241106a24000b0c002000200110f20210a0020b4601017f230041106b22012400200141086a20001073024002400240200128020841016b0e020102000b200141106a24000f0b4199880841181003000b41b1880841141003000b0c01017f10712200100a20000b1c0020002802004102460440200041046a0f0b41c5880841101003000b0f00108a011a20012000107710b3010b4001017f10a001200210fb022102108a01220310f90220032001109b01200020033602082000411c411020021b3602042000419a8908418a890820021b3602000b10002000420010870241ff01714101460b27002001200210fd02220142002003109f012000200336020c20004200370300200020013602080b180020004102460440200110770f0b41c5880841101003000b2d01017f230041106b22012400200141086a2000107320012802084101460440200010ad020b200141106a24000be503010a7f230041e0006b22062400200010f60202402005280200450440200641086a2000200410fa020c010b200641106a200541086a280200360200200620052902003703080b2006428182848080a0c0800137021c2006410036021820004101200610a802230041206b22072400200641186a22002d000b210820002d000a210920002d0009210a20002d0008210b20002d0007210c20002d0006210d20002d0005210e20002d0004210f20002802002105200741e3840810f00141a68508410510f101200741186a22002001360200200728020422012002109b0120012003109b01108a011a2001200410860110b3012001200510f2012001418584084109200f10ee012001418e84084107200e10ee012001419584084108200d10ee012001419d84084107200c10ee01200141a484084107200b10ee01200141ab8408410e200a10ee01200141b98408410a200910ee01200141c384084112200810ee01200641406b220141186a2000290300370300200141106a200741106a290300370300200141086a200741086a29030037030020012007290300370300200741206a24002006413c6a200641106a28020036020020062006290308370234200620062802583602302006200628025036022c20062006290340370224200641246a10f401000b0c002000200110810310a4020b1a0020001077220041f189084108100e1a2001200010da0220000b0f002000200110810310a5024100470b210020001077220041e489084105100e1a200120001084032002200010f40220000b2701017f230041106b22022400200220003a000f20012002410f6a4101108402200241106a24000b130020001077220041e989084108100e1a20000bd00101037f230041206b22042400200441046a22052001200220031083031094012005200510d3021083021081022106200442003703182005200441186a2201410810870320014108410010c2012103200441046a10d3022102108a0121010340200204402001200441046a10d30210b301200241016b21020c010b0b2004280204200428020810c4010440200441146a2d0000044041c4e608410036020041c8e60841003a00000b2000200136020c2000200636020820002003370300200441206a24000f0b41a58008410e10ff01000b3f000240200041086a200028020020012002109b024504402000280200220120026a220220014f0d011076000b41d18508410f10ff01000b200020023602000b0e002000200120021089034101730b0f0020002001200210830310a502450b6601017f230041106b220424002000200120021083032004108701200420042d00043a000c200420042802003602082003280208200441086a22011093012003290300200110df012003410c6a2001108b03200428020820042d000c10f801200441106a24000b5f01027f230041206b220224002000280200220310db01200110f60120022003101236021c20024100360218200220003602140340200241086a200241146a10e60120022802080440200228020c200110e8010c0105200241206a24000b0b0b900101017f230041206b2203240020001077220041f989084106100e1a200120001084032002280208108601200010da022002290300200010f402200228020c220110db01200010ca0220032001101236021c2003410036021820032002410c6a3602140340200341086a200341146a10e60120032802080440200328020c200010b8020c010b0b200341206a240020000b1000200020012002108c03200310b6020b0e00200020012002108c0310ad020bac0302047f017e230041306b220524002001200210fd022107108a01210210950221082005108a01220636021c108a0122012007109b0120012003109d0120012002109b0120012008109d0120012006109b01108a011077210220042d0000200210840320042d0001200210840320042d000220021084032001200210b30102402006101204402005200610123602282005410036022420052005411c6a3602200340200541106a200541206a10e6012005280210450d0220052802142102108a011a20012002107710b3010c000b000b108a01220241d89408410010241a2001200210b3010b200541086a100941e48108410d106f2001109e014100109902024020052802084101470d00200528020c22021012220141084b0d002005420037032020024100200520016b41286a200110a8010d002005290320220942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe0383200942388884848421090b2000200336020c2000200937030020002007360208200541306a24000b1600200020012802082001290300200128020c1099010b27002001200210fd02220120032004109f012000200436020c20002003370300200020013602080b1401017f108a01220220002001106f10b30120020bb90101037f230041406a22012400200141186a200041046a220210d202200120012903183702300340200141106a200141306a107a200128021004402000280200200128021410c0020c0105200141206a200228020010ce0220012802242100034020000440200141086a20022802002000107b200128020c2002280200200010cb022002280200200010cd0221000c010b0b200141386a4200370300200142003703302002280200200141306a10d002200141406b24000b0b0b6a01037f230041106b2201240020001095032102200141086a2000280208200028020022032002108202024020012802084101460440200220036a22022003490d01200128020c20002002360200200141106a24000f0b41948108411941d18508410f107e000b1076000b3b02017f017e230041106b220124002001410036020c20002001410c6a22004104419481084119109c0320004104410010c201200141106a2400a70b5701017f230041206b22012400200141106a200041046a10d202200120012903103702180340200141086a200141186a107a200128020804402000280208200128020c10b3020c01052000109303200141206a24000b0b0b1801017f20011077210220002001360204200020023602000b4f01017f230041206b2201240020012000280200101236021c20014100360218200120003602140340200141086a200141146a10e60120012802080440200135020c10200c010b0b200141206a24000b2001017f41c4e60828020022004190ce004d04404190ce0020006b0f0b1076000b3f01017f230041106b22032400200341086a2001200241b498084190ce001075200328020c21012000200328020836020020002001360204200341106a24000b4e00024020002802002000280204107941024704402001109a02450d01200028020841022001107710a80220002001360204200041023602000f0b41b1880841141003000b41c5880841101003000b42000240200041086a200028020020012002109b024504402000280200220120026a220220014f0d011076000b2003200441d18508410f107e000b200020023602000b3201017f230041106b22012400200141003a000f20002001410f6a410141e186084120109c0320012d000f200141106a24000b4001017f230041106b220224002002200136020c2002200036020803402002200241086a107a20022802000440200235020410200c0105200241106a24000b0b0b9e0202047f027e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882208200142288822094280fe0383848484370000200041084100200142005322072002716b41ff017122042008a746220520042001423088a741ff01714671220620056a20042009a741ff01714620067122056a20042001422088a741ff01714620057122056a200520042001a72205411876467122066a2004200541107641ff01714620067122066a2004200541087641ff01714620067122046a2004200150716a22042007200320044107716a2c0000410048732004410047712002716b22026b3602042000200220036a3602000b2c01017f230041106b22012400200141003a000f20002001410f6a410110870320012d000f200141106a24000b920301047f230041406a220324002003200110fa01024002402003280220450d00024002402003418a8908411010f9014504402003419a8908411c10f9010d012000200136020420004101360200200041086a20023602000c040b10d901410010d80120034100360224200341306a2201200341246a220410b901200328022410d5012003280230200328023421062004200210da0110d901200410b5012102200341386a22042003412c6a28020036020020032003290224370330200110b70121012003280234200428020010d6010d0120014102200610a8020c020b10d901410010d80120034100360224200341306a2201200341246a220441b98f08410610af01200328022410d50120032802302004200210da0110d901200410b5012102200341386a22062003412c6a28020036020020032003290224370330200110b70121012003280234200628020010d601450440200341306a10a60120014102200328023810a8020c020b200210a203200110ad020c010b200210a203200110ad020b200041003602000b200341406b24000b2f01017f10a501220110ed0141ff01714102460440416741d89408410010241a200020014200108a01416710341a0b0b0d00108a011a20002001107d000b1000200010a30141d5e608103641004a0b11002000280200200128020010784101730b1c01027f41f490084107109203108a0122022000ad10fc01200210370b0f00200041d79108410a106f10e8020b3c01027f230041106b22012400200141086a41c18f08410a106f109703200128020c21022000200128020836020020002002360204200141106a24000b2901027f41e19108410a106f22011077220241ee87084104100e1a20002002360204200020013602000b6402017f017e230041106b22012400200041fe8f08410810b60121002001420037030820012000200141086a10fd0120012802002001280204410010c20122024280808080105a044041fe8f08410841a58008410e10ab01000b200141106a24002002a70b0a0041b29208410c106f0b0a0041e592084116106f0b0a0041fb9208410b106f0b3d01037f230041106b22012400418693084112106f220210772103200141086a20021097032000200129030837020020002003360208200141106a24000b0a0041989308410b106f0b3601037f41a393084110106f22011077210220011077220341ee87084104100e1a2000200336020420002001360200200020023602080b0a0041b393084110106f0b0a0041c39308410f106f0b0d002000411341d29308108a060b09001038410010d7010b0d001038410010d70110b603000b0b0041a19808410e1003000b10001038410110d7014100101b7b10200b4502027f017e1038410310d701410010cb0121004101101b2102410241a88c08410410ba0121014172200210960220002000417210022000200020011094021002200010210b1e01027f1038410110d701410010cb0121001071220120001030200110210b13001038410110d701410010cb011039ad10200b1e001038410210d701410010d301410141f88b08410110ba01109302103a0b1e001038410210d701410010cb01410141f88b08410110ba0110930210210b3501017f230041106b220024001038410110d7012000410010cb0110be032000290300a70440200029030810200b200041106a24000b2901027e2001106941004c047e4200052001106a210242010b210320002002370308200020033703000b1d01017f1038410210d701410010cb0122004101101b109602200010210b0e001038410010d70110950210210b2002017e017f1038410110d7014100101b2100107122012000109602200110210b3f01027f230041106b220024001038410010d7012000427f3703082000427f37030041672000411010241a416710712201102f1a20011021200041106a24000b13001038410110d7014100108e0110810210210b1701017f1038410010d70110712200420010012000103a0b1f02017e017f1038410110d7014100101d210010712201200010012001103a0b20001038410210d701410010cb014101101b10890210870241ff017145ad103b0b3501017f230041106b220024001038410110d7012000410010d30110be032000290300a704402000290308103b0b200041106a24000b1c01017f1038410210d701410010d30122004101101d10012000103a0b2b01037f1038410110d701410010d301220010ed01107122022000103cad42ff018342017d103b200210210b4101027f1038410210d7014102410141948c08410410ce01220041ff01711b41002000c041004e1b410110cb01210041ff017145044020002000103d0b2000103a0b18001038410210d701410010d301410110d301108f02103a0b18001038410210d701410010d301410110cb01108f02103a0b18001038410210d701410010cb01410110d301108f02103a0b18001038410210d701410010d301410110cb01109002103a0b18001038410210d701410010cb01410110d301109002103a0b18001038410210d701410010d301410110d301109002103a0b1f01017f1038410210d701410010cb0122002000410110cb011002200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011002200210210b1f01017f1038410210d701410010d30122002000410110d30110232000103a0b2701037f1038410210d701410010d3012100410110d3012101107122022000200110232002103a0b2001017f1038410210d701410010cb0122002000410110cb0110ec01200010210b2801037f1038410210d701410010cb012100410110cb012101107122022000200110ec01200210210b1f01017f1038410210d701410010d30122002000410110d301103e2000103a0b2701037f1038410210d701410010d3012100410110d30121011071220220002001103e2002103a0b1f01017f1038410210d701410010cb0122002000410110cb01103e200010210b2701037f1038410210d701410010cb012100410110cb0121011071220220002001103e200210210b1f01017f1038410210d701410010d30122002000410110d301103f2000103a0b2701037f1038410210d701410010d3012100410110d30121011071220220002001103f2002103a0b1f01017f1038410210d701410010cb0122002000410110cb01103f200010210b2701037f1038410210d701410010cb012100410110cb0121011071220220002001103f200210210b1f01017f1038410210d701410010d30122002000410110d30110402000103a0b2701037f1038410210d701410010d3012100410110d3012101107122022000200110402002103a0b1f01017f1038410210d701410010cb0122002000410110cb011040200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011040200210210b2501027f1038410210d701410010d301410110d3012101107022002000200110022000103a0b2401027f1038410210d701410010d301410110d30121011070220020011091022000103a0b2501027f1038410210d701410010cb01410110cb01210110702200200020011002200010210b2501027f1038410210d701410010d301410110d3012101107022002000200110232000103a0b2401027f1038410210d701410010d301410110d30121011070220020011092022000103a0b2601027f1038410210d701410010cb01410110cb012101107022002000200110ec01200010210b2501027f1038410210d701410010d301410110d30121011070220020002001103e2000103a0b2501027f1038410210d701410010cb01410110cb0121011070220020002001103e200010210b2501027f1038410210d701410010d301410110d30121011070220020002001103f2000103a0b2501027f1038410210d701410010cb01410110cb0121011070220020002001103f200010210b2501027f1038410210d701410010d301410110d3012101107022002000200110402000103a0b2501027f1038410210d701410010cb01410110cb01210110702200200020011040200010210b1f01017f1038410210d701410010cb0122002000410110cb011041200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011041200210210b1f01017f1038410210d701410010cb0122002000410110cb011042200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011042200210210b1f01017f1038410210d701410010cb0122002000410110cb011043200010210b2701037f1038410210d701410010cb012100410110cb01210110712202200020011043200210210b2501027f1038410210d701410010cb01410110cb01210110702200200020011041200010210b2501027f1038410210d701410010cb01410110cb01210110702200200020011042200010210b2501027f1038410210d701410010cb01410110cb01210110702200200020011043200010210b2501017f1038410210d701410010cb0122002000410141f88b08410110ba01102a200010210b2d01037f1038410210d701410010cb012100410141f88b08410110ba0121011071220220002001102a200210210b2501017f1038410210d701410010cb0122002000410141f88b08410110ba011029200010210b2d01037f1038410210d701410010cb012100410141f88b08410110ba01210110712202200020011029200210210b2b01027f1038410210d701410010cb01410141f88b08410110ba0121011070220020002001102a200010210b2b01027f1038410210d701410010cb01410141f88b08410110ba01210110702200200020011029200010210b0d001038410010d701104410200b0d001038410010d701104510200b0d001038410010d701104610200b0d001038410010d701104710200b1601017f1038410010d701107122001048200010081a0b0d001038410010d701104910200b0d001038410010d701104a10200b0d001038410010d701104b10200b0d001038410010d701104c10200b1601017f1038410010d70110712200104d200010081a0b0f001038410010d70110a00110081a0b0f001038410010d70110a40110081a0b20001038410110d701410041b28d08410710c80110a30141d5e608104ead10200b1a001038410110d701410041b28d08410710c80110a403ad103b0b1601017f1038410010d70110712200104f200010081a0b0f001038410010d70110a10110081a0b0d001038410010d701100910200b2a01017f1038410010d701416741919608410c10241a4167416610321a416610712200102f1a200010210baf0101037f230041206b220024001038410110d701410041b28d08410710c80141671050200041003b011441671012220141034f044041818608411c1003000b200041086a200041146a22024102200110fb01416741002000280208200028020c10a8011a20002f011421012000108701200020002d00043a0018200020002802003602142000200141850c713b011e20022000411e6a410210f701200028021420002d0018108b01200041206a24000b13001038410110d7014100108e011051ad103b0b18001038410010d70141ae8308411e41db8008411b107e000b21001038410010d701419f91084111106f1a41858708411a41f68008411e107e000b1c001038410010d70141b091084113106f1a41c08008411b10ff01000b21001038410010d70141c391084114106f1a419f8708411641db8008411b107e000b1d001038410010d70141909108410f1092031a41848b08411810a303000b20001038410010d70141829108410e1092031a108a011a41ed8a084117107d000b1b001038410010d7011095021a108a011a41ab8508411c10a303000b4a01027f230041206b220024001038410010d70141f1810810f001220141feffffff07460440419c8b0841191003000b200041086a200141d58b08411310f10141ab8508411c10a303000b1c01017f1038410110d7014100108e011071220010521a200010081a0b1c01017f1038410110d7014100108e011071220010531a200010081a0b1c01017f1038410110d7014100108e011071220010541a200010081a0b1e001038410310d7014100108e014101108e014102108e01105545ad103b0b1b001038410310d7014100108e014101108e014102108e0110561a0b1e001038410310d7014100108e014101108e014102108e01105745ad103b0b5601017f1038410410d7014100108e014101108e014102108e0102404103101a450d004103419c8c08410910be01220041ff01714105490d00419c8c08410941b38008410d10ab01000b200041ff0171105845ad103b0b2101017f1038410210d7014100108e014101108e011071220010591a200010081a0b0f001038410110d7014100101b10200b0f001038410110d7014100101d103b0b0f001038410110d70110c501ac103b0b17001038410110d701410041dc8d08410110ba01ad10200b3701017e1038410110d7014100101d22004280808080087d42ffffffff6f58044041dc8d08410141a99008411210ab01000b2000c4103b0b16001038410110d70141dc8d08410110ce01adc2103b0b1b001038410110d701410041dc8d08410110be01ad42ff018310200b15001038410110d701410041dc8d0810cd01ad103b0bb50201037f230041106b220124001038410110d7010240027f230041206b220024002000410c6a4100108d014102210202400240200028020c200028021010c401450440024002402000410c6a41dc8d08410110c60141ff01710e020100040b4100210202402000410c6a41dc8d08410110c60141ff01710e020100040b410121020b200028020c200028021010c401450d010b2000411c6a2d0000044041c4e608410036020041c8e60841003a00000b200041206a240020020c020b41dc8d08410141a58008410e10ab01000b41dc8d08410141b38008410d10ab01000b220041ff0171410246044041d89408410010220c010b2001108701200120012d00043a000c20012001280200360208200141086a2202410110e3012002200010e301200128020820012d000c108b010b200141106a24000b1100103810d901410010d801410010d5010b3301027f230041106b220024001038410110d7012000410b6a22014100419b8c08410110d401200141051022200041106a24000b800101037f230041106b22002400103810d901410010d8012000410036020c2000410c6a2101108a0121020340200128020041cce6082802004804402002200141ce8b08410110b00110b3010c010b0b200028020c10d501200210db01210120002002360208200020013602042001ad1020200041086a109803200041106a24000bc50202047f017e230041306b22002400103810d901410010d80120004100360220200041206a220341ce8b08410110b2012101200028022010d501108a0121022003200110da010240034020002802282000280224490440200041206a41fe8f08410810b601210120004200370318200041086a2001200041186a10fd012000280208200028020c410110c20122044280808080087d42ffffffff6f580d02200041206a41fe8f08410810b8012103108a01210120004200370318200020044101200041186a109f0320012000280200200028020410241a2002200110b30120022003109b010c010b0b20002002360218200020021012360228200041003602242000200041186a3602200340200041106a200041206a10e60120002802100440200028021410081a0c010b0b200041306a24000f0b41fe8f08410841a99008411210ab01000b3001027f230041106b220024001038410110d701200041046a220141dc8f08410210cf01200110e701200041106a24000b4401017f1038410110d70102404100101a450d00410041dc8f08410210be01220041ff01714103490d0041dc8f08410241b38008410d10ab01000b2000ad42ff018310200b0d001038410010d701420110200b3101017f1038410110d701410041de8f08410210bb01220045044041de8f08410241b38008410d10ab01000b2000ad10200ba70101047f230041106b22002400103810d901410110d80110c501200041013602080240200041086a220128020041cce6082802004e0440410121020c010b200141e08f08410310ad0141e08f08410310ae0121010b200020013602042000200236020020002802042101200028020021022000200028020836020c2000410c6a41cce608280200360200200028020c10d501ac103b20024504402001ac103b0b200041106a24000b920302077f017e230041206b220124001038410110d701200141086a2105230041406a22002400200041003602282000412c6a4100108d012000411c6a21034101210202400340200028022c22042000280230220610c4010d01200041003602082000412c6a200041086a2204410441da8f08410210c10120044104410110c201210720024104470440200320073e0200200341046a210320002002360228200241016a21020c010b0b41da8f08410241989008411110ab01000b02402004200610c4010440200041106a2202200041246a2902003703002000200029021c3703082000413c6a2d0000044041c4e608410036020041c8e60841003a00000b20052000290308370200200541086a2002290300370200200041406b24000c010b41da8f08410241a58008410e10ab01000b20012802142001108701200120012d00043a001c20012001280200360218410274210241002100034020002002470440200141086a20006a280200200141186a10e801200041046a21000c010b0b200128021820012d001c108b01200141206a24000b10001038410110d701410010cb0110210b10001038410110d701410010d301103a0b11001038410110d7014100108e0110081a0b17001038410110d701410041cc8b08410210c80110081a0bf30201077f230041206b220124001038410110d701230041206b220024004100108e012106108a012104200610122102200041186a41003a0000200041146a2002360200200020063602102000200236020c20004100360208037f2005200210bc01047f2000200041086a10c901220241187420024180fe03714108747220024108764180fe03712002411876727236021c20042000411c6a4104100e1a200028020c2102200028020821050c010520002d0018044041c4e608410036020041c8e60841003a00000b200041206a240020040b0b2102200141086a108701200120012d000c3a00182001200128020836021420021012210402400340200341046a22002003490d01200020044d04402001410036021c200220032001411c6a410410a8011a200128021c220341187420034180fe03714108747220034108764180fe037120034118767272200141146a109001200021030c010b0b200128021420012d0018108b01200141206a24000f0b1076000be40101057f230041206b220024001038410110d701200041106a2102230041206b220124002001410c6a22034100108d01200310c9012104200341cb8b08410110c70121030240200128020c200128021010c40104402001411c6a2d0000044041c4e608410036020041c8e60841003a00000b2002200336020420022004360200200141206a24000c010b41cb8b08410141a58008410e10ab01000b20002802142000280210200041086a108701200020002d000c3a001c20002000280208360218200041186a22021090012002109201200028021820002d001c108b01200041206a24000bb50201057f230041206b220024001038410110d701200041106a2103230041206b220124002001410c6a4100108d0102400240200128020c200128021010c4014504400240024002402001410c6a41cb8b08410110c60141ff017122020e020201000b41cb8b08410141b38008410d10ab01000b2001410c6a10c9012104410121020b200128020c200128021010c401450d010b2001411c6a2d0000044041c4e608410036020041c8e60841003a00000b2003200436020420032002360200200141206a24000c010b41cb8b08410141a58008410e10ab01000b0240200028021045044041d89408410010220c010b2000280214200041086a108701200020002d000c3a001c20002000280208360218200041186a2202410110e3012002109001200028021820002d001c108b010b200041206a24000bb80201077f230041306b220024001038410210d701410041d29508410410c8012104230041206b220124004101108e012106108a0121032006101221022001411c6a41003a0000200141186a200236020020012006360214200120023602102001410036020c2000037f2005200210bc01047f20032001410c6a41cf8b08410310c70110b30120012802102102200128020c21050c010520012d001c044041c4e608410036020041c8e60841003a00000b200141206a240020030b0b36021820002004360214200410081a200041086a108701200020002d000c3a00202000200028020836021c20002003101236022c200041003602282000200041186a36022403402000200041246a10e6012000280200044020002802042000411c6a1092010c010b0b200028021c20002d0020108b01200041306a24000bca0401087f230041206b220124001038410110d701230041206b220024004100108e012105108a012106200510122102200041186a41003a0000200041146a2002360200200020053602102000200236020c20004100360208037f2004200210bc01047f200041086a41d38b08410210c3012104108a0121020340200404402000200041086a41d38b08410210c301220541187420054180fe03714108747220054108764180fe03712005411876727236021c20022000411c6a4104100e1a200441016b21040c010b0b2000200241187420024180fe03714108747220024108764180fe03712002411876727236021c20062000411c6a4104100e1a200028020c2102200028020821040c010520002d0018044041c4e608410036020041c8e60841003a00000b200041206a240020060b0b2105200141086a108701200120012d000c3a00182001200128020836021420051012210602400340200341046a22042003490d01200420064d0440410021002001410036021c200520032001411c6a410410a8011a200128021c220341187420034180fe03714108747220034108764180fe03712003411876727222021012410276200141146a10f601200210122107034002402000200041046a22034d0440200320074d0d01200421030c040b1076000b2001410036021c200220002001411c6a410410a8011a200128021c220041187420004180fe03714108747220004108764180fe037120004118767272200141146a10f601200321000c000b000b0b200128021420012d0018108b01200141206a24000f0b1076000bf90201077f230041206b220124001038410110d701230041206b220024004100108e012106108a012104200610122102200041186a41003a0000200041146a2002360200200020063602102000200236020c20004100360208037f2005200210bc01047f2000200041086a41d38b08410210c701220241187420024180fe03714108747220024108764180fe03712002411876727236021c20042000411c6a4104100e1a200028020c2102200028020821050c010520002d0018044041c4e608410036020041c8e60841003a00000b200041206a240020040b0b2102200141086a108701200120012d000c3a00182001200128020836021420021012210402400340200341046a22002003490d01200020044d04402001410036021c200220032001411c6a410410a8011a200128021c220341187420034180fe03714108747220034108764180fe037120034118767272200141146a109201200021030c010b0b200128021420012d0018108b01200141206a24000f0b1076000b4d01017f230041106b22002400103810d901410010d8012000410036020c20002000410c6a41d28b08410110af01200028020c10d5012000280200044020002802081000000b200041106a24000bd50101057f230041206b22002400103810d901410010d80120004100360210200041106a220341ce8b08410110b2012102200028021010d501108a0121012003200210da0102400340200028021820002802144f0d01200041106a10aa032202200041106a10aa0322036a220420024f04402002200110860220032001108602200420011086020c010b0b1076000b2000200136020c2000200110123602182000410036021420002000410c6a36021003402000200041106a10e60120002802000440200028020410081a0c010b0b200041206a24000b910101067f230041206b220024001038410110d7012000410041818e08410d10ba01108c0202402000280200450440109502210110950221021095022103109502210410950221052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080c010b200041086a2000280204108b020b200041086a10eb01200041206a24000b3101027f230041206b220024001038410110d701200041086a22014100108e01105a108b02200110eb01200041206a24000b4501027f230041106b220024001038410110d701200041086a410041818e08410d10ba012201108c022000280208047f200028020c10260520010bad1020200041106a24000b4301017f230041106b220024001038410110d701200041086a410041818e08410d10ba01108c022000280208047e200028020c105bad0542000b1020200041106a24000b8c0101087f230041106b220024001038410510d701410041818e08410d10ba012101410110cb012103410210cb012104410310cb012105410410cb012106200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21074200100b22014200100b220220072003200420052006105c0b2001200210e101200041106a24000b7a01067f230041106b220024001038410310d701410041818e08410d10ba012101410110cb012103410210cb012104200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21054200100b22014200100b2202200520032004105d0b2001200210e101200041106a24000b5c01047f230041106b220024001038410310d701410041818e08410d10ba012101410110cb012102410210cb012103200041086a2001108c022000280208047e200028020c20022003105e41004aad0542000b103b200041106a24000b840101077f230041106b220024001038410410d701410041818e08410d10ba012101410110cb012103410210cb0121044103108e012105200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21064200100b22014200100b22022006200320042005105f1a0b2001200210e101200041106a24000b7201057f230041106b220024001038410210d701410041818e08410d10ba0121014101108e012103200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21044200100b22014200100b22022004200310601a0b2001200210e101200041106a24000b6801047f230041106b220024001038410310d701410041818e08410d10ba012101410110cb012102410210cb012103200041086a2001108c0202402000280208450440108a0121010c010b20022003200028020c1071220110611a0b200110081a200041106a24000b6801047f230041106b220024001038410310d701410041818e08410d10ba012101410110cb012102410210cb012103200041086a2001108c0202402000280208450440108a0121010c010b20022003200028020c1071220110621a0b200110081a200041106a24000b7201057f230041106b220024001038410210d701410041818e08410d10ba0121014101108e012103200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21044200100b22014200100b22022004200310631a0b2001200210e101200041106a24000b7201057f230041106b220024001038410210d701410041818e08410d10ba0121014101108e012103200041086a2001108c0202402000280208450440109502210110950221020c010b200028020c21044200100b22014200100b22022004200310641a0b2001200210e101200041106a24000b7401047f230041106b220024001038410110d701200041086a410041818e08410d10ba01108c020240200028020845044010950221021095022103108a0121010c010b200028020c21014200100b22024200100b220320011071220110651a0b2002102120031021200110081a200041106a24000b17001038410110d701410041e88b08410410ba0110a6030b3201027f1038410110d701410041f08b08410810ba01210103402000200146450440200010a603200041016a21000c010b0b0bc90101057f230041206b22002400103810d901410210d801410010cb012101410141ec8b08410410c801210420004102360214200041146a41e88b08410410b2012103200028021410d50141fb900841071092032102108a011a2002200110860110b301108a011a20022004107710b30120002003360210108a011077210120002003101236021c200041003602182000200041106a3602140340200041086a200041146a10e60120002802080440200028020c200110da020c010b0b200220011037200041206a24000b1e00103810a40110a001107845044041fc940841241003000b410010d7010b1e00103841671010416710a403044041a09508412c1003000b410010d7010b2d001038410210d701410041d28b08410110ba01410141f88b08410110ba0147044041f98b08410e109801000b0b13001038410010d70141878c08410d109801000b8f0301087f230041206b220224001038410110d701230041e0006b22002400200041046a4100108d0141202103034020030440200041046a41b68e08410510c60121042001411f4b2205450440200041386a20016a20043a0000200141016a21010b200510cc01200341016b21030c01052001412049044041b68e08410541869008411210ab01000b0b0b200041306a2201200041d0006a2203290200370300200041286a2204200041c8006a2205290200370300200041206a2206200041406b22072902003703002000200029023837031802402000280204200028020810c401044020032001290300370300200520042903003703002007200629030037030020002000290318370338200041146a2d0000044041c4e608410036020041c8e60841003a00000b20022000290338370000200241186a200041d0006a290300370000200241106a200041c8006a290300370000200241086a200041406b290300370000200041e0006a24000c010b41b68e08410541a58008410e10ab01000b200210f00110081a200241206a24000b2901017f1038410110d7014100108e0122001012412047044041ee8f084110109801000b200010081a0b0f001038410010d701108a0110081a0b1f01017f1038410210d7014100108e0122004101108e0110051a200010081a0b4e01017f230041106b220024001038410310d701200041086a4100108e014101419d8e08411110ba01410241948e08410910ba0110820220002802080440200028020c10081a0b200041106a24000b2601027f1038410110d701410041ae8e08410810ba01210010712201200010661a200110081a0b18001038410210d7014100108e014101108e011078ad103b0b13001038410010d70141f1810810f00110081a0b24001038410210d701410041918e08410310c8014101418e8e08410310c8011078ad103b0b0f001038410010d701108a0110dc010b2501017f1038410210d701410041d38b08410210d1012200410110cb0110b301200010dc010bfa0102067f017e230041106b220124001038410210d701420121060240410041c68d08410310d1012203410141c38d08410310d101220410780d00024020031012220520041012470d000340200220054f0d022001410036020820032002200141086a410410a8011a200128020821002001410036020c200420022001410c6a410410a8011a200041187420004180fe03714108747220004108764180fe037120004118767272200128020c220041187420004180fe03714108747220004108764180fe037120004118767272108a02450d012002200241046a22004d0440200021020c010b0b1076000b420021060b2006103b200141106a24000bdc0201077f230041206b220124001038410210d701230041206b220024004100108e012106108a0121042006101221022000411c6a41003a0000200041186a200236020020002006360214200020023602102000410036020c037f2005200210bc01047f20042000410c6a412041d38b08410210bd0110b30120002802102102200028020c21050c010520002d001c044041c4e608410036020041c8e60841003a00000b200041206a240020040b0b2202410141fe8c08410410c80110b301200141086a108701200120012d000c3a00182001200128020836021420021012210402400340200341046a22002003490d01200020044d04402001410036021c200220032001411c6a410410a8011a200141146a200128021c220341187420034180fe03714108747220034108764180fe03712003411876727210e401200021030c010b0b200128021420012d0018108b01200141206a24000f0b1076000b960101047f230041106b220124001038410310d701410041d38b08410210d1012102410141ad8d08410510ba012103410210cb012100024020034180808080044904402001200041187420004180fe03714108747220004108764180fe03712000411876727236020c2002200341027441042001410c6a10670d01200210dc01200141106a24000f0b1076000b41c98d084113109801000ba10101057f230041106b220024001038410210d701410041d38b08410210d1012102410141ad8d08410510ba01210120012002101241027622044904400240027f2001450440108a010c010b200041086a2002410020011098022000280208450d01200028020c0b210320002002200141016a20041098022000280200450d002003200028020410051a200310dc01200041106a24000f0b0b419d8608411d1003000b880101037f230041206b220024001038410210d701200041106a410041d38b08410210d101410110cb011097020240200028021045044041d89408410010220c010b2000280214200041086a108701200020002d000c3a001c20002000280208360218200041186a2202410110e301200210f601200028021820002d001c108b010b200041206a24000b3e01017f230041106b220024001038410210d701200041086a410041d38b08410210d101410110cb011097022000280208410047ad103b200041106a24000bb20101047f230041206b220024001038410210d7014100108e012102200041146a2203410141fe8c08410410d4012000410c6a200041186a2d00003a000020002000280214360208200341003a0000200041003602100340200141054704402000200041086a20016a2d00003a001f20002001200141016a2201200041106a41051075200028020020002802042000411f6a41011089010c010b0b2002200041106a4105100e1a200210081a200041206a24000b930101037f230041106b220124001038410210d701410041d38b08410210d10121000240410141ad8d08410510ba0122024180808080044904402001410036020c200020024102742001410c6a410410a8010d01200128020c220041187420004180fe03714108747220004108764180fe03712000411876727210701021200141106a24000f0b1076000b419d8608411d1003000b14001038410110d7014100108e0110950110081a0b16001038410210d7014100108e014101108e0110a6020b24001038410210d701410041b28d08410710c8014101108e01416710334167107710081a0b17001038410010d70141eb9108410d106f10950110081a0b16001038410010d701418992084108106f10a30210210b16001038410010d701418292084107106f109e02103a0b16001038410010d701419f92084103106f10a00210200b17001038410010d70141fd91084105106f109f02ad10200b4901027f230041106b220024001038410010d701419c92084103106f21012000420037030820002001200041086a10960120002802002000280204410110c201103b200041106a24000b17001038410010d70141a292084104106f10a202ad103b0b17001038410010d70141d295084104106f10a10210081a0bb70101037f230041206b220024001038410010d7012000410c6a41dd8d084108106f1094010240200028020c200028021010c4014504400240024002402000410c6a10a00341ff017122010e020201000b41b38008410d10ff01000b410121012000410c6a412010830221020b200028020c200028021010c401450d010b2000411c6a2d0000044041c4e608410036020041c8e60841003a00000b20010440200210081a0b200041206a24000f0b41a58008410e10ff01000b18001038410010d70141dd8d084108106f10a50245ad103b0b17001038410010d70141919208410b106f109f02ad10200b14001038410010d70141919208410b106f10ad020bf60102037f017e230041206b220024001038410010d7010240024041f891084105106f220210a502450d002000410c6a2201200210940102400240024002400240200110a00341ff017122010e0404010203000b41b38008410d10ff01000b2000410c6a10d302ad2103410121010c020b2000410c6a10d302ad2000410c6a10d302ad422086842103410221010c010b2000410c6a10d302ad2103410321010b200028020c200028021010c401450d012000411c6a2d0000450d0041c4e608410036020041c8e60841003a00000b200020033702102000200136020c2000410c6a10e701200041206a24000f0b41a58008410e10ff01000b2e01027f1038410110d701410041d29508410410c801210041a692084104106f2201200010051a200110a30210210b4201037f1038410210d701410041be8d08410510c8012101410141b98d08410510c801210241aa92084104106f2200200110051a2000200210051a200010a30210210b2b01017f1038410110d701410041cb8b08410110ba0141ae92084104106f220010ca02200010a202ad103b0b2601017f1038410210d701410041b28d08410710c8014101108e01107122001033200010081a0b1f01017f1038410110d7014100108e01210041eb9108410d106f200010a6020b19001038410110d701410010cb01418992084108106f1085010b1f01017f1038410110d701410010d3012100418292084107106f200010ac020b2601017f1038410110d701410041dc8d08410110ba01210041fd91084105106f2000ad10b6020b1e01017f1038410110d70110c501210041e292084103106f2000ac10eb020b1e01017e1038410110d7014100101b2100419f92084103106f200010b6020b1e01017e1038410110d7014100101d2100419c92084103106f200010eb020b2401017f1038410110d701410041dc8d0810cd01210041a292084104106f2000ad10eb020b2501017f1038410110d701410041a58c08410310c801210041d295084104106f200010a6020be10101047f230041206b22002400103810d901410010d80120004100360218200041106a21030240200041186a220228020041cce6082802004e0440410121010c010b200241dd8d08410810ad0141dd8d08410810b40121020b20032002360204200320013602002000280214210320002802102101200028021810d50141dd8d084108106f2102024020010440200241d89408410010ab020c010b200041086a108701200020002d000c3a001c20002000280208360218200041186a2201410110e3012001200310e4012002200028021820002d001c10f8010b200041206a24000ba70201037f230041306b220024001038410110d7012000411c6a41a58c08410310cf0141f891084105106f210202400240024002400240200028021c41016b0e03010203000b2002420010b6020c030b2000108701200020002d00043a002c20002000280200360228200041286a2201410110e3012000280220200110e8012002200028022820002d002c10f8010c020b200041086a108701200020002d000c3a002c20002000280208360228200041286a2201410210e3012000280220200110e8012000280224200110e8012002200028022820002d002c10f8010c010b200041106a108701200020002d00143a002c20002000280210360228200041286a2201410310e3012000280220200110e8012002200028022820002d002c10f8010b200041306a24000b3101037f1038410210d701410041d29508410410c8012100410110cb0141a692084104106f2202200010051a20021085010b4501047f1038410310d701410041be8d08410510c8012101410141b98d08410510c8012102410210cb0141aa92084104106f2200200110051a2000200210051a20001085010b3601027f1038410210d701410041cb8b08410110ba01410141f88b0810cd01210141ae92084104106f220010ca0220002001ad10eb020b1e01017e1038410110d7014100101d210041be92084109106f200010eb020b19001038410110d701410010cb0141d59208410d106f1085010b1f01017f1038410110d7014100108e01210041c79208410e106f200010a6020b2201017f1038410110d701410041b28d08410710c801210010af03200010f50210200b3502017f017e1038410110d701410041b28d08410710c801210010af03200010f502220150044041dc9508410f1003000b200110200b3d02017f017e230041106b220024001038410110d7014100101b2101200041086a10af03200110ee022000280208200028020c10e201200041106a24000b2201017e1038410110d7014100101b210010af03200010ef0210a502410047ad103b0b3901027f1038410110d701410041b28d08410710c801210010af032201200010f5025045044041ff8708411a1003000b2001200010f30210200b3902027f017e1038410110d701410041b28d08410710c801210010af032201200010f20210a002220250047e2001200010f3020520020b10200b5402037f017e230041106b220024001038410110d7014100101b2103200041086a10af032202200310ee02200028020c21012000280208047f20022003200110f10241010541000b200110e201200041106a24000b3802027f017e1038410110d701410041b28d08410710c801210010af032201200010f50222025045044020012002200010f1020b200210200b830101027f230041406a220024001038410010d701200010ad03220136020c200041106a200110e30220002000410c6a360224200041386a200041206a290200370300200041306a200041186a290200370300200020002902103703280340200041106a200041286a107f20002802100440200035021410200c010b0b200041406b24000bbe0101077f230041206b220024001038410110d701410041fe8c08410410ba012104200010ad03220210ce0220001098052101024020002802002205450440200020013602040c010b200041106a220620022000280208220310de022000200136021820022003200610df020b2000200336021c20004100360218200020013602142000200436021020022001200041106a10df0220002001360208200541016a22014504401076000b200020013602002002200010d002200041206a24000b1e01017f200028020c41016a220104402000200136020c20010f0b1076000bbe0101077f230041206b220024001038410110d701410041fe8c08410410ba012104200010ad03220210ce0220001098052101024020002802002205450440200020013602080c010b200041106a220620022000280204220310de022000200136021c20022003200610df020b2000410036021c20002003360218200020013602142000200436021020022001200041106a10df0220002001360204200541016a22014504401076000b200020013602002002200010d002200041206a24000b4701027f230041306b220024001038410010d701200041206a10ad03220110ce022000410c6a2001200028022410e202200028020c410173200028021010e001200041306a24000b4701027f230041306b220024001038410010d701200041206a10ad03220110ce022000410c6a2001200028022810e202200028020c410173200028021010e001200041306a24000b3601017f230041206b220024001038410010d7012000410c6a10ad0310e302200028020c410173200028021010e001200041206a24000b4701027f230041306b220024001038410010d701200041206a10ad03220110ce022000410c6a20012000280228108101200028020c410173200028021010e001200041306a24000bc90202077f017e230041d0006b220024001038410210d70141012101410041cf8e08410710ba012102410141d68e08410710ba0121052000410c6a10ad03200210810102400240200028020c0440200041206a2000410c6a10800110ad0322032000280224220410dd020d02200041306a2201200310ce0220011098052101200028022821022000200136022820032004200041206a10df02024020020440200041406b22062003200210de022000200136024c20032002200610df020c010b200020013602380b2000200436024c20002002360248200020013602442000200536024020032001200041406b10df02200028023041016a22010d011076000b0c010b200020013602302003200041306a10d002200041186a200041c8006a2902003702002000200029024022073702102007a72102410021010b2001200210e001200041d0006a24000bc90202077f017e230041d0006b220024001038410210d70141012101410041cf8e08410710ba012102410141d68e08410710ba0121052000410c6a10ad03200210810102400240200028020c0440200041206a2000410c6a10800110ad0322032000280224220410dd020d02200041306a2201200310ce0220011098052101200028022c21022000200136022c20032004200041206a10df02024020020440200041406b22062003200210de022000200136024820032002200610df020c010b200020013602340b2000200236024c20002004360248200020013602442000200536024020032001200041406b10df02200028023041016a22010d011076000b0c010b200020013602302003200041306a10d002200041186a200041c8006a2902003702002000200029024022073702102007a72102410021010b2001200210e001200041d0006a24000b5401027f230041306b220024001038410110d701410041cf8e08410710ba0121012000410c6a10ad032001108101200028020c0440200041206a22012000410c6a10800110ad03200110dc020b200041306a24000b4501027f230041206b220024001038410110d701410041cf8e08410710ba0121012000410c6a10ad03200110e202200028020c410173200028021010e001200041206a24000b5a01047f230041306b220024001038410210d701410041cf8e08410710ba012101410141c68e08410910ba0121022000411c6a220310ad0320011081012000410c6a2201200310800110ad032001200210e102200041306a24000b7201047f230041306b220024001038410210d701410041cf8e08410710ba012101410141c68e08410910ba0121022000410c6a10ad0322032001108101200028020c0440200041286a200041186a290200370300200020002902103703202003200041206a200210e1020b200041306a24000b7c01037f230041306b220024001038410110d701410041cf8e08410710ba012101108a0121022000410c6a10ad0320011081010340200028020c0440200041206a2000410c6a220110800120022000280220108502200110ad0320002802281081010c010b0b20002002360220200041206a10e501200041306a24000ba90101047f230041406a220024001038410110d701410041cf8e08410710ba012102108a012101200010ad0322033602242000410c6a200320021081012000200041246a360220200041386a2000411c6a290200370300200041306a200041146a2902003703002000200029020c37032803402000410c6a200041286a107f200028020c0440200120002802101085020c010b0b20002001360208200041086a10e501200041406b24000b3a01017f230041106b220024001038410010d701200010ab0336020c20002000410c6a10d20220002802002000280204109e03200041106a24000b2101017f1038410110d701410041fe8c08410410ba01210010ab03200010c2021a0b4401027f230041206b220024001038410010d701200041106a10ab03220110ce02200041086a2001200028021410c5022000280208200028020c10ea01200041206a24000b4301037f230041106b220024001038410010d701200010ab03220110ce022000280204220245044041e58d08410c109801000b20012002107cad1020200041106a24000b6a02027f017e230041306b220024001038410010d7012000410c6a220110a7032000200041106a10d20220002000290300370318200020013602200340200041246a200041186a10820120002802240440200035022c2000350228102010200c010b0b200041306a24000b7101027f230041306b220024001038410010d701108a0121012000411c6a10a703200041106a200041206a10d202200020002903103702280340200041086a200041286a107a200028020804402001200028020c10b3010c010b0b20002001360218200041186a109803200041306a24000ba90101037f230041406a220024001038410010d701108a012102200041286a220110a703200041186a2000412c6a10d202200020002903183702342000200136023c0340200041106a200041346a107a2000280210410147450440200041086a200028023c2201280200200141086a2802002000280214108301200028020c210120002802081084012002200110b3010c010b0b20002002360224200041246a109803200041406b24000b5a01047f230041206b220024001038410210d701410041fe8c08410410ba012101410141828d08410510ba012102200041146a220310a703200041086a20032001200210b5022000280208200028020c10ea01200041206a24000b3d01027f230041106b220024001038410110d701410041fe8c08410410ba012101200041046a10a7032000280204200110ba02ad103b200041106a24000b5101027f230041206b220024001038410110d701410041fe8c08410410ba012101200041146a10a703200041086a2000280214200028021c20011083012000280208200028020c10ea01200041206a24000b6101047f230041106b220024001038410110d701410041fe8c08410410ba012102200041046a10a70320002802042000280208200210c302047f200028020c2201200210b90221032001200210b30241010541000b200310ea01200041106a24000b870101057f230041306b220024001038410210d701410041fe8c08410410ba012102410141908d08410910ba01200041246a220310a703200041186a22042003200210bb02200041106a200410bd02200028021022032000280214220410bc0222026a220120024904401076000b200041086a20032004200110b5022001ad1020200041306a24000b880101047f230041206b220024001038410210d701410041fe8c08410410ba012101410141998d08410710ba012103200041086a220210a703200041146a2002200110bb022000411c6a2802002101200028021821022000280214450440200020022001200310be0220002802002102200028020421010b2002200110bc02ad1020200041206a24000bc40101057f230041306b220024001038410310d701410041fe8c08410410ba012101410141908d08410910ba012103410241878d08410910ba012104200041246a220210a703200041186a2002200110bb02200041206a2802002101200028021c2102024002402000280218044020032002200110bc0222036a22042003490d02200041106a20022001200410b5020c010b200041086a20022001200410be02200028020c2101200028020821020b2002200110bc02ad1020200041306a24000f0b1076000b9b0101047f230041206b220024001038410210d701410041fe8c08410410ba012101410141a08d08410d10ba012103200041146a220210a703200041086a2002200110bb02200041106a2802002101200028020c210202402000280208450440200120036a22032001490d01200020022001200310be0220002802002102200028020421010b2002200110bc02ad1020200041206a24000f0b1076000ba60201067f230041f0006b220024001038410010d701108a012102200041206a220110ae03200041186a200041246a10d2022000200029031837022c20002001360234200041cc006a210403400240200041106a2000412c6a107a20002802104101470d00200041e0006a220320002802342201280200200141086a2802002000280214220110e502200041386a200310e602200041d0006a200041406b28020036020020002000290338370348200041086a200410d202200020002903083702542000200041c8006a36025c0340200041e0006a200041d4006a1082012000280260450d0220002802682103200028026421052002200110850220022005108502200220031085020c000b000b0b20002002360260200041e0006a10e501200041f0006a24000b4201027f230041106b220024001038410110d701410041fe8c08410410ba012101200041046a10ae0320002802042000280208200110b702ad103b200041106a24000b3d01027f230041106b220024001038410110d701410041fe8c08410410ba012101200041046a10ae032000280204200110ba02ad103b200041106a24000bda0101037f230041d0006b220024001038410110d701410041fe8c08410410ba0121012000410c6a10ae03200041186a200028020c2000280214200110e50220002802180440200041306a200041246a2802003602002000200029021c370328108a0121012000200041286a220241047210d20220002000290300370238200020023602400340200041c4006a200041386a10820120002802440440200028024c210220012000280248108502200120021085020c010b0b20002001360208200041086a10e501200041d0006a24000f0b41e28e08410b109801000b980101047f230041306b220024001038410310d701410041fe8c08410410ba012101410141988c08410310ba012102410241828d08410510ba012103200041146a10ae03200041206a2000280214200028021c200110e502200028022045044041e28e08410b109801000b2000200041246a2002200310b502200041003602082000200029030037020c200041086a10e901200041306a24000b910101037f230041306b220024001038410210d701410041fe8c08410410ba012101410141988c08410310ba012102200041146a10ae03200041206a2000280214200028021c200110e502200028022045044041e28e08410b109801000b200020002802242000412c6a2802002002108301200041003602082000200029030037020c200041086a10e901200041306a24000b5f01047f230041206b220024001038410110d701410041fe8c08410410ba012101200041086a10ae032000280208200028020c200110c30222020440200041146a22032000280210200110e70220031096030b2002ad103b200041206a24000bb90101047f230041d0006b220024001038410010d701200041186a220110ae03200041106a2000411c6a10d202200020002903103702242000200136022c200041346a21010340200041086a200041246a107a2000280208410147450440200041406b2202200028022c2203280200200341086a280200200028020c10e5022001200210e602200041c8006a200141086a2802003602002000200129020037034020021096030c010b0b200041186a109303200041d0006a24000bb30101067f230041306b220024001038410310d701410041fe8c08410410ba012103410141988c08410310ba012104410241908d08410910ba01200041246a220110ae03200041186a22052001200310bb02200041106a200510e90220052000280210200028021410e40220012005200410bb02200041086a200110bd0220002802082201200028020c220310bc0222046a220220044904401076000b200020012003200210b5022002ad1020200041306a24000bf50101077f230041406a220024001038410410d701410041fe8c08410410ba012102410141988c08410310ba012104410241828d08410510ba012105410341dd8e08410510ba012106200041286a220310ae032000411c6a2003200210bb02200041246a280200210220002802202103200028021c0440200041346a22012003200210e402200041106a20012004200510b502410121010b2000413c6a20023602002000200336023820002001360234200041086a200041346a220110e90220012000280208200028020c10e40220002000280234200028023c20041083012000280204200620002802001bad1020200041406b24000b8e0101067f230041306b220024001038410310d701410041fe8c08410410ba012102410141988c08410310ba012103410241828d08410510ba012104200041186a220510ae03200041246a22012005200210bb02200041106a200110e90220012000280210200028021410e402200041086a20012003200410b5022000280208200028020c10ea01200041306a24000b4701017f230041206b220024001038410010d701200041106a10a80320002000290310370218200041086a2000411c6a10d2022000280208200028020c109e03200041206a24000b4201027f230041106b220024001038410110d701410041fe8c08410410ba012101200041086a10a8032000280208200028020c200110b702ad103b200041106a24000b3d01027f230041106b220024001038410110d701410041fe8c08410410ba012101200041086a10a8032000280208200110ba02ad103b200041106a24000b4201027f230041106b220024001038410110d701410041fe8c08410410ba012101200041086a10a8032000280208200028020c200110c302ad103b200041106a24000b11001038410010d70110ac03109e02103a0b2401027f1038410110d701410010d301210010ac0322012001109e022000108f0210ec020b2801037f1038410110d701410010d301210010ac032201109e02220220001091022001200210ec020b4301037f1038410110d701410010d301210010ac032202109e022201200010880241ff017141024f044041f18d084110109801000b200120001092022002200110ec020b2401027f1038410110d701410010d301210010ac03220110ed0204402001200010ac020b0b0f001038410010d70110ac0310ad020b12001038410010d70110ac0310ed02ad103b0b1e001038410110d701410041b28d08410710c80110ac0310b00245ad103b0b12001038410010d70110ac0310a502ad10200b6401047f230041106b220124001038410010d701200141086a10a90320012802082102200128020c109f0221034101210002400340200020034d04402000417f460d022002200010c602ad1020200041016a21000c010b0b200141106a24000f0b1076000b5e01057f230041106b220024001038410110d701410041fe8c08410410ba012102200041086a10a9032000280208200028020c2204109f0241016a22014504401076000b200110c7022002ad10b60220042001ad10b602200041106a24000b5c01037f230041106b220024001038410110d701410041ad8d08410510ba012101200041086a10a90302402001450d002000280208200028020c109f022001490d00200110c602ad1020200041106a24000f0b41eb950841121003000b7401047f230041106b220024001038410210d701410041b28d08410710c8012102410141ad8d08410510ba012101200041086a10a90302402001450d0020002802082103200028020c200210c8022001490d0020022003200110c70210ae02ad1020200041106a24000f0b41eb950841121003000b2e01017f230041106b220024001038410010d701200041086a10a903200028020c109f02ad1020200041106a24000b3d01027f230041106b220024001038410110d701410041b28d08410710c8012101200041086a10a903200028020c200110c802ad1020200041106a24000be00102047f027e230041306b220124001038410310d7014100108e0121004101101b2104200141206a410210bf01200141106a200141286a2903003703002001200129032037030802400240106e22022000108203450440200210850310a402220341ff017141ff01460d0120022000108103200341016a2200ad42ff0183220510b6022002108503200510b6020c020b2002200010800321000c010b41ff890841d7001003000b200220002004108803450440200220002004200141086a2203108a032002200020032004108d03200141306a24000f0b41d68a0841171003000bb70102047f017e230041306b220024001038410310d7014100108e0121014101101b2104200041206a410210bf01200041106a200041286a290300370300200020002903203703080240106e22022001108203044020022002200110800322012004108803450d01200041186a2203200220012004108603200220012003108e03200220012004200041086a2203108a032002200120032004108d03200041306a24000f0b41b6890841101003000b41c68908411e1003000bb60102037f017e230041206b220024001038410210d7014100108e0121024101101b21030240106e22012002108203044020012001200210800322022003108803450d01200041086a2001200220031086032000108701200020002d00043a001c200020002802003602182000280210200041186a22011093012000290308200110df01200041146a2001108b03200028021820002d001c108b01200041206a24000f0b41b6890841101003000b41c68908411e1003000b920101037f230041306b220024001038410210d7014100108e012101200041206a410110bf01200041106a200041286a290300370300200020002903203703080240106e2202200110820304402002200220011080032201200041086a108c0310a502450d0120022001200041086a108c0310a0021020200041306a24000f0b41b6890841101003000b41c68908411e1003000b6c02037f017e230041106b220224001038410210d7014100108e0121004101101b21030240106e22012000108203450d0020012001200010800322002003108803450d00200220012000200310860320012000200310830310ad02200120002002108e030b200241106a24000b3a02027f017e1038410210d7014100108e0121004101101b2102106e22012000108203047e2001200120001080032002108903ad0542010b103b0b1d01017f1038410110d7014100108e01210010b203200010d90210ea020b1d01017f1038410110d7014100108e01210010b203200010d90210ad020b1d01017f1038410110d7014100108e01210010b203200010db02ad103b0b2c01027f1038410210d701410041b28d08410710c80121004101108e01210110b2032000200110d802ad103b0b2701017f1038410110d7014100108e01210010b203200010db0245044041fd950841141003000b0b3601027f1038410210d701410041b28d08410710c80121004101108e01210110b2032000200110d80245044041fd950841141003000b0b5401057f230041206b2200240010ac01410210d7014100108e012102410110cb01210310a501200041086a10b30310702101108a0121042000410036021420002802102001200420022003200041146a10ff02000b7c01077f230041206b2200240010ac01410210d7014100108e012104410110cb01210210a501200210fb022103108a012105200041086a10b30310702101108a0121062000200536021c2000411f411b20031b3602182000419a8f0841ff8e0820031b36021420002802102001200620042002200041146a10ff02000be10101067f230041206b2201240010ac01410110d7014100108e01210410a501200141086a10b30310702102108a0121052001410036021420012802102103230041d0006b22002400200310f6020240200141146a2201280200450440200041086a200310950210fa020c010b200041106a200141086a280200360200200020012902003703080b20034101200010a802200041306a200220052004410010f3012000412c6a200041106a28020036020020002000290308370224200020002802483602202000200028024036021c20002000290330370214200041146a10f401000bd20201087f230041206b220024001038410010d70120004181043b0006108a012102200041086a220110b3032000200236021c20004112360218200041ed8e08360214200041066a2105200041146a210210f7022103230041206b22002400200128020810ed02450440200110f802200041e3840810f00141d58408410e10f101108a011a2802001077210120002802042204200110b30120002802102106200028020021072003200410f90241002101034020014102470440200120056a2d00002203044020042003410274220341b494086a2802002802002003419494086a280200280200106f10b3010b200141016a21010c010b0b200010950236020c2000200636020820004100360210200020043602042000200736020020022802000440200041106a22012002290200370200200141086a200241086a2802003602000b200010f401000b41ea880841201003000b4001027f230041206b220024001038410110d701410010cb012101200041146a10b303200020002802142000280218200110fc02200010de01200041206a24000b7901037f230041306b220024001038410210d701410041bf8f08410210c801410110cb012102200041146a10b303200041206a20002802142000280218200210fc02200041286a22012802004200200028022c109901200041086a200129030037030020002000290320370300200010de01200041306a24000b3b01037f230041106b220024001038410110d701410010cb012101200041046a220210b303200210f80228020042002001109a01200041106a24000b3701027f230041106b220024001038410010d701200041046a220110b30310f702200110f802280200420010a2011021200041106a24000b4b01027f230041206b22002400410010d701200041106a220110a6012000200028021836020c200110b303200110f8022000410c6a10a503044041d5880841151003000b200041206a24000bd90102097f017e230041306b22002400410010d70110a70121022000410c6a220110b303200041206a2103200110f802210620021012210741002101024002400340200141106a22042001490d02200420074b0d01200342003703002000420037031820022001200041186a2205411010a8011a2000410036022c20052000412c6a220810a90121012005200810aa0121092000200041186a2000412c6a10a90136022420002001360220200020093703182006200310a503450440200421010c010b0b41d5880841151003000b200041306a24000f0b1076000b4701017f230041106b220024001038410010d701200041046a10b303027f200028020c10ed024504402000280204200028020810fd020c010b108a010b10081a200041106a24000b920201087f230041206b2200240010ac01410110d7014100108e01210610a501200041086a107210702102108a0121072000410036021420002802102103200041146a2101230041d0006b22002400200041086a20031073024002400240200028020841016b0e020001020b4199880841181003000b41b1880841141003000b027f2001280200220545044010a001108a01220410f90220042003109b01418a8908210541100c010b2001280208210420012802040b210120034101200010a802200041306a200220072006410310f3012000412c6a2004360200200041286a200136020020002005360224200020002802483602202000200028024036021c20002000290330370214200041146a10f401000b6701027f230041106b220024001038410110d7014100108e012101200041046a1072024020002802042000280208107941024704402001109a02450d01200028020c41022001107710a802200041106a24000f0b41b1880841141003000b41c5880841101003000b5a01037f230041206b220024001038410210d701410010cb0121012000410110ca0122024110763a0012200020023b0110200041146a10722000200028021420002802182001200041106a108f03200010de01200041206a24000b890101047f230041306b220024001038410310d701410041bf8f08410210c801410110cb0121032000410210ca0122014110763a0012200020013b0110200041146a1072200041206a2201200028021420002802182003200041106a108f032001109003200041086a200041286a29030037030020002000290320370300200010de01200041306a24000b4902027f017e230041206b220024001038410210d7014100101b2102410110cb012101200041146a107220002000280214200028021820022001109103200010de01200041206a24000b7802047f017e230041306b220024001038410310d701410041bf8f08410210c8014101101b2104410210cb012102200041146a1072200041206a220320002802142000280218200420021091032003109003200041086a200041286a29030037030020002000290320370300200010de01200041306a24000b4202037f017e230041106b220024001038410210d7014100101b2103410110cb012101200041046a22021072200210f80228020020032001109a01200041106a24000b3e02027f017e230041106b220024001038410110d7014100101b2102200041046a2201107210f702200110f802280200200210a2011021200041106a24000be402020b7f017e230041306b220024001038410110d7014100101b210b200041106a2201107210f702200110f8024200100b210610042102100421071004210810042103100421014200100b21091004210a280200200b2006200220072008200320012009200a106820011012450440200141f18108412010241a0b200041003b011c200241002000411c6a22042202410210a8011a200310772203101221012000412c6a41003a0000200041286a200136020020002003360224200020013602202000410036021c2002109d0321022004109d0321032000411c6a109d032104200028021c200028022010c401044020002d002c044041c4e608410036020041c8e60841003a00000b200041086a108701200020002d000c3a00202000200028020836021c2000411c6a2201200210e3012001200310e3012001200410e301200028021c20002d0020108b01200041306a24000f0b41e18608412041a58008410e107e000b4501017f230041106b220024001038410010d701200041046a1072027f200028020c10a50204402000280204200028020810fd020c010b108a010b10081a200041106a24000b4e01027f230041106b220024001038410110d701410041d78f08410310ba012101200041046a10b0032000280208109f02044041df8708410f1003000b200028020c200110d502200041106a24000b4201027f230041106b220024001038410110d701410041ad8d08410510ba012101200041046a10b00320002802042000280208200110d602ad1020200041106a24000b990101077f230041106b220024001038410110d701410041ad8d08410510ba012103200041046a10b00320002802082202109f022101200028020422042002200110d6022105024020012003460440200521060c010b20042002200310d6022106200420022003200510d7020b200420022001410010c90220014504401076000b200028020c200141016b10d5022006ad1020200041106a24000b4e01037f230041106b220024001038410210d701410041ad8d08410510ba012101410141d58f08410210ba012102200041046a10b003200028020420002802082001200210d702200041106a24000b6801057f230041106b220124001038410010d701200141046a10b00320012802082202109f022103200128020421044101210002400340200020034d04402000417f460d0220042002200010d602ad1020200041016a21000c010b0b200141106a24000f0b1076000b7e02057f017e230041206b220024001038410210d701200041086a410041e58f0810d201200041146a410141e38f0810d2012000411c6a2802002101200041186a280200210220002802102103200028020c210420002802082000280214108a0245200220044772047e420005200320011078ad0b103b200041206a24000b0d001038410010d701420010200b0c001038410010d7011076000b0d001038410010d701427e103b0b11001038410010d70141818708410410220b7101037f1038410110d701230041106b220124004100108e012200101241044604402001410036020c200041002001410c6a2202410410a8011a41feffffff0720002002410441818708410410d0011b21000b200141106a2400200041feffffff0747047e2000109a02ad0542010b103b0b14001038410110d7014100108e01109a02ad103b0b970102037f027e230041206b220024001038410110d701410041f08c08410810ba01ad2104108a01210103402003200451450440108a012202200342017c220310fc012001200210b3010c010b0b2000200136021020002001101236021c200041003602182000200041106a3602140340200041086a200041146a10e60120002802080440200028020c10081a0c010b0b200041206a24000b2b01017f1038410110d701410041f88c08410610ba01220045044041e28c08410e109801000b2000ad10200b2001017f1038410110d701410041b28d08410710c801210010b103200010a6020b4901017f230041206b220024001038410010d701200010b10310a10241c18f08410a106f10bf02200041106a2000280200200028020410d402200028021045ad103b200041206a24000b6001037f230041106b220024001038410110d701410041fe8c08410410ba01200010b10310a10241c18f08410a106f10bf02200028020c1077220141bc87084108100e1a200110b8022000280208200110ae02410047ad103b200041106a24000b4701017f230041206b220024001038410010d701200010b10310a10241c18f08410a106f10bf02200041106a2000280200200028020410d40220003502101020200041206a24000b6e01047f230041106b220124001038410110d701410041828d08410510ba0121024101210003402003200020024b72450440200141086a41c18f08410a106f1097032001280208200128020c200010b7021a200020024f2103200020002002496a21000c010b0b200141106a24000be10501057f230041e0006b220024000240024010f50122041095012201108e020d0020011077220210122101200041cc006a41003a0000200041c8006a200136020020002002360244200020013602402000410036023c2000413c6a2201109403210220011095032103108a01210103402003044020012000413c6a10940310b301200341016b21030c010b0b200028023c200028024010c401450d0120002d004c044041c4e608410036020041c8e60841003a00000b200410ad022000200210fa012000280220450d002000413c6a200210fa01200028025c450d00024002402000413c6a41ff8e08411b10f9014504402000413c6a419a8f08411f10f9010d012000413c6a41ed8e08411210f9010d02200041286a2002200110a1032000280228450d03200041306a28020021012000413c6a200028022c220210fa01200028025c450d03200041286a2002200110a1032000280228450d032000413c6a200028022c200041306a28020010a103200028023c450d0341ac8c0841361003000b10d901410010d80120004100360224200041286a2202200041246a10b901200028022410d5012000280228200028022c21042002200110da0110d901200028022c200028023010d601450440200041286a220110b30320012004109b030c030b200041286a10b303200028023010fe020c020b10d901410010d80120004100360224200041286a2202200041246a41b98f08410610af01200028022410d50120002802282002200110da0110d901200028022c200028023010d601450440200041286a220110a60120002802302102200110b30320012002109b030c020b200041286a10b303200028023010fe020c010b10d901410010d80120004100360224200041286a2202200041246a41b98f08410610af01200028022410d50120002802282002200110da0110d901200028022c200028023010d6010d0041e593084108106f10ea020b200041e0006a24000f0b41948108411941a58008410e107e000b3801017f230041106b2203240020034200370308200320012002200341086a109f0320002003280200200328020410ab02200341106a24000b4301027f108a0122062000109b01027f2001500440410d210720050c010b20062001109c012004210720030b210020062002109d01100920002007106f2006109e011a0b3401027f230041106b22032400200341086a20022001106f220410732000200329030837020020002004360208200341106a24000b0b9d180600418080080bf101546f6b656e417474726962757465736e6f6e46756e6769626c65546f6b656e4d6170706572696e70757420746f6f206c6f6e67696e76616c69642076616c756564656c6962657261746520746f70206465636f6465206572726f7264656c6962657261746520746f7020656e636f6465206572726f7264656c69626572617465206e657374656420656e636f6465206572726f7273657269616c697a6572206465636f6465206572726f723a20455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e465443726561746500419182080bd202696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473656e64706f696e7420726573756c7420656e636f6465206572726f723a2063616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e6567617469766566616c73657472756563616e467265657a6563616e5769706563616e506175736563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c650041ec84080b010100418085080bd70f02ffff464e474e46545346544d4554417265676973746572416e64536574416c6c526f6c65736973737565636f6e74726163742063616c6c20656e636f6465206572726f723a2043425f434c4f53555245696e70757420746f6f2073686f72746361737420746f20693634206572726f72703232347032353670333834703532316661696c656420746f206c6f616420746f20627974652061727261794d616e6167656456656320696e646578206f7574206f662072616e6765000000000000617474656d707420746f206d756c7469706c792077697468206f766572666c6f776572726f72206465636f64696e67204553445420617474726962757465733a2045474c4473746f72616765206b657920656e636f6465206572726f723a2073746f7261676520656e636f6465206572726f723a202e6d61707065642e6e6f64655f69642e6974656d2e6e6f64655f6c696e6b732e76616c75652e696e666f6c656e20616c7265616479207365742e6c656e2e6e6f64652e73746f726167654164647265737320616c7265616479207265676973746572656449737375652077617320616c72656164792063616c6c6564546f6b656e20494420616c726561647920736574496e76616c696420746f6b656e204944496e76616c6964207061796d656e7420746f6b656e4d757374206973737565206f722073657420746f6b656e20494420666972737464656661756c745f69737375655f636264656661756c745f69737375655f696e69745f737570706c795f6362556e6b6e6f776e20746f6b656e206964412076616c756520776173206e6f742070726576696f75736c79207365742e617474722e636f756e7465722e6d617070696e672e6e6f6e6365436f756e746572206f766572666c6f772e2054686973206d6f64756c652063616e20686f6c642065766964656e636520666f72206d6178696d756d2075383a3a4d415820646966666572656e7420746f6b656e20494473412076616c75652077617320616c7265616479207365746c6f67206461746120656e636f6465206572726f723a206c6f6720746f70696320656e636f6465206572726f723a20726563697069656e742061646472657373206e6f742073657473746f72616765206465636f6465206572726f723a20786d616d766563616d76656e636f64655f6572726f725f6d6574686f6464617461617267326e756d5f6c6f67736261206d75737420657175616c206273635f70616e696320746573747369676e6b657973686173685f74797065617267617267336e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637477616e7473206e6f6e2d7a65726f686f775f6d616e796e756d6265726974656d76616c75656f7468657277697365696e6372656d656e7464656661756c746b65795f696e6372656d656e74696e64657861646472657373616464723261646472316d76326d7631696e646578206f7574206f6620626f756e6473696f70745f61646472517565756520656d707479216e6f7420656e6f7567682066756e647363757276655f62697473697a656d62326d6231736c6963655f6c656e7374617274696e675f706f736974696f6e6e725f6279746573617272617973746f726167655f6b65796e65775f76616c75656e6f64655f6964656c656d656e746f746865724e6f2073746f72616765217365745f726f6c65735f63616c6c6261636b637573746f6d5f69737375655f7a65726f5f737570706c795f6362637573746f6d5f69737375655f6e6f6e5f7a65726f5f737570706c795f6362726573756c74746f7365745f6d61707065726174747269627574657369646c656e617673656e7a6f70747332733170656e64696e67626164206172726179206c656e67746876617220617267736172726179206465636f6465206572726f726361706163697479206578636565646564696e707574206f7574206f662072616e6765696e697469616c5f63616c6c657263616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c75656576656e745f616576656e745f626576656e745f6572725f646174616576656e745f6572725f746f7069636c6f61645f776974685f6b65795f6572726c6f61645f776974685f76616c75655f65727273746f72655f776974685f76616c75655f6572726d61705f6d61707065727665635f6d617070657273746f726167655f62797465737365725f327573697a656269675f696e746269675f75696e746e725f746f5f636c656172693634753634626f6f6c6d6170316d6170326d61703371756575655f6d6170706572454c524f4e44693634454c524f4e447265736572766564454c524f4e4442696755696e746933326d795f73696e676c655f76616c75655f6d61707065726c6973745f6d61707065726d61705f73746f726167655f6d6170706572616464726573735f696473756e697175655f69645f6d6170706572636f6e74726163745f6164647265737377686974656c6973744d617070657266756e6769626c65546f6b656e4d6170706572726f6c657353657400000003000000030000000300000004000000000000008302020086020200890202008c020200580a0200340b0200500b02006c0b02008c0b0200a40b0200c00b0200e40b0200fc0b0200300b02004c0b0200680b0200880b0200a00b0200bc0b0200e00b0200f80b020041e094080bcf03617474656d707420746f206164642077697468206f766572666c6f77456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e7473616464724964616464726c6173744964556e6b6e6f776e2061646472657373696e646578206f7574206f662072616e67654974656d206e6f742077686974656c6973746564454c524f4e4472657761726445534454526f6c654c6f63616c4d696e7400001d0b02001100000045534454526f6c654c6f63616c4275726e000000380b02001100000045534454526f6c654e4654437265617465000000540b02001100000045534454526f6c654e46544164645175616e746974790000700b02001600000045534454526f6c654e46544275726e00900b02000f00000045534454526f6c654e4654416464555249000000a80b02001100000045534454526f6c654e46545570646174654174747269627574657300c40b02001b000000455344545472616e73666572526f6c65e80b020010000000617474656d707420746f2073756274726163742077697468206f766572666c6f7770616e6963206f636375727265640041b098080b049cffffff" + "code": "0061736d010000000186022660000060027f7f0060027f7f017f60017f017f60017f0060037f7f7f0060037f7f7f017f60047f7f7f7f006000017f60047f7f7f7f017f6000017e60027f7e0060017f017e60057f7f7f7f7f0060027f7f017e60037f7f7e017f60017e017f60037f7e7f0060047f7f7f7e0060057f7f7f7e7f0060017e0060057f7f7e7f7f017f60067f7f7f7f7f7f017f60027f7e017f60067e7f7f7f7f7f017f60077f7f7f7f7f7f7f00600b7f7f7e7f7f7f7f7f7f7f7f0060047e7f7f7f017f60027e7f0060037f7f7f017e60017e017e60037f7f7e0060067f7f7f7f7f7f0060047f7f7e7f0060047f7e7f7f0060057f7e7e7e7e0060067f7e7f7f7f7f0060087e7e7e7e7e7e7f7f0002e2157203656e76126d616e616765645369676e616c4572726f72000403656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000503656e760b7369676e616c4572726f72000103656e760a6d4275666665724e6577000803656e760d6d427566666572417070656e64000203656e76096d4275666665724571000203656e760d6d42756666657246696e697368000303656e76136d42756666657253746f7261676553746f7265000203656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001803656e760d6d616e6167656443616c6c6572000403656e76186d616e616765644765744f726967696e616c547848617368000403656e76106d4275666665724765744c656e677468000303656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365001303656e76136d616e616765644f776e657241646472657373000403656e7612626967496e7447657443616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e76126d427566666572476574417267756d656e74000203656e76126d427566666572417070656e644279746573000603656e76136765744e756d455344545472616e7366657273000803656e7619736d616c6c496e744765745369676e6564417267756d656e74000c03656e7611676574417267756d656e744c656e677468000303656e7617626967496e744765745369676e6564417267756d656e74000103656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e760f6765744e756d417267756d656e7473000803656e760666696e697368000103656e7616736d616c6c496e7446696e697368556e7369676e6564001403656e7614626967496e7446696e697368556e7369676e6564000403656e7609626967496e74537562000503656e760f6d4275666665725365744279746573000603656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465001503656e760a6765744761734c656674000a03656e76106d616e61676564534341646472657373000403656e760f636c65616e52657475726e44617461000003656e7609626967496e744e6577001003656e7616656c6c6970746963437572766547657456616c756573001603656e761067657443757276654c656e6774684543000303656e76086372656174654543000203656e76146d427566666572436f707942797465536c696365000903656e76176d427566666572546f536d616c6c496e745369676e6564000c03656e76196d427566666572546f536d616c6c496e74556e7369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000203656e76156d427566666572546f426967496e745369676e6564000203656e7609626967496e74506f77000503656e761776616c6964617465546f6b656e4964656e746966696572000303656e760a626967496e7454446976000503656e7609626967496e7453686c000503656e7609626967496e74536872000503656e7609626967496e744d756c000503656e760a626967496e744c6f6732000303656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e760a626967496e7453717274000103656e76126d42756666657253746f726167654c6f6164000203656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000503656e76196d42756666657246726f6d536d616c6c496e745369676e6564000b03656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000b03656e761b6d616e616765645472616e7366657256616c756545786563757465001503656e7609626967496e74436d70000203656e760f6973536d617274436f6e7472616374000303656e760f6d616e6167656457726974654c6f67000103656e760e636865636b4e6f5061796d656e74000003656e7612626967496e7446696e6973685369676e6564000403656e7614736d616c6c496e7446696e6973685369676e6564001403656e7609626967496e74416273000103656e7609626967496e744e6567000103656e760a626967496e74544d6f64000503656e7609626967496e74416e64000503656e7608626967496e744f72000503656e7609626967496e74586f72000503656e7611676574426c6f636b54696d657374616d70000a03656e760d676574426c6f636b4e6f6e6365000a03656e760d676574426c6f636b526f756e64000a03656e760d676574426c6f636b45706f6368000a03656e76196d616e61676564476574426c6f636b52616e646f6d53656564000403656e761567657450726576426c6f636b54696d657374616d70000a03656e761167657450726576426c6f636b4e6f6e6365000a03656e761167657450726576426c6f636b526f756e64000a03656e761167657450726576426c6f636b45706f6368000a03656e761d6d616e6167656447657450726576426c6f636b52616e646f6d53656564000403656e761167657453686172644f6641646472657373000303656e76176d616e616765644765745374617465526f6f7448617368000403656e76166d616e61676564476574436f64654d65746164617461000103656e76186d616e6167656449734275696c74696e46756e6374696f6e000303656e760d6d616e61676564536861323536000203656e76106d616e616765644b656363616b323536000203656e76106d616e61676564526970656d64313630000203656e76106d616e61676564566572696679424c53000603656e76146d616e6167656456657269667945643235353139000603656e76166d616e61676564566572696679536563703235366b31000603656e761c6d616e61676564566572696679437573746f6d536563703235366b31000903656e76226d616e61676564456e636f6465536563703235366b314465725369676e6174757265000603656e760f6d616e616765644372656174654543000303656e7616676574507269764b6579427974654c656e6774684543000303656e76056164644543001903656e7608646f75626c654543000d03656e760b69734f6e43757276654543000603656e76136d616e616765645363616c61724d756c744543001603656e76176d616e616765645363616c6172426173654d756c744543000903656e76106d616e616765644d61727368616c4543000903656e761a6d616e616765644d61727368616c436f6d707265737365644543000903656e76126d616e61676564556e6d61727368616c4543000903656e761c6d616e61676564556e6d61727368616c436f6d707265737365644543000903656e76146d616e6167656447656e65726174654b65794543000903656e76106d42756666657253657452616e646f6d000203656e76136d42756666657253657442797465536c696365000903656e76176d616e6167656447657445534454546f6b656e44617461001a03656e760d626967496e744973496e743634000303656e760e626967496e74476574496e743634000c03656e760a626967496e745369676e000303656e76136d42756666657247657442797465536c696365000903656e76106d616e616765644173796e6343616c6c000703d805d6050802030804010700100302100b020105020107060107010708040103010501030101030101030e01050101110507120701111b08080f040808040809020e000307000706080601060606010603060306060606050606020305060603020602030809010d060902040104040001030401010101041c04010101040104090503080707050505010d08060100010b070104040404031d0303070605010117021e010101030202010102030502070303020102020207090108010103030303030c030305050101010405010b040202010207060202010505020107010202060205060206070205020602020101090101070103070501010502010706060202020102050502050501050705010101040b031102170e031f0e02020502020408030503070204200202020f010312070f0f21010612050d0113020403030401010104010d03040122020504050503020104040404010308080804080408010101040801040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002324052505030100030616037f01418080080b7f0041d5e6080b7f0041e0e6080b07a64a9803066d656d6f7279020004696e697400d3031070616e6963576974684d65737361676500d4030a636f756e745f6f6e657300d60319656e64706f696e745f776974685f6d757461626c655f61726700d7030d737172745f6269675f75696e7400d8030d6c6f67325f6269675f75696e7400d9030b706f775f6269675f696e7400da030c706f775f6269675f75696e7400db030f6269675f75696e745f746f5f75363400dc031562696775696e745f6f76657277726974655f75363400dd030d6269675f75696e745f7a65726f00de03136269675f75696e745f66726f6d5f7536345f3100df031162696775696e745f66726f6d5f7531323800e0031c6269675f75696e745f66726f6d5f6d616e616765645f62756666657200e1030c6269675f696e745f7a65726f00e203126269675f696e745f66726f6d5f6936345f3100e3030f6269675f75696e745f65715f75363400e4030e6269675f696e745f746f5f69363400e50314626967696e745f6f76657277726974655f69363400e603106269675f696e745f746f5f706172747300e703146269675f696e745f66726f6d5f62696775696e7400e8030b6164645f6269675f696e7400e903146164645f6269675f696e745f6269675f75696e7400ea03146164645f6269675f75696e745f6269675f696e7400eb03186164645f6269675f696e745f6269675f75696e745f72656600ec03186164645f6269675f75696e745f6269675f696e745f72656600ed030f6164645f6269675f696e745f72656600ee030c6164645f6269675f75696e7400ef03106164645f6269675f75696e745f72656600f0030b7375625f6269675f696e7400f1030f7375625f6269675f696e745f72656600f2030c7375625f6269675f75696e7400f303107375625f6269675f75696e745f72656600f4030b6d756c5f6269675f696e7400f5030f6d756c5f6269675f696e745f72656600f6030c6d756c5f6269675f75696e7400f703106d756c5f6269675f75696e745f72656600f8030b6469765f6269675f696e7400f9030f6469765f6269675f696e745f72656600fa030c6469765f6269675f75696e7400fb03106469765f6269675f75696e745f72656600fc030b72656d5f6269675f696e7400fd030f72656d5f6269675f696e745f72656600fe030c72656d5f6269675f75696e7400ff031072656d5f6269675f75696e745f726566008004126164645f61737369676e5f6269675f696e74008104166164645f61737369676e5f6269675f696e745f726566008204136164645f61737369676e5f6269675f75696e74008304176164645f61737369676e5f6269675f75696e745f726566008404127375625f61737369676e5f6269675f696e74008504167375625f61737369676e5f6269675f696e745f726566008604137375625f61737369676e5f6269675f75696e74008704177375625f61737369676e5f6269675f75696e745f726566008804126d756c5f61737369676e5f6269675f696e74008904136d756c5f61737369676e5f6269675f75696e74008a04126469765f61737369676e5f6269675f696e74008b04136469765f61737369676e5f6269675f75696e74008c041272656d5f61737369676e5f6269675f696e74008d041372656d5f61737369676e5f6269675f75696e74008e04106269745f616e645f6269675f75696e74008f04146269745f616e645f6269675f75696e745f7265660090040f6269745f6f725f6269675f75696e74009104136269745f6f725f6269675f75696e745f726566009204106269745f786f725f6269675f75696e74009304146269745f786f725f6269675f75696e745f726566009404176269745f616e645f61737369676e5f6269675f75696e74009504166269745f6f725f61737369676e5f6269675f75696e74009604176269745f786f725f61737369676e5f6269675f75696e740097040c7368725f6269675f75696e74009804107368725f6269675f75696e745f7265660099040c73686c5f6269675f75696e74009a041073686c5f6269675f75696e745f726566009b04137368725f61737369676e5f6269675f75696e74009c041373686c5f61737369676e5f6269675f75696e74009d04136765745f626c6f636b5f74696d657374616d70009e040f6765745f626c6f636b5f6e6f6e6365009f040f6765745f626c6f636b5f726f756e6400a0040f6765745f626c6f636b5f65706f636800a104156765745f626c6f636b5f72616e646f6d5f7365656400a204186765745f707265765f626c6f636b5f74696d657374616d7000a304146765745f707265765f626c6f636b5f6e6f6e636500a404146765745f707265765f626c6f636b5f726f756e6400a504146765745f707265765f626c6f636b5f65706f636800a6041a6765745f707265765f626c6f636b5f72616e646f6d5f7365656400a7040a6765745f63616c6c657200a804116765745f6f776e65725f6164647265737300a904146765745f73686172645f6f665f6164647265737300aa041169735f736d6172745f636f6e747261637400ab04136765745f73746174655f726f6f745f6861736800ac040b6765745f74785f6861736800ad040c6765745f6761735f6c65667400ae041f6765745f63756d756c617465645f76616c696461746f725f7265776172647300af04116765745f636f64655f6d6574616461746100b0041369735f6275696c74696e5f66756e6374696f6e00b10410636f6465635f6572725f66696e69736800b20415636f6465635f6572725f73746f726167655f6b657900b30415636f6465635f6572725f73746f726167655f67657400b40415636f6465635f6572725f73746f726167655f73657400b50415636f6465635f6572725f6576656e745f746f70696300b60414636f6465635f6572725f6576656e745f6461746100b70417636f6465635f6572725f636f6e74726163745f696e697400b80417636f6465635f6572725f636f6e74726163745f63616c6c00b9040e636f6d707574655f73686132353600ba0411636f6d707574655f6b656363616b32353600bb0411636f6d707574655f726970656d6431363000bc04147665726966795f626c735f7369676e617475726500bd04187665726966795f656432353531395f7369676e617475726500be041a7665726966795f736563703235366b315f7369676e617475726500bf04217665726966795f637573746f6d5f736563703235366b315f7369676e617475726500c0041f636f6d707574655f736563703235366b315f6465725f7369676e617475726500c104086563686f5f75363400c204086563686f5f69363400c304086563686f5f69333200c404086563686f5f75333200c5040a6563686f5f6973697a6500c604076563686f5f693800c704076563686f5f753800c804096563686f5f626f6f6c00c9040d6563686f5f6f70745f626f6f6c00ca040c6563686f5f6e6f7468696e6700cb040d6563686f5f61727261795f753800cc04146563686f5f6d756c74695f76616c75655f75333200cd04176563686f5f6d756c74695f76616c75655f7475706c657300ce04126563686f5f7365725f6578616d706c655f3200cf04106563686f5f73696d706c655f656e756d00d0041c66696e6973685f73696d706c655f656e756d5f76617269616e745f3100d104136563686f5f6e6f6e5f7a65726f5f7573697a6500d2041c6563686f5f736f6d655f617267735f69676e6f72655f6f746865727300d3040d6563686f5f617272617976656300d4040d6563686f5f6269675f75696e7400d5040c6563686f5f6269675f696e7400d604136563686f5f6d616e616765645f62756666657200d704146563686f5f6d616e616765645f6164647265737300d804186563686f5f6269675f696e745f6d616e616765645f76656300d904126563686f5f6269675f696e745f7475706c6500da04136563686f5f6269675f696e745f6f7074696f6e00db041b6563686f5f7475706c655f696e746f5f6d756c7469726573756c7400dc041f6563686f5f6d616e616765645f7665635f6f665f6d616e616765645f76656300dd04246563686f5f6d616e616765645f7665635f6f665f746f6b656e5f6964656e74696669657200de041f6563686f5f6d616e616765645f6173796e635f726573756c745f656d70747900df04176563686f5f7661726167735f6d616e616765645f73756d00e00412636f6d707574655f6765745f76616c75657300e10411636f6d707574655f6372656174655f656300e20415636f6d707574655f6765745f65635f6c656e67746800e30420636f6d707574655f6765745f707269765f6b65795f627974655f6c656e67746800e4040e636f6d707574655f65635f61646400e50411636f6d707574655f65635f646f75626c6500e60416636f6d707574655f69735f6f6e5f63757276655f656300e70413636f6d707574655f7363616c61725f6d756c7400e80418636f6d707574655f7363616c61725f626173655f6d756c7400e90412636f6d707574655f6d61727368616c5f656300ea041d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300eb0414636f6d707574655f756e6d61727368616c5f656300ec041f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f656300ed0417636f6d707574655f67656e65726174655f6b65795f656300ee04096c6f674576656e744100ef040f6c6f674576656e744152657065617400f004096c6f674576656e744200f104136f6e6c795f6f776e65725f656e64706f696e7400f2041a6f6e6c795f757365725f6163636f756e745f656e64706f696e7400f3040e726571756972655f657175616c7300f4040873635f70616e696300f504136d616464726573735f66726f6d5f617272617900f6041c6d616464726573735f66726f6d5f6d616e616765645f62756666657200f7040b6d6275666665725f6e657700f8040e6d6275666665725f636f6e63617400f904126d6275666665725f636f70795f736c69636500fa04126d6275666665725f7365745f72616e646f6d00fb040a6d6275666665725f657100fc04146d616e616765645f616464726573735f7a65726f00fd04126d616e616765645f616464726573735f657100fe040f6d616e616765645f7665635f6e657700ff04186d616e616765645f7665635f62696775696e745f70757368008005166d616e616765645f7665635f62696775696e745f6571008105186d616e616765645f7665635f616464726573735f707573680082050f6d616e616765645f7665635f736574008305126d616e616765645f7665635f72656d6f7665008405106d616e616765645f7665635f66696e64008505146d616e616765645f7665635f636f6e7461696e73008605146d616e616765645f7265665f6578706c696369740087051073746f726167655f726561645f7261770088051173746f726167655f77726974655f7261770089051973746f726167655f726561645f66726f6d5f61646472657373008a050a6c6f61645f6279746573008b050d6c6f61645f6269675f75696e74008c050c6c6f61645f6269675f696e74008d05086c6f61645f753634008e050a6c6f61645f7573697a65008f05086c6f61645f693634009005096c6f61645f626f6f6c009105096c6f61645f616464720092050d6c6f61645f6f70745f616464720093051169735f656d7074795f6f70745f616464720094050f6765745f6e725f746f5f636c65617200950513636c6561725f73746f726167655f76616c75650096050a6c6f61645f7365725f32009705096c6f61645f6d617031009805096c6f61645f6d617032009905096c6f61645f6d617033009a05156c6f61645f66726f6d5f616464726573735f726177009b050b73746f72655f6279746573009c050e73746f72655f6269675f75696e74009d050d73746f72655f6269675f696e74009e050b73746f72655f7573697a65009f050973746f72655f69333200a0050973746f72655f75363400a1050973746f72655f69363400a2050a73746f72655f626f6f6c00a3050a73746f72655f6164647200a4050e73746f72655f6f70745f6164647200a5050b73746f72655f7365725f3200a6050a73746f72655f6d61703100a7050a73746f72655f6d61703200a8050a73746f72655f6d61703300a9051273746f72655f72657365727665645f69363400aa051773746f72655f72657365727665645f6269675f75696e7400ab051573746f72655f72657365727665645f7665635f753800ac051b616464726573735f746f5f69645f6d61707065725f6765745f696400ad0524616464726573735f746f5f69645f6d61707065725f6765745f69645f6e6f6e5f7a65726f00ae0520616464726573735f746f5f69645f6d61707065725f6765745f6164647265737300af051d616464726573735f746f5f69645f6d61707065725f636f6e7461696e7300b00518616464726573735f746f5f69645f6d61707065725f73657400b10525616464726573735f746f5f69645f6d61707065725f6765745f69645f6f725f696e7365727400b20521616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f696400b30526616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f6164647265737300b4050d6765744c6973744d617070657200b505126c6973744d6170706572507573684261636b00b605136c6973744d61707065725075736846726f6e7400b805126c6973744d6170706572506f7046726f6e7400b905116c6973744d6170706572506f704261636b00ba050f6c6973744d617070657246726f6e7400bb050e6c6973744d61707065724261636b00bc05136c6973744d617070657250757368416674657200bd05146c6973744d6170706572507573684265666f726500be05146c6973744d617070657252656d6f76654e6f646500bf05186c6973744d617070657252656d6f76654e6f64654279496400c005126c6973744d617070657253657456616c756500c105166c6973744d617070657253657456616c75654279496400c205176c6973744d617070657249746572617465427948616e6400c305176c6973744d61707065724974657261746542794974657200c4050c71756575655f6d617070657200c5051671756575655f6d61707065725f707573685f6261636b00c6051671756575655f6d61707065725f706f705f66726f6e7400c7051271756575655f6d61707065725f66726f6e7400c8050a6d61705f6d617070657200c9050f6d61705f6d61707065725f6b65797300ca05116d61705f6d61707065725f76616c75657300cb05116d61705f6d61707065725f696e7365727400cc05176d61705f6d61707065725f636f6e7461696e735f6b657900cd050e6d61705f6d61707065725f67657400ce05116d61705f6d61707065725f72656d6f766500cf052c6d61705f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e7400d005226d61705f6d61707065725f656e7472795f6f725f696e736572745f64656661756c7400d1051b6d61705f6d61707065725f656e7472795f616e645f6d6f6469667900d205236d61705f6d61707065725f656e7472795f6f725f696e736572745f776974685f6b657900d305176d61705f73746f726167655f6d61707065725f7669657700d405216d61705f73746f726167655f6d61707065725f696e736572745f64656661756c7400d5051f6d61705f73746f726167655f6d61707065725f636f6e7461696e735f6b657900d605166d61705f73746f726167655f6d61707065725f67657400d7051f6d61705f73746f726167655f6d61707065725f696e736572745f76616c756500d8051c6d61705f73746f726167655f6d61707065725f6765745f76616c756500d905196d61705f73746f726167655f6d61707065725f72656d6f766500da05186d61705f73746f726167655f6d61707065725f636c65617200db05346d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e7400dc05386d61705f73746f726167655f6d61707065725f656e7472795f616e645f6d6f646966795f696e6372656d656e745f6f725f64656661756c7400dd052a6d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f75706461746500de050a7365745f6d617070657200df05117365745f6d61707065725f696e7365727400e005137365745f6d61707065725f636f6e7461696e7300e105117365745f6d61707065725f72656d6f766500e205107365745f6d61707065725f66726f6e7400e3050f7365745f6d61707065725f6261636b00e4050f7365745f6d61707065725f6e65787400e505137365745f6d61707065725f70726576696f757300e6051e7365745f6d61707065725f697465725f66726f6d5f616e645f636f756e7400e7051a6d61705f6d795f73696e676c655f76616c75655f6d617070657200e805226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3100e905226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3200ea052c6d795f73696e676c655f76616c75655f6d61707065725f73756274726163745f776974685f7265717569726500eb05236d795f73696e676c655f76616c75655f6d61707065725f7365745f69665f656d70747900ec0519636c6561725f73696e676c655f76616c75655f6d617070657200ed05246765745f66726f6d5f616464726573735f73696e676c655f76616c75655f6d617070657200ee052769735f656d7074795f61745f616464726573735f73696e676c655f76616c75655f6d617070657200ef05237261775f627974655f6c656e6774685f73696e676c655f76616c75655f6d617070657200f005207365745f73696e676c655f76616c75655f6d61707065725f776974685f6b657900f1050a7665635f6d617070657200f2050f7665635f6d61707065725f7075736800f3050e7665635f6d61707065725f67657400f405197665635f6d61707065725f6765745f61745f6164647265737300f5050e7665635f6d61707065725f6c656e00f605197665635f6d61707065725f6c656e5f61745f6164647265737300f70514746f6b656e5f617474726962757465735f73657400f80517746f6b656e5f617474726962757465735f75706461746500f9051f746f6b656e5f617474726962757465735f6765745f6174747269627574657300fa051a746f6b656e5f617474726962757465735f6765745f6e6f6e636500fb0516746f6b656e5f617474726962757465735f636c65617200fc051f746f6b656e5f617474726962757465735f6861735f6174747269627574657300fd05106164645f746f5f77686974656c69737400fe051572656d6f76655f66726f6d5f77686974656c69737400ff050e636865636b5f636f6e7461696e7300800619636865636b5f636f6e7461696e735f61745f6164647265737300810610726571756972655f636f6e7461696e730082061b726571756972655f636f6e7461696e735f61745f616464726573730083061f69737375655f66756e6769626c655f64656661756c745f63616c6c6261636b0084061e69737375655f66756e6769626c655f637573746f6d5f63616c6c6261636b0085062069737375655f616e645f7365745f616c6c5f726f6c65735f66756e6769626c65008606187365745f6c6f63616c5f726f6c65735f66756e6769626c650087060d6d696e745f66756e6769626c65008806166d696e745f616e645f73656e645f66756e6769626c650089060d6275726e5f66756e6769626c65008a06146765745f62616c616e63655f66756e6769626c65008b061b726571756972655f73616d655f746f6b656e5f66756e6769626c65008c061f726571756972655f616c6c5f73616d655f746f6b656e5f66756e6769626c65008d061267657446756e6769626c65546f6b656e4964008e061c69737375655f616e645f7365745f616c6c5f726f6c65735f6d657461008f06176d61707065725f6e66745f7365745f746f6b656e5f6964009006116d61707065725f6e66745f6372656174650091061a6d61707065725f6e66745f6372656174655f616e645f73656e64009206176d61707065725f6e66745f6164645f7175616e74697479009306206d61707065725f6e66745f6164645f7175616e746974795f616e645f73656e640094060f6d61707065725f6e66745f6275726e009506166d61707065725f6e66745f6765745f62616c616e63650096061b6d61707065725f6765745f746f6b656e5f61747472696275746573009706156765744e6f6e46756e6769626c65546f6b656e496400980615696e69745f756e697175655f69645f6d617070657200990614756e697175655f69645f6d61707065725f676574009a061c756e697175655f69645f6d61707065725f737761705f72656d6f7665009b0614756e697175655f69645f6d61707065725f736574009c0610756e697175655f69645f6d6170706572009d0614756e6f7264657265645f7365745f6d6170706572009e061b756e6f7264657265645f7365745f6d61707065725f696e73657274009f061d756e6f7264657265645f7365745f6d61707065725f636f6e7461696e7300a0061b756e6f7264657265645f7365745f6d61707065725f72656d6f766500a106116d616e616765645f7374727563745f657100a2060c6f766572666c6f775f75313600a3060f6e6f5f6f766572666c6f775f69313600a4060c6f766572666c6f775f69313600a50615746f6b656e5f6964656e7469666965725f65676c6400a6061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3100a7061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3200a806136e6f6e5f7a65726f5f7573697a655f6974657200a906146e6f6e5f7a65726f5f7573697a655f6d6163726f00aa061472657475726e735f65676c645f646563696d616c00ab06147365745f636f6e74726163745f6164647265737300ac061369735f656d7074795f61745f6164647265737300ad0613636f6e7461696e735f61745f6164647265737300ae060e6c656e5f61745f6164647265737300af060f6e6578745f61745f6164647265737300b0061370726576696f75735f61745f6164647265737300b1061066726f6e745f61745f6164647265737300b2060f6261636b5f61745f6164647265737300b3060f6b6579735f61745f6164647265737300b4061176616c7565735f61745f6164647265737300b5061d636f6e7461696e735f756e6f7264657265645f61745f6164647265737300b6060c6765745f62795f696e64657800b7060f66696c6c5f7365745f6d617070657200b8060f66696c6c5f6d61705f6d617070657200b9061966696c6c5f756e6f7264657265645f7365745f6d617070657200ba06206765745f76616c75655f66726f6d5f616464726573735f776974685f6b65797300bb06186d616e616765645f646563696d616c5f6164646974696f6e00bc061b6d616e616765645f646563696d616c5f7375627472616374696f6e00bd06126d616e616765645f646563696d616c5f657100be06156d616e616765645f646563696d616c5f7472756e6300bf061e6d616e616765645f646563696d616c5f696e746f5f7261775f756e69747300c006126d616e616765645f646563696d616c5f6c6e00c106146d616e616765645f646563696d616c5f6c6f673200c2060863616c6c4261636b00c3060e6f766572666c6f775f7573697a6500a3060b6f766572666c6f775f753800a3060c6f766572666c6f775f75333200a3060c6f766572666c6f775f75363400a3060e6f766572666c6f775f6973697a6500a5060b6f766572666c6f775f693800a5060c6f766572666c6f775f69333200a5060c6f766572666c6f775f69363400a5061c69735f656d7074795f73696e676c655f76616c75655f6d617070657200ee05136269675f75696e745f66726f6d5f7536345f3200df03126269675f696e745f66726f6d5f6936345f3200e303196563686f5f7661726167735f6d616e616765645f656167657200cd040a6563686f5f7573697a6500c504166d756c5f61737369676e5f6269675f696e745f726566008904176d756c5f61737369676e5f6269675f75696e745f726566008a04166469765f61737369676e5f6269675f696e745f726566008b04176469765f61737369676e5f6269675f75696e745f726566008c041672656d5f61737369676e5f6269675f696e745f726566008d041772656d5f61737369676e5f6269675f75696e745f726566008e041b6269745f616e645f61737369676e5f6269675f75696e745f7265660095041a6269745f6f725f61737369676e5f6269675f75696e745f7265660096041b6269745f786f725f61737369676e5f6269675f75696e745f726566009704177368725f61737369676e5f6269675f75696e745f726566009c041773686c5f61737369676e5f6269675f75696e745f726566009d040f706f775f6269675f696e745f72656600da0310706f775f6269675f75696e745f72656600db03116e6f5f6f766572666c6f775f7573697a6500a4060e6e6f5f6f766572666c6f775f753800a4060f6e6f5f6f766572666c6f775f75333200a4060f6e6f5f6f766572666c6f775f75363400a4060f6e6f5f6f766572666c6f775f75313600a406116e6f5f6f766572666c6f775f6973697a6500a4060e6e6f5f6f766572666c6f775f693800a4060f6e6f5f6f766572666c6f775f69333200a4060f6e6f5f6f766572666c6f775f69363400a40611737172745f6269675f75696e745f72656600d803206269675f75696e745f66726f6d5f6d616e616765645f6275666665725f72656600e103116c6f67325f6269675f75696e745f72656600d9030a5f5f646174615f656e6403010b5f5f686561705f6261736503020ae6fa02d6050a0041808008410f10730b1101017f1075220220002001101f1a20020b1601017f1075220142001001200120012000100220010b2801027f41b09708280200220141016b2200200148044041b09708200036020020000f0b10b001000b0d0020004116418f800810c6060b7301027f230041106b22022400027f4100200110970122011094020d001a2001100c41074604402002410036000b2002410036020820014100200241086a2203410710ad011a41012003410741f98f08410710d3010d011a0b41020b21032000200136020420002003360200200241106a24000b1b00200120034b04401079000b20002001360204200020023602000b060010b001000b0e01017f107522012000100120010b0f01017f10042201200010051a20010b0b0020002001100641004a0b0e01017f107522012000107e20010b0b002000200110900210010b1100200041024f04402001107b1a0b20000b5d01037f230041106b2203240020012802042202047f200341086a2001280200220428020020021081012001200328020c36020420042802002002108201210241010541000b21012000200236020420002001360200200341106a24000b870101027f230041206b220324002003410c6a2204200141ea8708410b200210dd0222011096012004200110e80221022003410c6a200110e8022104200328020c200328021010c801044020032d001c044041c4e508410036020041c8e50841003a00000b2000200436020420002002360200200341206a24000f0b200141a58008410e109a01000b1200200041f587084106200110dd0210ad020b6c01047f230041106b2203240020012802042202047f200341086a20012802002204280200200441046a220528020020021084012001200328020c360204200428020020052802002002108501210241010541000b21012000200236020420002001360200200341106a24000b890101027f230041206b220424002004410c6a22052001200241ea8708410b200310dd02220110e7022005200110e80221022004410c6a200110e8022103200428020c200428021010c801044020042d001c044041c4e508410036020041c8e50841003a00000b2000200336020420002002360200200441206a24000f0b200141a58008410e109a01000b14002000200141f587084106200210dd0210d2020b10002000200141db8008411b108701000b160020002001107322002002200310141a20001000000b7501027f230041106b22022400200241086a2001108001024020002002280208410146047f200220012802082201280200200141086a280200200228020c22011089012002280200450d0120022802042103200020013602042000200336020841010541000b360200200241106a24000f0b1079000b2a002001200310c402047f2002200310c302210341010541000b210120002003360204200020013602000b08004101410010730b0700200010071a0b0c0020012000108d0110081a0b0f01017f10752201200010341a20010b8e0102047f017e230041206b2202240020002001280200047f200141106a22032802002104200129020421062002410c6a2001280214280200200128020c2205108f0120032002411c6a280200360200200141086a200241146a2902003702002001200229020c370200200020043602102000200536020c2000200637020441010541000b360200200241206a24000b2401017f20002001200210f102047f410005200041046a2001200210f20241010b3602000b0c00200020011091011092010b0d0020001075220010131a20000b2d01017f2001100c2102200041003a00102000200236020c2000200136020820002002360204200041003602000b0c00200010940120011095010b0f01017f107522012000102b1a20010b5101027f230041106b2202240020022000100c220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104108b022001200010e401200241106a24000b0c00200020011097011092010b0d0020001075220010371a20000b3d02017f017e230041106b22022400200220001097011099012002290300a74101470440200141e78508410e109a01000b2002290308200241106a24000b2901027e2001100c41084b047e4200052001102a210242010b210320002002370308200020033703000b2c01017f41c38b08411b10732203200010051a200341918208410310141a20032001200210141a20031000000b0c002000108d0120011095010b0900200020011003000b1500200020012002410b41d0830841c3830810c5060b19002001200210732101200010b601360204200020013602000b1d0010b6011a20022003107b10bc0120002002360204200020013602000b2301017f10b6012204200310fe012002200410bc0120002002360204200020013602000b1e0010b6011a20022003108d0110bc0120002002360204200020013602000b1701017e10214162102210f1012000200110a4011a10230b1500200020012002411241e8830841db830810c5060b1500200041622001200220031075220110091a20010b0c01017f10752200100a20000b0c01017f10752200100b20000b2e01027f107521032001100c2104200010a801200141b5e608100d1a4195e60841b5e608200420022003100e20030b0b0020004195e608100d1a0b0c01017f10752200100f20000b2b01017f41d0e5082d000022000440417541ffffffff0720001b0f0b41d0e50841013a00004175101041750bc301020a7f017e230041206b22012400024010ac012204100c41707141104604402004100c2105200141106a2106410121030340200241106a220720054b0d02200642003703002001420037030820042002200141086a2202411010ad011a2001410036021c200320022001411c6a220310ae0121092002200310af01210b200141086a2001411c6a10ae01210a20072102410021030d000b10b001000b41d8810841221003000b2000200a36020c200020093602082000200b370300200141206a24000b2b01017f41d4e5082d000022000440416b41ffffffff0720001b0f0b41d4e50841013a0000416b1011416b0b0f00200020012003200210704100470b810101037f230041106b220224002002410036020c02402001280200220441046a220320044f044020034111490d011079000b10b001000b2002410c6a4104200020046a200320046b10a50220012003360200200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720bb50102017e037f230041106b220324002003420037030802402001280200220541086a220420054f044020044111490d011079000b10b001000b200341086a4108200020056a200420056b10a5022001200436020020032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b060010d503000b0c00200010752200101220000b2e01017f41fa81084117107322042000200110141a200441918208410310141a20042002200310141a20041000000b120010154504400f0b4194820841251003000b5d01027f027f410020012002200310b501220445200441ebde0146720d001a200128020041cce5082802004e044010b601210541010c010b20012002200310b701210541010b21012000200536020820002004360204200020013602000b120020002001200210b9012001200210c4010b1101017f1075220041014100101f1a20000b0e0020002001200210b9011091010ba70101027f230041106b22022400027f200141cc8f08410610b501220341ebde0147410020031b450440200141cc8f08410610b90110910121012002410036020441040c010b027f200128020041cce5082802004e044010b6010c010b200141cc8f08410610b7010b2101200220033602082002410136020441080b200241046a6a200136020020002002290204370200200041086a2002410c6a280200360200200241106a24000b3001017f2000280200220341cce5082802004e04402001200241b98208411110b201000b2000200341016a36020020030b210020001091012200100c41204704402001200241809008411010b201000b20000b2f01017f10b60121030340200028020041cce5082802004e450440200320002001200210b70110bc010c010b0b20030b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410141a200241106a24000b2c01017e2000101622034280808080087d42ffffffff6f5804402001200241a99008411210b201000b2003a70b0d00200041ce8e08410b10bf010b0d0020002001200210c101107b0b2b00200041bb9008410e10c101107b2200100c412047044041bb9008410e41809008411010b201000b20000b8c0101027f230041106b220324000240200028020822044180808080044904402003410036020c200028020020044102742003410c6a410410ee01450d012001200241b98208411110b201000b10b001000b200328020c21012000200441016a360208200141187420014180fe03714108747220014108764180fe037120014118767272107b200341106a24000b0b0020002001200210ba010b0b0020002001200210c4010b2601017e20001019220342ffffffff0f5804402003a70f0b2001200241a58008410e10b201000bf70102027f017e230041206b220324000240024041001017450d002003410c6a220441001090010240024002400240024020042001200210c60141ff017122040e0404010203000b2001200241b38008410d10b201000b2003410c6a2001200210c701ad2105410121040c020b2003410c6a2001200210c701ad2003410c6a2001200210c701ad422086842105410221040c010b2003410c6a2001200210c701ad2105410321040b200328020c200328021010c801450d0120032d001c450d0041c4e508410036020041c8e50841003a00000b2000200537020420002004360200200341206a24000f0b2001200241a58008410e10b201000b3001017f230041106b22032400200341003a000f20002003410f6a41012001200210d50120032d000f200341106a24000b5301017f230041106b220324002003410036020c20002003410c6a41042001200210d501200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b0a002000200110d001450b0c00200010752200101820000b8f0101037f230041206b220324002003410c6a2204200110900120042002410210cb01210120042002410210c701210520042002410210cc012104200328020c200328021010c801044020032d001c044041c4e508410036020041c8e50841003a00000b200020043602082000200536020420002001360200200341206a24000f0b2002410241a58008410e10b201000b0e0020002001200210cc011088020b1400200020002001200210c7012001200210d7010b9e0101037f230041206b220124002001410c6a22022000109001200241dd8f08410a10c60121002001410c6a41dd8f08410a10c60121022001410c6a41dd8f08410a10c6012103200128020c200128021010c801044020012d001c044041c4e508410036020041c8e50841003a00000b200141206a2400200041ff01712003411074200241ff017141087472720f0b41dd8f08410a41a58008410e10b201000b2601017e4100101622024280017d42ff7d5804402000200141a99008411210b201000b2002a70b2301017e20001019220342ff015804402003a70f0b2001200241a58008410e10b201000b1400200020014d0440200120006b0f0b10b001000b1000200041de8b08410110cc011087020b0d00410041e18d08410110bd010b5301027f2001200346047f4100210302402001450d00034020002d0000220420022d00002205460440200041016a2100200241016a2102200141016b22010d010c020b0b200420056b21030b20030541010b450ba60202037f017e230041206b22022400200241046a22032001109001200341dd8f08410a10cb012104200242003703182003200241186a410841dd8f08410a10d50120022903182105200341dd8f08410a10c701210110b60121030340200104402003200241046a41dd8f08410a10c70110bc01200141016b21010c010b0b2002280204200228020810c801044020022d0014044041c4e508410036020041c8e50841003a00000b2000200336020c200020043602082000200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe03832005423888848484370300200241206a24000f0b41dd8f08410a41a58008410e10b201000b44000240200041086a20002802002001200210a6024504402000280200220120026a220220014f0d0110b001000b2003200441f58508410f10b201000b200020023602000b940101047f230041206b220324002000109101210410b60121052004100c2100200341003a001c2003200036021820032004360214200320003602102003410036020c037f2006200010d001047f20052003410c6a2001200210cb0110bc0120032802102100200328020c21060c010520032d001c044041c4e508410036020041c8e50841003a00000b200341206a240020050b0b0b6201027f230041106b22042400200441086a2000280208200028020022052001108902024020042802084101460440200120056a220120054f0d0110b001000b2002200341f58508410f10b201000b200428020c20002001360200200441106a24000b3301017e027f0240200010192202420158044041002002a741016b0d021a0c010b2001410141a99008411210b201000b41010b0b1900200041cce5082802004e04400f0b41ca820841121003000b1400200020014d04400f0b41ca820841121003000b1400101a20004604400f0b41dc820841191003000b1900200041cce5082802004c04400f0b41b9820841111003000b0b0041cce508101a3602000b2001017f200110df0121022000410036020820002002360204200020013602000b09002000100c4102760b5001017f230041206b2201240020012000280200100c36021c20014100360218200120003602140340200141086a200141146a10e10120012802080440200128020c10071a0c010b0b200141206a24000b9d0101047f230041106b22032400027f02402001280204220241046a220420024f0440200420012802084d0d0141000c020b10b001000b20012802002003410036020c28020020022003410c6a410410ee011a200328020c210220012004360204200241187420024180fe03714108747220024108764180fe037120024118767272210241010b21012000200236020420002001360200200341106a24000b2500200045044041014100101b0f0b108a012200410110e3012000200110e4012000108b010b2701017f230041106b22022400200220013a000f20002002410f6a4101108b02200241106a24000b09002000200110051a0b2c01017f108a012101200028020820011095012000290300200110e601200028020c2001109b012001108b010b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108108b02200241106a24000b7a01017f0240024002400240200028020041016b0e03010203000b4200101c0f0b108a012201410110e3012000280204200110e8012001108b010f0b108a012201410210e3012000280204200110e8012000280208200110e8012001108b010f0b108a012201410310e3012000280204200110e8012001108b010b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104108b02200241106a24000b0d0020004504402001ad101c0b0b2500200045044041014100101b0f0b108a012200410110e3012001200010e8012000108b010b4a01017f108a01210120002802002001109b0120002802042001109b0120002802082001109b01200028020c2001109b0120002802102001109b012000280214200110e8012001108b010b0a002000101d2001101d0b8a0101057f230041106b22022400108a0121032000100c210502400340200141046a22042001490d01200420054d04402002410036020c200020012002410c6a410410ee011a200228020c220141187420014180fe03714108747220014108764180fe0371200141187672722003109b01200421010c010b0b2003108b01200241106a24000f0b10b001000b0d00200020012002200310ad010b2000200020012002101e200010f00141ff017104400f0b4193830841301003000b1500410241012000106f22001b4100200041004e1b0b0a0041764200100141760b0d0020002001200220031071000b220020002001200210f4012000418c84084187840820031b4104410520031b10f4010b1701017f10b601220320012002101f1a2000200310bc010b4c01017f230041106b22032400200341086a20012802002001280204200210ff0120012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000b3301027f200128020410b60122042002ad10fe01200410bc01200041086a200141086a280200360200200020012902003702000b0f0010b6011a20012000107b10bc010b900101027f230041306b22052400200541fb84084116109e012005200136022c20052005290300370224200541186a2201200541246a2206200210f5012005410c6a22022001200310f50120052802102004c04102742201419097086a280200200141a097086a28020010f40120062002410010f6012000200528022c36020820002005290224370200200541306a24000b1a01027f10a601210041968508410a10732201200010051a20010b1d01017f2002200028022046047f200020022001200210d3010541000b0b9d0101057f230041306b22022400200241286a22034200370300200241206a22044200370300200241186a2205420037030020024200370310200241086a2001100c2206200241106a41201078200141002002280208200228020c10ee011a20002006360220200041186a2003290300370000200041106a2004290300370000200041086a200529030037000020002002290310370000200241306a24000b0c0041a08508411c10fd01000b0e0010b6011a20002001108601000b3801017f230041106b2202240020024200370308200220014100200241086a10b603200020022802002002280204101f1a200241106a24000b17002002200310800220002002360204200020013602000b0f0010b6011a20002001107b10bc010b930202067f017e230041206b22012400200029030021072000280210200028020c2000280208200141086a108202200128020c21052001280208210610b6012103280200107b2100280200107421022001200742388620074280fe0383422886842007428080fc0783421886200742808080f80f834208868484200742088842808080f80f832007421888428080fc07838420074228884280fe038320074238888484843702142001200041187420004180fe03714108747220004108764180fe0371200041187672723602102001200241187420024180fe03714108747220024108764180fe03712002411876727236021c2003200141106a411010141a280200200342002006200510201a200141206a24000b1801017f10b6012101200010b601360204200020013602000bae0101047f2000108402200028020c21022000280210210320002802142104230041206b220124002001200236020c2001200436021c200120033602182001200041186a36021420012001410c6a360210230041106b22022400200241bc850810850236020c230041106b22002400200141106a2201280200210320002002410c6a36020420002001290208370208200041046a220028020028020020032802002000280204200028020810f201000b8a0101057f230041206b2201240010f901108a0121022000280200210320002802042205200210db0220022003200510141a2000280208220310df01200210db0220012003100c36021c200141003602182001200041086a3602140340200141086a200141146a10e10120012802080440200128020c20021095010c010b0b200210b502200141206a24000b08002000412010730b3d02017f017e230041106b22032400200320001099012003290300a741014604402003290308200341106a24000f0b2001200241e78508410e10b201000b0d00200010752200102c1a20000b0d0020001075220010351a20000b1f0020012002200310042201102821022000200136020420002002453602000b6001027f230041106b22032400200341086a2000280208200028020022042001108902024020032802084101460440200120046a220120044f0d0110b001000b200241f58508410f109a01000b200328020c20002001360200200341106a24000b0b0020002001200210141a0b090020012000108d020b1601017f10b60122022000ad10fe012001200210bc010b1e002001500440200010f00141016b0f0b41722001100120004172108f020b1500417f20002001103c220041004720004100481b0b1500200042005304404184860841111003000b20000b5301057f200142001024220242001024220342001024220442001024220542001024220610251a200020011026360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41958608200141e001460d001a2001418904470440200141800347044041002001418002470d031a419986080c020b419d86080c010b41a186080b41041027210241010b210120002002360204200020013602000b2901027e2001100c41084b047e42000520011029210242010b210320002002370308200020033703000b07002000100c450b0c00200020002001100220000b1001017f1075220220002001100220020b0a0020002000200110020b0a00200020002001101e0b1301017f1075220220002001109a02102d20020b0b0041722000ad100141720bb50101077f230041106b220424002001100c210703400240027f02402008220541ffffffff03470440200641046a220920074d0d0141000c020b10b001000b2004410036020c200120062004410c6a410410ee011a200428020c220341187420034180fe03714108747220034108764180fe0371200341187672722002109c02450d012005210341010b21012000200336020420002001360200200441106a24000f0b200541016a210820092106200521030c000b000b0e0020002001108f0241ff0171450b5401017f230041106b2204240020034102742203200241027422024f0440200441086a20012002200320026b108902200428020c21012000200428020836020020002001360204200441106a24000f0b10b001000b3a01027f419c7f20006b2101200041d5e5086a22022d00004504404172420a100141712000ad1001200141724171102d200241013a00000b20010b09002000102e4100470b0c00200020002001102f20000b0b0020002000200110ef010b0c00200020002001103020000b1001017f1075220220002001102f20020b1001017f1075220220002001103220020bb50201067f2001200347044010b001000b2001220341104f04402000410020006b41037122046a210520040440200221010340200020012d00003a0000200141016a2101200041016a22002005490d000b0b2005200320046b2203417c7122066a21000240200220046a22044103710440200641004c0d012004410374220141187121072004417c71220841046a2102410020016b4118712109200828020021010340200520012007762002280200220120097472360200200241046a2102200541046a22052000490d000b0c010b200641004c0d0020042102034020052002280200360200200241046a2102200541046a22052000490d000b0b20034103712103200420066a21020b20030440200020036a21010340200020022d00003a0000200241016a2102200041016a22002001490d000b0b0bef0101037f230041106b2204240002400240027f024020002d000845044020002802002205100c22064190ce004b0d0141c8e5082d00000d0141c4e508200636020041c8e50841013a0000200441086a200641b497084190ce001078200541002004280208200428020c10ee011a20002d0008044041c4e508410036020041c8e50841003a00000b200041013a00080b200120036a22002001490d024101200041c4e5082802004b0d011a20004191ce004f0d0320022003200141b497086a200020016b10a50241000c010b200041003a0008200520012002200310ee010b200441106a24000f0b10b001000b1079000b1a00200020011033220136020420002001417f73411f763602000b0e01017f107522004200100120000b3701017f230041106b220224002002200110aa02200228020021012000200229030837030820002001410047ad370300200241106a24000b2901027e2001106d41004c047e4200052001106e210242010b210320002002370308200020033703000b3401017e027f0240200020001098012201420158044041002001a741016b0d021a0c010b200041a990084112109a01000b41010b0b0a0020001097011088020b2601017e2000200010980122014280808080105a0440200041a58008410e109a01000b2001a70b2301017e2000200010980122014280025a0440200041a58008410e109a01000b2001a70b0a0020001097011087020b0900200020001098010b2101017f20001097012201100c41204704402000418090084110109a01000b20010b0d002000416710371a4167100c0b3200024002400240200141016b0e020102000b41014100200010b4020f0b41f98f084107200010b4020f0b2000200210b5020b0b0020022000200110b9020b09002000200110081a0b09002000200110b5020b0c002000200110940110081a0b0b0020004101410010b9020b0d00200020012002107310081a0b0a0020002001ad10bb020b0f0041672001103a2000416710081a0b1200416c41014100101f1a2000416c10081a0b0e002000200110752200103820000b0e0020002001416710384167100c0b0c002000200110c00210bc020b1a002000107b220041d68708410710141a2001200010e80120000b5602037f017e230041106b22042400200441086a20012802002205200128020822062002108901200429030821072006200210c0022003ad10bb0220052001280204200210c2021a20002007370300200441106a24000b2c01017f2000200210c40222034504402001200210cd0221012000200210cc022001ad10bb020b20034101730b0c002000200110c00210ad020b0c002000200110cf024100470b3401017f230041106b2202240020022001280200200128020410c6022000200228020436020420002001360200200241106a24000bc80101047f230041206b220324002002107b220241fb8708410510141a024002402001200210be02450440410021010c010b2003410c6a22042001200210e7022004200210e80221062003410c6a200210e80221012003410c6a200210e80221042003410c6a200210e8022105200328020c200328021010c801450d0120032d001c450d0041c4e508410036020041c8e50841003a00000b2000200536020c200020043602082000200136020420002006360200200341206a24000f0b200241a58008410e109a01000b2501017f2001280200200210c40221032000200236020820002001360204200020033602000b3c01017f230041106b22022400200241086a2000280200200041086a280200200110890120022802084504401079000b200228020c200241106a24000b5301037f230041106b22022400200128020821042001280204210320002001280200047f200405200241086a20032004410010ca0220022802082103200228020c0b36020420002003360200200241106a24000b3001017f230041106b22042400200441086a20012002200310c1022000200136020020002002360204200441106a24000b0c002000200110cc0210b8020b1a002000107b220041dd8708410810141a2001200010e80120000baf0101047f230041206b22022400200241106a200010df020240200228021c41016a220304402002200336021c024020022802102205450440200220033602140c010b200241086a200020022802182204108101200020042002280208200310e0020b200020032004410010e00220022003360218200041f587084106200310dd02200110ba02200541016a22010d010b10b001000b200220013602102000200241106a10e102200241206a240020030b3801027f230041106b220324002000200210cf0222040440200341086a2001200410d0022000200210cb020b200341106a240020044100470b0c002000200110cc0210ad020be50101037f230041306b2203240002402002047f200341186a20012002108101200328021c210420032802182105200341206a200110df02024020050440200341106a20012005108101200120052003280210200410e0020c010b200320043602240b024020040440200341086a20012004108101200120042005200328020c10e0020c010b200320053602280b2001200210dc022001200210820121042001200210de0220032802202202450d012003200241016b3602202001200341206a10e10241010541000b21012000200436020420002001360200200341306a24000f0b10b001000b1f002001107b220141dd8708410810141a2002200110e8012000200110d2020bc40102017e027f230041106b220324002003420037030802402000200110bd022204100c2200410949044020044100200320006b41106a200010ad011a2003290308220242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe0383200242388884848422024280808080105a0d01200341106a24002002a70f0b200141a58008410e109a01000b200141a58008410e109a01000b0e0020002001200210d1024100470b2a0002402002450d00200110ad022002490d002000200210d502200310ba020f0b41eb940841121003000b1a002000107b220041e58708410510141a2001200010db0220000b2901017f200110ad0241016a220304402000200310d502200210ba022001200310ba020f0b10b001000b0c002000200110d50210ad020b250002402002450d00200110ad022002490d002000200210d7020f0b41eb940841121003000b4a01017f02402001450d0020002802002202200028020810da022001490d002000280204107b220041e58708410510141a2001200010db022002200010d2020f0b41eb940841121003000b09002000200110d2020b09002000200110e8010b1200200041ea8708410b200110dd0210b8020b18002000107b22002001200210141a2003200010e80120000b1200200041f587084106200110dd0210b8020bb60101057f230041206b2202240002400240200110e202220110b2024504400c010b2002410c6a220320011096012003200110e80221062002410c6a200110e80221032002410c6a200110e80221042002410c6a200110e8022105200228020c200228021010c801450d0120022d001c450d0041c4e508410036020041c8e50841003a00000b2000200536020c200020043602082000200336020420002006360200200241206a24000f0b200141a58008410e109a01000b2500200041ea8708410b200110dd022002108a01220010e8012003200010e801200010b5020b4e01017f200010e20221022001280200220004402000108a01220010e8012001280204200010e8012001280208200010e801200128020c200010e8012002200010b5020f0b20024101410010b9020b13002000107b220041fb8708410510141a20000b27002003047f200120022003108501210341010541000b210120002003360204200020013602000b25002002047f20012002108201210241010541000b210120002002360204200020013602000b2f01017f230041106b220224002002200128020010df022000200228020436020420002001360200200241106a24000b3701017f230041206b22022400200241106a200110df02200241086a2001200228021410e40220002002290308370300200241206a24000b0e0020002001200210bd021092010b5101017f230041106b220224002002410036020c20002002410c6a41042001109d03200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b19002000107b2200418f8808410410141a20002001ad10bb020b15002000200120022003410020022003471b10d4020b2f0002402002450d00200110ad022002490d002000200210d50210ad022200200220001b0f0b41eb940841121003000b190020022001107b22011095012000107b200110ed024100470b09002000200110be020b0f0020012000107b220010950120000b0f002000200110ee0210b2024100470bc90101047f230041206b22022400024020002001280204220510f1024504402002200010df020240200128020c22030440200241106a22042000200310f20220022001280208220136021820002003200410f3020c010b2002200128020822013602040b024020010440200241106a22042000200110f2022002200336021c20002001200410f3020c010b200220033602080b2000200510f4024101410010b90220022802002201450d012002200141016b3602002000200210e1020b200241206a24000f0b10b001000b0d002000200110f40210b202450ba70101047f230041206b220324002003410c6a22042001200210f40222011096012004200110e80221022003410c6a200110e80221042003410c6a200110e80221052003410c6a200110e8022106200328020c200328021010c801044020032d001c044041c4e508410036020041c8e50841003a00000b2000200636020c200020053602082000200436020420002002360200200341206a24000f0b200141a58008410e109a01000b3b002000200110f402108a0121002002280200200010e8012002280204200010e8012002280208200010e801200228020c200010e801200010b5020b1a002000107b220041938808410510141a2001200010e80120000b2401017f20002001280204220310f1024504402001200236020020002003200110f3020b0b800101027f230041306b22032400024020002001200210f102047f4100052003411c6a20012002108f01200328021c450d01200341106a2202200341286a290200370300200320032902203703082001200341086a10f0022000410c6a20022903003702002000200329030837020441010b360200200341306a24000f0b1079000b2701017f230041106b220224002002200110df02200020012002280204108f01200241106a24000b4e01017f230041106b2203240020032001280200200141086a280200200210f90220032802004504401079000b20002003290204370200200041086a2003410c6a280200360200200341106a24000b2401017f20002001200310c402047f200041046a2002200310fa0241010541000b3602000b1f002001107b220141988808410810141a2002200110e8012000200110fb020b3501027f230041106b220224002001107b2103200241086a200110ad032000200229030837020020002003360208200241106a24000b3c01027f200128020821032001280204210220012802004504402002280200200241046a280200200310c2021a0b20002003360204200020023602000b09002000200110b7020b09002000420110ff020b0f004167200110392000416710081a0b0800200010b202450b16002000200210820310bc022000200110830310bc020b1a002000107b220041d29408410410141a2000200110e40120000b1a002000107b220041cc9408410610141a2001200010e60120000b3f01017e200010850310b00242017c22025045044020002001108203200210bb0220002002108303200110b6022000108503200210bb0220020f0b10b001000b13002000107b220041d69408410610141a20000b2f01017f20012002108303220110b202047f200110b102210141010541000b210320002001360204200020033602000b0c002000200110820310b0020b3801027f2000280208220220011089032203450440200028020020002802042200200110d60220022001200010ad02108a030b20034101730b0c0020002001108c034100470b0f0020002001108b032002ad10bb020b1a002000107b220041ba8808410610141a2001200010e80120000b0c0020002001108b0310ad020b4601017f230041106b22012400200141086a20001077024002400240200128020841016b0e020102000b200141106a24000f0b41c0880841181003000b41d8880841141003000b0c01017f10752200102220000b1c0020002802004102460440200041046a0f0b41ec880841101003000b4001017f10a5012002109103210210b601220310f70120032001108002200020033602082000411c411020021b360204200041c1890841b1890820021b3602000b100020004200108e0241ff01714101460b27002001200210930322014200200310a3012000200336020c20004200370300200020013602080b1800200041024604402001107b0f0b41ec880841101003000b2d01017f230041106b22012400200141086a2000107720012802084101460440200010bc020b200141106a24000bfd03010a7f230041406a220624002000108d03024020052802004504402006200020041090030c010b200641086a200541086a280200360200200620052902003703000b2006428182848080a0c080013702102006410036020c20004101200610b302230041406a220024002006410c6a22052d000b210720052d000a210820052d0009210920052d0008210a20052d0007210b20052d0006210c20052d0005210d20052d0004210e20052802002105200041106a419185084105109e012000200136023c20002000290310370234200041286a2201200041346a220f200210f501200041186a22022001200310f501200041086a2000280218200028021c200410a10120002000290308370318200f2002200510f601200041206a22032000413c6a28020036020020002000290234370318200028021c2201419084084109200e10f3012001419984084107200d10f301200141a084084108200c10f301200141a884084107200b10f301200141af84084107200a10f301200141b68408410e200910f301200141c48408410a200810f301200141ce84084112200710f301200641346a220220013602042002200328020036020820022000280218360200200041406b2400200641206a200641086a280200360200200620062902343703282006200628023c36022420062006290300370318200641186a108302000b0c002000200110970310ae020b1a002000107b220041988a08410810141a2001200010950120000b0f002000200110970310b2024100470b21002000107b2200418b8a08410510141a20012000109a032002200010e60120000b2701017f230041106b22022400200220003a000f20012002410f6a4101108b02200241106a24000b13002000107b220041908a08410810141a20000ba60201037f230041206b22042400200441046a2205200120022003109903220110960120052005200110e8022001108a021088022106200442003703182005200441186a41082001109d0320042903182103200441046a200110e802210210b60121050340200204402005200441046a200110e80210bc01200241016b21020c010b0b2004280204200428020810c801044020042d0014044041c4e508410036020041c8e50841003a00000b2000200536020c200020063602082000200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe03832003423888848484370300200441206a24000f0b200141a58008410e109a01000b42000240200041086a20002802002001200210a6024504402000280200220120026a220220014f0d0110b001000b200341f58508410f109a01000b200020023602000b0e00200020012002109f034101730b0f0020002001200210990310b202450b3300200020012002109903108a01210020032802082000109b012003290300200010e6012003410c6a200010a103200010b5020b5f01027f230041206b220224002000280200220310df01200110db0220022003100c36021c20024100360218200220003602140340200241086a200241146a10e10120022802080440200228020c200110e8010c0105200241206a24000b0b0b900101017f230041206b220324002000107b220041a08a08410610141a20012000109a032002280208108d0120001095012002290300200010e601200228020c220110df01200010db0220032001100c36021c2003410036021820032002410c6a3602140340200341086a200341146a10e10120032802080440200328020c200010e8010c010b0b200341206a240020000b100020002001200210a203200310bb020b0e0020002001200210a20310bc020beb0302047f017e230041e0006b2205240020012002109303210810b601210110a8022102200510b601220736024c200541406b41fa8308410d109e01200541386a200528024020052802442008109f01200541306a2005280238200528023c200310a101200541286a20052802302005280234200110ff01200541206a2005280228200528022c200210a101200541186a20052802202005280224200710ff0120052802182101200528021c210210b601107b210620042d00002006109a0320042d00012006109a0320042d00022006109a032002200610bc0102402007100c044020052007100c36025c200541003602582005200541cc006a3602540340200541106a200541d4006a10e1012005280210450d02200541086a20012002200528021410ff01200528020c2102200528020821010c000b000b10b601220441014100101f1a2002200410bc010b10214162102210f1012001200210a401210110232005200136025010b601210220052001100c36025c200541003602582005200541d0006a36025403402005200541d4006a10e1012005280200044020022005280204107b10bc010c010b0b200541d4006a2201200210de01200141dc8508410b10c10141dc8508410b10860221092000200336020c2000200937030020002008360208200541e0006a24000b4101017f230041206b220224002002200036021820022001410c6a3602142002200141086a36021020022001290300370308200241086a108102200241206a24000b27002001200210930322012003200410a3012000200436020c20002003370300200020013602080b1401017f10b601220220002001107310bc0120020bbb0101037f230041406a22012400200141186a200041046a220210e502200120012903183702300340200141106a200141306a108001200128021004402000280200200128021410cb020c0105200141206a200228020010df0220012802242100034020000440200141086a20022802002000108101200128020c2002280200200010dc022002280200200010de0221000c010b0b200141386a4200370300200142003703302002280200200141306a10e102200141406b24000b0b0b6c01037f230041106b22012400200010ab032102200141086a2000280208200028020022032002108902024020012802084101460440200220036a22022003490d01200128020c20002002360200200141106a24000f0b419f8108411941f58508410f108701000b10b001000b5501017f230041106b220124002001410036020c20002001410c6a4104419f8108411910b203200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b5801017f230041206b22012400200141106a200041046a10e502200120012903103702180340200141086a200141186a108001200128020804402000280208200128020c10bf020c0105200010a903200141206a24000b0b0b1801017f2001107b210220002001360204200020023602000b2101017f2001107b2202418f8808410410141a20002002360204200020013602000b3501027f230041106b220224002001107b2103200241086a200110ae032000200229030837020020002003360208200241106a24000b4f01017f230041206b2201240020012000280200100c36021c20014100360218200120003602140340200141086a200141146a10e10120012802080440200135020c101c0c010b0b200141206a24000b4e00024020002802002000280204107f41024704402001109f02450d01200028020841022001107b10b30220002001360204200041023602000f0b41d8880841141003000b41ec880841101003000b44000240200041086a20002802002001200210a6024504402000280200220120026a220220014f0d0110b001000b2003200441f58508410f108701000b200020023602000b3201017f230041106b22012400200141003a000f20002001410f6a410141de8608412010b20320012d000f200141106a24000b4a01027f20002802082102200028020421012000280200210003400240200120024d04402001417f470d0110b001000b0f0b2000280200200110d702ad101c200141016a21010c000b000b4101017f230041106b220224002002200136020c2002200036020803402002200241086a108001200228020004402002350204101c0c0105200241106a24000b0b0baa0202047f027e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882208200142288822094280fe0383848484370000200041084100200142005322072002716b41ff017122042008a746220520042001423088a741ff01714671220620056a2006410020042009a741ff0171461b22056a2005410020042001422088a741ff0171461b22056a2005410020042001a72205411876461b22066a200641002004200541107641ff0171461b22066a200641002004200541087641ff0171461b22046a200441002001501b6a22042007200320044107716a2c0000410048732004410047712002716b22026b3602042000200220036a3602000b2e01017f230041106b22022400200241003a000f20002002410f6a41012001109d0320022d000f200241106a24000bf40201037f230041d0006b220324002003200110fb010240200328022004400240200341b18908411010fa01450440200341c18908411c10fa010d012000200236020820002001360204200041013602000c030b10dd01410010dc012003410036023c200341406b2003413c6a10b801200328023c10d9012003280244210420032802402105200341246a2201200210de0110dd01200110c0012102200110be0121012003280228200328022c10da010240200545044020014102200410b3020c010b200210b903200110bc020b200041003602000c020b10dd01410010dc012003410036023c200341406b22052003413c6a41cc8f08410610b401200328023c10d90120032802402104200341306a2201200210de0110dd01200110c0012102200110be0121012003280234200328023810da0102402004450440200510ab0120014102200328024810b3020c010b200210b903200110bc020b200041003602000c010b200041003602000b200341d0006a24000b5e02037f017e230041206b22012400200141106a10aa0110a902200128021004402001290318220450450440200141086a108202200128020c21022001280208210320002004107d420020032002103b1a0b200141206a24000f0b1079000b2801017f2001107b210320002002107b36020c2000200336020820002002360204200020013602000b2801017f2002107b2203418f8808410410141a2000200336020820002002360204200020013602000b1000200010a8014195e608103d41004a0b110020002802002001280200107c4101730b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b1c01027f41c99008410710a80310b60122022000ad10fe012002103e0b0f00200041ac9108410a107310fb020b3c01027f230041106b22012400200141086a41b69108410a107310ad03200128020c21022000200128020836020020002002360204200141106a24000b3c01027f230041106b22012400200141086a41c09108410a107310ae03200128020c21022000200128020836020020002002360204200141106a24000b11002000200141c09108410a107310bb030b3701017e200041909008410810c10141909008410810860222014280808080105a044041909008410841a58008410e10b201000b2001a70b0a0041919208410c10730b0a0041c49208411610730b0a0041f69208410b10730b3d01037f230041106b2201240041819308411210732202107b2103200141086a200210ad032000200129030837020020002003360208200141106a24000b0a0041939308410b10730b3601037f419e9308411010732201107b21022001107b2203418f8808410410141a2000200336020420002001360200200020023602080b0a0041ae9308411010730b3101037f41ac9108410a107321022001107b21032002107b210420002001200210ba0320002004360214200020033602100b11002000200141b69108410a107310ba030b3401037f41be93084114107321022001107b21032002107b2104200041086a2001200210bb0320002004360204200020033602000b0f00200041be93084114107310af030b0a0041d29308410f10730b1600200041d29308410f1073360204200020013602000b0d002000411341e1930810c6060b0900103f410010db010b0d00103f410010db0110d503000b0b0041809708410e1003000b1000103f410110db01410010197b101c0b4402027f017e103f410310db01410010b1012100410110192102410241ad8c08410410c301210141722002107e2000200041721002200020002001109a0210022000101d0b1e01027f103f410110db01410010b101210010752201200010362001101d0b3801017f230041106b22002400103f410110db01200041086a410010b10110a702200028020c410020002802081bad101c200041106a24000b1e00103f410210db01410010c901410141fd8b08410110c30110990210400b1e00103f410210db01410010b101410141fd8b08410110c301109902101d0b3501017f230041106b22002400103f410110db012000410010b10110a9022000290300a704402000290308101c0b200041106a24000b1c01017f103f410210db01410010b101220041011019107e2000101d0b0e00103f410010db0110a802101d0b1100103f410110db0141001019107d101d0b3f01027f230041106b22002400103f410010db012000427f3703082000427f370300416720004110101f1a41671075220110351a2001101d200041106a24000b1300103f410110db014100109101108802101d0b1701017f103f410010db011075220042001001200010400b1100103f410110db0141001016107a10400b2000103f410210db01410010b10141011019109002108e0241ff017145ad10410b3501017f230041106b22002400103f410110db012000410010c90110aa022000290300a70440200029030810410b200041106a24000b1c01017f103f410210db01410010c9012200410110161001200010400b2b01037f103f410110db01410010c901220010f0011075220220001042ad42ff018342017d10412002101d0b4101027f103f410210db014102410141998c08410410ce01220041ff01711b41002000c041004e1b410110b101210041ff01714504402000200010430b200010400b1800103f410210db01410010c901410110c90110950210400b1800103f410210db01410010c901410110b10110950210400b1800103f410210db01410010b101410110c90110950210400b1800103f410210db01410010c901410110b10110960210400b1800103f410210db01410010b101410110c90110960210400b1800103f410210db01410010c901410110c90110960210400b1f01017f103f410210db01410010b10122002000410110b10110022000101d0b2701037f103f410210db01410010b1012100410110b1012101107522022000200110022002101d0b1f01017f103f410210db01410010c90122002000410110c901101e200010400b2701037f103f410210db01410010c9012100410110c90121011075220220002001101e200210400b2001017f103f410210db01410010b10122002000410110b10110ef012000101d0b2801037f103f410210db01410010b1012100410110b1012101107522022000200110ef012002101d0b1f01017f103f410210db01410010c90122002000410110c9011032200010400b2701037f103f410210db01410010c9012100410110c901210110752202200020011032200210400b1f01017f103f410210db01410010b10122002000410110b10110322000101d0b1800103f410210db01410010b101410110b10110a402101d0b1f01017f103f410210db01410010c90122002000410110c901102f200010400b2701037f103f410210db01410010c9012100410110c90121011075220220002001102f200210400b1800103f410210db01410010b101410110b10110a002101d0b1800103f410210db01410010b101410110b10110a302101d0b1f01017f103f410210db01410010c90122002000410110c9011044200010400b2701037f103f410210db01410010c9012100410110c901210110752202200020011044200210400b1f01017f103f410210db01410010b10122002000410110b10110442000101d0b2701037f103f410210db01410010b1012100410110b1012101107522022000200110442002101d0b2501027f103f410210db01410010c901410110c901210110742200200020011002200010400b2401027f103f410210db01410010c901410110c9012101107422002001109702200010400b2401027f103f410210db01410010b101410110b10121011074220020011097022000101d0b2501027f103f410210db01410010b101410110b1012101107422002000200110022000101d0b2501027f103f410210db01410010c901410110c90121011074220020002001101e200010400b2401027f103f410210db01410010c901410110c9012101107422002001109802200010400b2401027f103f410210db01410010b101410110b101210110742200200110a1022000101d0b2601027f103f410210db01410010b101410110b1012101107422002000200110ef012000101d0b2501027f103f410210db01410010c901410110c901210110742200200020011032200010400b2501027f103f410210db01410010b101410110b1012101107422002000200110322000101d0b2501027f103f410210db01410010c901410110c90121011074220020002001102f200010400b2501027f103f410210db01410010b101410110b10121011074220020002001102f2000101d0b2501027f103f410210db01410010c901410110c901210110742200200020011044200010400b2501027f103f410210db01410010b101410110b1012101107422002000200110442000101d0b1f01017f103f410210db01410010b10122002000410110b10110452000101d0b2701037f103f410210db01410010b1012100410110b1012101107522022000200110452002101d0b1f01017f103f410210db01410010b10122002000410110b10110462000101d0b2701037f103f410210db01410010b1012100410110b1012101107522022000200110462002101d0b1f01017f103f410210db01410010b10122002000410110b10110472000101d0b2701037f103f410210db01410010b1012100410110b1012101107522022000200110472002101d0b2501027f103f410210db01410010b101410110b1012101107422002000200110452000101d0b2501027f103f410210db01410010b101410110b1012101107422002000200110462000101d0b2501027f103f410210db01410010b101410110b1012101107422002000200110472000101d0b2501017f103f410210db01410010b10122002000410141fd8b08410110c30110312000101d0b2d01037f103f410210db01410010b1012100410141fd8b08410110c3012101107522022000200110312002101d0b1e00103f410210db01410010b101410141fd8b08410110c30110a202101d0b2d01037f103f410210db01410010b1012100410141fd8b08410110c3012101107522022000200110302002101d0b2b01027f103f410210db01410010b101410141fd8b08410110c3012101107422002000200110312000101d0b2b01027f103f410210db01410010b101410141fd8b08410110c3012101107422002000200110302000101d0b0d00103f410010db011048101c0b0d00103f410010db011049101c0b0d00103f410010db01104a101c0b0d00103f410010db01104b101c0b1601017f103f410010db0110752200104c200010071a0b0d00103f410010db01104d101c0b0d00103f410010db01104e101c0b0d00103f410010db01104f101c0b0d00103f410010db011050101c0b1601017f103f410010db01107522001051200010071a0b0f00103f410010db0110a50110071a0b0f00103f410010db0110a90110071a0b2000103f410110db01410041b78d08410710c20110a8014195e6081052ad101c0b1a00103f410110db01410041b78d08410710c20110bc03ad10410b1601017f103f410010db01107522001053200010071a0b0f00103f410010db0110a60110071a0b0d00103f410010db011021101c0b2a01017f103f410010db01416741919508410c101f1a4167416610371a41661075220010351a2000101d0b8d0101037f230041106b22002400103f410110db01410041b78d08410710c20141671054200041003b010c4167100c220141034f044041a58608411c1003000b200020012000410c6a41021078416741002000280200200028020410ad011a20002f010c2102108a0121012000200241850c713b010e20012000410e6a410210141a2001108b01200041106a24000b1300103f410110db0141001091011055ad10410b1900103f410010db0141f58208411e41db8008411b108701000b2200103f410010db0141f49008411110731a41a68708411a41f68008411e108701000b1b00103f410010db01418591084113107341c08008411b109a01000b2200103f410010db0141989108411410731a41c08708411641db8008411b108701000b1d00103f410010db0141e59008410f10a8031a41ab8b08411810fd01000b2100103f410010db0141d79008410e10a8031a10b6011a41948b084117108601000b1100103f410010db0110b6011a10fc01000b2601017f230041106b22002400103f410010db01200041086a41e88b084105109e0110fc01000b1c01017f103f410110db0141001091011075220010561a200010071a0b1c01017f103f410110db0141001091011075220010571a200010071a0b1c01017f103f410110db0141001091011075220010581a200010071a0b1e00103f410310db01410010910141011091014102109101105945ad10410b1b00103f410310db01410010910141011091014102109101105a1a0b1e00103f410310db01410010910141011091014102109101105b45ad10410b5601017f103f410410db01410010910141011091014102109101024041031017450d00410341a18c08410910cf01220041ff01714105490d0041a18c08410941b38008410d10b201000b200041ff0171105c45ad10410b2101017f103f410210db014100109101410110910110752200105d1a200010071a0b0f00103f410110db0141001019101c0b0f00103f410110db014100101610410b0f00103f410110db0110d201ac10410b1700103f410110db01410041e18d08410110c301ad101c0b3701017e103f410110db014100101622004280808080087d42ffffffff6f58044041e18d08410141a99008411210b201000b2000c410410b1600103f410110db0141e18d08410110ce01adc210410b1b00103f410110db01410041e18d08410110cf01ad42ff0183101c0b1500103f410110db01410041e18d0810d801ad10410bf80101037f103f410110db01027f230041206b220024002000410c6a220241001090014102210102400240200028020c200028021010c80145044002400240200241e18d08410110c60141ff01710e020100040b4100210102402000410c6a41e18d08410110c60141ff01710e020100040b410121010b200028020c200028021010c801450d010b20002d001c044041c4e508410036020041c8e50841003a00000b200041206a240020010c020b41e18d08410141a58008410e10b201000b41e18d08410141b38008410d10b201000b220141ff0171410246044041014100101b0f0b108a012200410110e3012000200110e3012000108b010b1100103f10dd01410010dc01410010d9010bd60102047f017e230041106b22032400103f410110db012003410b6a2102230041206b220024002000410010900141042101034020014109470440200041146a20016a200041a08c08410110c6013a0000200141016a21010c010b0b2000290218210402402000280200200028020410c801044020002d0010044041c4e508410036020041c8e50841003a00000b20022004a722013b0000200220044218883d0003200241026a20014110763a0000200041206a24000c010b41a08c08410141a58008410e10b201000b20024105101b200341106a24000b800101037f230041106b22002400103f10dd01410010dc012000410036020c2000410c6a210110b60121020340200128020041cce5082802004804402002200141e18b08410110b50110bc010c010b0b200028020c10d901200210df01210120002002360208200020013602042001ad101c200041086a10b003200041106a24000bcb0202047f017e230041406a22002400103f10dd01410010dc0120004100360234200041346a220341e18b08410110bb012101200028023410d90110b60121022003200110de01024002400340200028023c2000280238490440200041106a200041346a220141909008410810c1011093022000290310a74101470d02200029031822044280808080087d42ffffffff6f580d03200141909008410810bf01210310b601210120004200370328200041086a20044101200041286a10b60320012000280208200028020c101f1a2002200110bc01200220031080020c010b0b2000200236022820002002100c36023c200041003602382000200041286a3602340340200041206a200041346a10e10120002802200440200028022410071a0c010b0b200041406b24000f0b41909008410841e78508410e10b201000b41909008410841a99008411210b201000b3001027f230041106b22002400103f410110db01200041046a220141ee8f08410210c501200110e701200041106a24000b4401017f103f410110db01024041001017450d00410041ee8f08410210cf01220041ff01714103490d0041ee8f08410241b38008410d10b201000b2000ad42ff0183101c0b0d00103f410010db014201101c0b3101017f103f410110db01410041f08f08410210c401220045044041f08f08410241b38008410d10b201000b2000ad101c0b9c0101057f230041106b22002400103f10dd01410110dc0110d2012000410136020c02402000410c6a2204220128020041cce5082802004e0440410121020c010b200141f28f08410310b90141f28f08410310bd0121010b20002001360204200020023602002000280204210120002802002102200441cce508280200360200200028020c10d901ac104120024504402001ac10410b200041106a24000bf70201077f230041106b22022400103f410110db01230041406a22002400200041003602282000412c6a41001090012000411c6a21044101210102400340200028022c22032000280230220610c8010d01200041003602082000412c6a200041086a410441ec8f08410210d5012001410447044020042000280208220341187420034180fe03714108747220034108764180fe037120034118767272360200200441046a210420002001360228200141016a21010c010b0b41ec8f08410241989008411110b201000b02402003200610c8010440200041106a2201200041246a2902003703002000200029021c37030820002d003c044041c4e508410036020041c8e50841003a00000b20022000290308370200200241086a2001290300370200200041406b24000c010b41ec8f08410241a58008410e10b201000b200228020c4102742101108a012100034020012005470440200220056a280200200010e801200541046a21050c010b0b2000108b01200241106a24000b1000103f410110db01410010b101101d0b1000103f410110db01410010c90110400b1100103f410110db01410010910110071a0b1700103f410110db01410041df8b08410210c20110071a0bcc0201077f230041106b22042400103f410110db01230041206b220024004100109101210610b60121032006100c2101200041003a001820002001360214200020063602102000200136020c20004100360208037f2005200110d001047f2000200041086a10d101220141187420014180fe03714108747220014108764180fe03712001411876727236021c20032000411c6a410410141a200028020c2101200028020821050c010520002d0018044041c4e508410036020041c8e50841003a00000b200041206a240020030b0b2105108a0121012003100c210302400340200241046a22002002490d01200020034d04402004410036020c200520022004410c6a410410ad011a200428020c220241187420024180fe03714108747220024108764180fe0371200241187672722001109301200021020c010b0b2001108b01200441106a24000f0b10b001000bbb0101057f230041106b22012400103f410110db01200141086a2102230041206b220024002000410c6a22034100109001200310d1012104200341de8b08410110cc0121030240200028020c200028021010c801044020002d001c044041c4e508410036020041c8e50841003a00000b2002200336020420022004360200200041206a24000c010b41de8b08410141a58008410e10b201000b200128020c2001280208108a01220010930120001095012000108b01200141106a24000b890201067f230041106b22022400103f410110db01200241086a2103230041206b220024002000410c6a2205410010900102400240200028020c200028021010c801450440024002400240200541de8b08410110c60141ff017122010e020201000b41de8b08410141b38008410d10b201000b2000410c6a10d1012104410121010b200028020c200028021010c801450d010b20002d001c044041c4e508410036020041c8e50841003a00000b2003200436020420032001360200200041206a24000c010b41de8b08410141a58008410e10b201000b0240200228020845044041014100101b0c010b200228020c108a012200410110e30120001093012000108b010b200241106a24000b900201077f230041206b22012400103f410210db01410041d29408410410c2012104230041206b220024004101109101210610b60121032006100c2102200041003a001c2000200236021820002006360214200020023602102000410036020c2001037f2005200210d001047f20032000410c6a41e28b08410310cc0110bc0120002802102102200028020c21050c010520002d001c044041c4e508410036020041c8e50841003a00000b200041206a240020030b0b3602102001200436020c200410071a108a01210020012003100c36021c200141003602182001200141106a36021403402001200141146a10e10120012802000440200128020420001095010c010b0b2000108b01200141206a24000b9c0401097f230041106b22052400103f410110db01230041206b220024004100109101210410b60121062004100c2101200041003a001820002001360214200020043602102000200136020c20004100360208037f2003200110d001047f200041086a41e68b08410210c701210310b60121010340200304402000200041086a41e68b08410210c701220441187420044180fe03714108747220044108764180fe03712004411876727236021c20012000411c6a410410141a200341016b21030c010b0b2000200141187420014180fe03714108747220014108764180fe03712001411876727236021c20062000411c6a410410141a200028020c2101200028020821030c010520002d0018044041c4e508410036020041c8e50841003a00000b200041206a240020060b0b2104108a0121012004100c210702400340200241046a22032002490d01200320074d0440410021002005410036020820042002200541086a410410ad011a2005280208220241187420024180fe03714108747220024108764180fe0371200241187672722206100c410276200110db022006100c21080340200041046a22022000490d03200220084b0440200321020c03052005410036020c200620002005410c6a410410ad011a200528020c220041187420004180fe03714108747220004108764180fe037120004118767272200110db02200221000c010b000b000b0b2001108b01200541106a24000f0b10b001000bd20201077f230041106b22042400103f410110db01230041206b220024004100109101210610b60121032006100c2101200041003a001820002001360214200020063602102000200136020c20004100360208037f2005200110d001047f2000200041086a41e68b08410210cc01220141187420014180fe03714108747220014108764180fe03712001411876727236021c20032000411c6a410410141a200028020c2101200028020821050c010520002d0018044041c4e508410036020041c8e50841003a00000b200041206a240020030b0b2105108a0121012003100c210302400340200241046a22002002490d01200020034d04402004410036020c200520022004410c6a410410ad011a200428020c220241187420024180fe03714108747220024108764180fe0371200241187672722001109501200021020c010b0b2001108b01200441106a24000f0b10b001000b4d01017f230041106b22002400103f10dd01410010dc0120004100360200200041046a200041e58b08410110b401200028020010d90120002802040440200028020c1000000b200041106a24000bd90101057f230041206b22002400103f10dd01410010dc0120004100360214200041146a220341e18b08410110bb012102200028021410d90110b60121012003200210de0102400340200028021c20002802184f0d01200041146a10c4032202200041146a10c40322036a220420024f044020022001108d0220032001108d0220042001108d020c010b0b10b001000b2000200136021020002001100c36021c200041003602182000200041106a3602140340200041086a200041146a10e10120002802080440200028020c10071a0c010b0b200041206a24000b910101067f230041206b22002400103f410110db012000410041868e08410d10c3011092020240200028020045044010a802210110a802210210a802210310a802210410a80221052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080c010b200041086a20002802041091020b200041086a10eb01200041206a24000b3101027f230041206b22002400103f410110db01200041086a22014100109101105e109102200110eb01200041206a24000b4501027f230041106b22002400103f410110db01200041086a410041868e08410d10c30122011092022000280208047f200028020c10260520010bad101c200041106a24000b4301017f230041106b22002400103f410110db01200041086a410041868e08410d10c3011092022000280208047e200028020c105fad0542000b101c200041106a24000b8c0101087f230041106b22002400103f410510db01410041868e08410d10c3012101410110b1012103410210b1012104410310b1012105410410b1012106200041086a20011092020240200028020845044010a802210110a80221020c010b200028020c21074200102422014200102422022007200320042005200610600b2001200210ec01200041106a24000b7a01067f230041106b22002400103f410310db01410041868e08410d10c3012101410110b1012103410210b1012104200041086a20011092020240200028020845044010a802210110a80221020c010b200028020c210542001024220142001024220220052003200410610b2001200210ec01200041106a24000b5c01047f230041106b22002400103f410310db01410041868e08410d10c3012101410110b1012102410210b1012103200041086a20011092022000280208047e200028020c20022003106241004aad0542000b1041200041106a24000b840101077f230041106b22002400103f410410db01410041868e08410d10c3012101410110b1012103410210b101210441031091012105200041086a20011092020240200028020845044010a802210110a80221020c010b200028020c2106420010242201420010242202200620032004200510631a0b2001200210ec01200041106a24000b7201057f230041106b22002400103f410210db01410041868e08410d10c301210141011091012103200041086a20011092020240200028020845044010a802210110a80221020c010b200028020c21044200102422014200102422022004200310641a0b2001200210ec01200041106a24000b6801047f230041106b22002400103f410310db01410041868e08410d10c3012101410110b1012102410210b1012103200041086a20011092020240200028020845044010b60121010c010b20022003200028020c1075220110651a0b200110071a200041106a24000b6801047f230041106b22002400103f410310db01410041868e08410d10c3012101410110b1012102410210b1012103200041086a20011092020240200028020845044010b60121010c010b20022003200028020c1075220110661a0b200110071a200041106a24000b7201057f230041106b22002400103f410210db01410041868e08410d10c301210141011091012103200041086a20011092020240200028020845044010a802210110a80221020c010b200028020c21044200102422014200102422022004200310671a0b2001200210ec01200041106a24000b7201057f230041106b22002400103f410210db01410041868e08410d10c301210141011091012103200041086a20011092020240200028020845044010a802210110a80221020c010b200028020c21044200102422014200102422022004200310681a0b2001200210ec01200041106a24000b7401047f230041106b22002400103f410110db01200041086a410041868e08410d10c3011092020240200028020845044010a802210210a802210310b60121010c010b200028020c210142001024220242001024220320011075220110691a0b2002101d2003101d200110071a200041106a24000b1700103f410110db01410041ed8b08410410c30110bf030b3201027f103f410110db01410041f58b08410810c301210103402000200146450440200010bf03200041016a21000c010b0b0bc90101057f230041206b22002400103f10dd01410210dc01410010b1012101410141f18b08410410c201210420004102360214200041146a41ed8b08410410bb012103200028021410d90141d09008410710a803210210b6011a20022001108d0110bc0110b6011a20022004107b10bc012000200336021010b601107b210120002003100c36021c200041003602182000200041106a3602140340200041086a200041146a10e10120002802080440200028020c20011095010c010b0b20022001103e200041206a24000b1e00103f10a90110a501107c45044041fc930841241003000b410010db010b1e00103f4167100a416710bc03044041a09408412c1003000b410010db010b2d00103f410210db01410041e58b08410110c301410141fd8b08410110c30147044041fe8b08410e109c01000b0b1300103f410010db01418c8c08410d109c01000bd70201087f230041206b22012400103f410110db01230041e0006b22002400200041046a4100109001034020024120470440200041386a20026a200041046a41bb8e08410510c6013a0000200241016a21020c010b0b200041306a2202200041d0006a2203290200370300200041286a2204200041c8006a2205290200370300200041206a2206200041406b22072902003703002000200029023837031802402000280204200028020810c80104402003200229030037030020052004290300370300200720062903003703002000200029031837033820002d0014044041c4e508410036020041c8e50841003a00000b20012000290338370000200141186a200041d0006a290300370000200141106a200041c8006a290300370000200141086a200041406b290300370000200041e0006a24000c010b41bb8e08410541a58008410e10b201000b200110850210071a200141206a24000b2901017f103f410110db0141001091012200100c4120470440418090084110109c01000b200010071a0b0f00103f410010db0110b60110071a0b1f01017f103f410210db0141001091012200410110910110051a200010071a0b4e01017f230041106b22002400103f410310db01200041086a4100109101410141a28e08411110c301410241998e08410910c30110890220002802080440200028020c10071a0b200041106a24000b2601027f103f410110db01410041b38e08410810c3012100107522012000106a1a200110071a0b1800103f410210db0141001091014101109101107cad10410b1300103f410010db0141b8810810850210071a0b2400103f410210db01410041968e08410310c201410141938e08410310c201107cad10410b0f00103f410010db0110b60110ed010b2501017f103f410210db01410041e68b08410210d6012200410110b10110bc01200010ed010bfb0102067f017e230041106b22012400103f410210db01420121060240410041cb8d08410310d6012203410141c88d08410310d6012204107c0d0002402003100c22052004100c470d000340200220054f0d022001410036020820032002200141086a410410ad011a200128020821002001410036020c200420022001410c6a410410ad011a200041187420004180fe03714108747220004108764180fe037120004118767272200128020c220041187420004180fe03714108747220004108764180fe037120004118767272109c02450d012002200241046a22004d0440200021020c010b0b10b001000b420021060b20061041200141106a24000bb50201077f230041106b22042400103f410210db01230041206b220024004100109101210610b60121032006100c2101200041003a001c2000200136021820002006360214200020013602102000410036020c037f2005200110d001047f20032000410c6a412041e68b08410210d70110bc0120002802102101200028020c21050c010520002d001c044041c4e508410036020041c8e50841003a00000b200041206a240020030b0b2205410141838d08410410c20110bc01108a0121012003100c210302400340200241046a22002002490d01200020034d04402004410036020c200520022004410c6a410410ad011a2001200428020c220241187420024180fe03714108747220024108764180fe03712002411876727210051a200021020c010b0b2001108b01200441106a24000f0b10b001000b970101047f230041106b22012400103f410310db01410041e68b08410210d6012102410141b28d08410510c3012103410210b1012100024020034180808080044904402001200041187420004180fe03714108747220004108764180fe03712000411876727236020c2002200341027441042001410c6a106b0d01200210ed01200141106a24000f0b10b001000b41ce8d084113109c01000ba10101057f230041106b22002400103f410210db01410041e68b08410210d6012102410141b28d08410510c301210120012002100c41027622044904400240027f200145044010b6010c010b200041086a200241002001109d022000280208450d01200028020c0b210320002002200141016a2004109d022000280200450d002003200028020410051a200310ed01200041106a24000f0b0b41c18608411d1003000b6001037f230041106b22002400103f410210db01200041086a410041e68b08410210d601410110b101109b020240200028020845044041014100101b0c010b200028020c108a012201410110e301200110db022001108b010b200041106a24000b3e01017f230041106b22002400103f410210db01200041086a410041e68b08410210d601410110b101109b022000280208410047ad1041200041106a24000b940101037f230041106b22012400103f410210db01410041e68b08410210d60121000240410141b28d08410510c30122024180808080044904402001410036020c200020024102742001410c6a410410ad010d01200128020c220041187420004180fe03714108747220004108764180fe0371200041187672721074101d200141106a24000f0b10b001000b41c18608411d1003000b1400103f410110db01410010910110970110071a0b1600103f410210db014100109101410110910110b6020b2400103f410210db01410041b78d08410710c2014101109101416710384167107b10071a0b1700103f410010db0141ca9108410d107310970110071a0b1600103f410010db0141e891084108107310ac02101d0b1600103f410010db0141e191084107107310af0210400b1600103f410010db0141fe91084103107310b002101c0b1700103f410010db0141dc91084105107310ad02ad101c0b4c01027f230041106b22002400103f410010db01200041fb91084103107322011097011093022000290300a74101470440200141e78508410e109a01000b20002903081041200041106a24000b1700103f410010db01418192084104107310ab02ad10410b1700103f410010db0141d294084104107310b10210071a0bbd0101057f230041206b22002400103f410010db012000410c6a220341e28d084108107322011096010240200028020c200028021010c8014504400240024002402003200110b70341ff017122020e020201000b200141b38008410d109a01000b410121022000410c6a41202001108a0221040b200028020c200028021010c801450d010b20002d001c044041c4e508410036020041c8e50841003a00000b20020440200410071a0b200041206a24000f0b200141a58008410e109a01000b1800103f410010db0141e28d084108107310b20245ad10410b1700103f410010db0141f09108410b107310ad02ad101c0b1400103f410010db0141f09108410b107310bc020b810202037f017e230041206b22002400103f410010db010240024041d7910841051073220110b202450d002000410c6a22022001109601024002400240024002402002200110b70341ff017122020e0404010203000b200141b38008410d109a01000b2000410c6a200110e802ad2103410121020c020b2000410c6a200110e802ad2000410c6a200110e802ad422086842103410221020c010b2000410c6a200110e802ad2103410321020b200028020c200028021010c801450d0120002d001c450d0041c4e508410036020041c8e50841003a00000b200020033702102000200236020c2000410c6a10e701200041206a24000f0b200141a58008410e109a01000b2e01027f103f410110db01410041d29408410410c201210041859208410410732201200010051a200110ac02101d0b4201037f103f410210db01410041c38d08410510c2012101410141be8d08410510c201210241899208410410732200200110051a2000200210051a200010ac02101d0b2b01017f103f410110db01410041de8b08410110c301418d920841041073220010db02200010ab02ad10410b2601017f103f410210db01410041b78d08410710c2014101109101107522001038200010071a0b1f01017f103f410110db014100109101210041ca9108410d1073200010b6020b1900103f410110db01410010b10141e8910841081073108c010b1f01017f103f410110db01410010c901210041e1910841071073200010b7020b2601017f103f410110db01410041e18d08410110c301210041dc9108410510732000ad10bb020b1e01017f103f410110db0110d201210041c19208410310732000ac10ff020b1e01017e103f410110db0141001019210041fe910841031073200010bb020b1e01017e103f410110db0141001016210041fb910841031073200010ff020b2401017f103f410110db01410041e18d0810d801210041819208410410732000ad10ff020b2501017f103f410110db01410041aa8c08410310c201210041d2940841041073200010b6020bb20101047f230041106b22002400103f10dd01410010dc012000410036020c02402000410c6a220228020041cce5082802004e0440410121010c010b200241e28d08410810b90141e28d08410810ba0121020b20002002360204200020013602002000280204210220002802002101200028020c10d90141e28d0841081073210302402001044020034101410010b9020c010b108a012201410110e3012001200210051a2003200110b5020b200041106a24000bb80101037f230041106b22012400103f410110db01200141046a41aa8c08410310c50141d7910841051073210202400240024002400240200128020441016b0e03010203000b2002420010bb020c030b108a012200410110e3012001280208200010e8012002200010b5020c020b108a012200410210e3012001280208200010e801200128020c200010e8012002200010b5020c010b108a012200410310e3012001280208200010e8012002200010b5020b200141106a24000b3101037f103f410210db01410041d29408410410c2012100410110b10141859208410410732202200010051a2002108c010b4501047f103f410310db01410041c38d08410510c2012101410141be8d08410510c2012102410210b10141899208410410732200200110051a2000200210051a2000108c010b3601027f103f410210db01410041de8b08410110c301410141fd8b0810d8012101418d920841041073220010db0220002001ad10ff020b1e01017e103f410110db01410010162100419d920841091073200010ff020b1900103f410110db01410010b10141b49208410d1073108c010b1f01017f103f410110db014100109101210041a69208410e1073200010b6020b2201017f103f410110db01410041b78d08410710c201210010c9032000108703101c0b3502017f017e103f410110db01410041b78d08410710c201210010c9032000108703220150044041dc9408410f1003000b2001101c0b3d02017f017e230041106b22002400103f410110db01410010192101200041086a10c90320011086032000280208200028020c10e201200041106a24000b2201017e103f410110db0141001019210010c903200010830310b202410047ad10410b3901027f103f410110db01410041b78d08410710c201210010c903220120001087035045044041a08808411a1003000b20012000108403101c0b3902027f017e103f410110db01410041b78d08410710c201210010c9032201200010820310b002220250047e200120001084030520020b101c0b5402037f017e230041106b22002400103f410110db01410010192103200041086a10c90322022003108603200028020c21012000280208047f20022003200110810341010541000b200110e201200041106a24000b3802027f017e103f410110db01410041b78d08410710c201210010c903220120001087032202504504402001200220001081030b2002101c0b5701027f230041306b22002400103f410010db01200010c7032201360200200041046a200110f7022000200036021803402000411c6a200041046a108e01200028021c04402000350220101c0c010b0b200041306a24000bbf0101077f230041206b22002400103f410110db01410041838d08410410c3012104200010c703220210df02200010b7052101024020002802002205450440200020013602040c010b200041106a220620022000280208220310f2022000200136021820022003200610f3020b2000200336021c20004100360218200020013602142000200436021020022001200041106a10f30220002001360208200541016a220145044010b001000b200020013602002002200010e102200041206a24000b1f01017f200028020c41016a220104402000200136020c20010f0b10b001000bbf0101077f230041206b22002400103f410110db01410041838d08410410c3012104200010c703220210df02200010b7052101024020002802002205450440200020013602080c010b200041106a220620022000280204220310f2022000200136021c20022003200610f3020b2000410036021c20002003360218200020013602142000200436021020022001200041106a10f30220002001360204200541016a220145044010b001000b200020013602002002200010e102200041206a24000b4701027f230041306b22002400103f410010db01200041206a10c703220110df022000410c6a2001200028022410f602200028020c410173200028021010e901200041306a24000b4701027f230041306b22002400103f410010db01200041206a10c703220110df022000410c6a2001200028022810f602200028020c410173200028021010e901200041306a24000b3601017f230041206b22002400103f410010db012000410c6a10c70310f702200028020c410173200028021010e901200041206a24000b4701027f230041306b22002400103f410010db01200041206a10c703220110df022000410c6a20012000280228108f01200028020c410173200028021010e901200041306a24000bf30201087f230041e0006b22002400103f410210db0141012104410041e28e08410710c3012101410141e98e08410710c30121062000410c6a10c7032001108f010240200028020c0440200041286a200041186a2902003703002000200029021037032010c70322012000280224220510f1022204450440200041406b2202200110df02200210b7052102200028022821032000200236022820012005200041206a10f302024020030440200041d0006a22072001200310f2022000200236025c20012003200710f3020c010b200020023602480b2000200536025c20002003360258200020023602542000200636025020012002200041d0006a10f302200028024041016a2202450d02200020023602402001200041406b10e102200041386a200041d8006a290200370300200020002902503703300b200041106a22012000290330370200200141086a200041386a290300370200200028021021010b2004200110e901200041e0006a24000f0b10b001000bf30201087f230041e0006b22002400103f410210db0141012104410041e28e08410710c3012101410141e98e08410710c30121062000410c6a10c7032001108f010240200028020c0440200041286a200041186a2902003703002000200029021037032010c70322012000280224220510f1022204450440200041406b2202200110df02200210b7052102200028022c21032000200236022c20012005200041206a10f302024020030440200041d0006a22072001200310f2022000200236025820012003200710f3020c010b200020023602440b2000200336025c20002005360258200020023602542000200636025020012002200041d0006a10f302200028024041016a2202450d02200020023602402001200041406b10e102200041386a200041d8006a290200370300200020002902503703300b200041106a22012000290330370200200141086a200041386a290300370200200028021021010b2004200110e901200041e0006a24000f0b10b001000b4801027f230041206b22002400103f410110db01410041e28e08410710c30121012000410c6a10c7032001108f01200028020c044010c703200041106a10f0020b200041206a24000b4501027f230041206b22002400103f410110db01410041e28e08410710c30121012000410c6a10c703200110f602200028020c410173200028021010e901200041206a24000b7501037f230041306b22002400103f410210db01410041e28e08410710c3012101410141d98e08410910c30121022000411c6a10c7032001108f01200028021c4504401079000b200041106a200041286a2902003703002000200029022037030810c703200041086a200210f502200041306a24000b7201047f230041306b22002400103f410210db01410041e28e08410710c3012101410141d98e08410910c30121022000410c6a10c70322032001108f01200028020c0440200041286a200041186a290200370300200020002902103703202003200041206a200210f5020b200041306a24000b7401037f230041206b22002400103f410110db01410041e28e08410710c301210110b60121022000410c6a10c7032001108f010340200028020c04402000280218210120022000280210108c022000410c6a10c7032001108f010c010b0b20002002360208200041086a10e001200041206a24000b800101047f230041406a22002400103f410110db01410041e28e08410710c301210210b6012101200010c7032203360228200041106a20032002108f012000200041286a36022403402000412c6a200041106a108e01200028022c044020012000280230108c020c010b0b2000200136020c2000410c6a10e001200041406b24000b3a01017f230041106b22002400103f410010db01200010c50336020c20002000410c6a10e5022000280200200028020410b503200041106a24000b2101017f103f410110db01410041838d08410410c301210010c503200010cd021a0b4401027f230041206b22002400103f410010db01200041106a10c503220110df02200041086a2001200028021410d0022000280208200028020c10ea01200041206a24000b4201017f230041106b22002400103f410010db01200041086a10c50310e6022000280208410147044041ea8d08410c109c01000b200035020c101c200041106a24000b6a02027f017e230041306b22002400103f410010db012000410c6a220110c0032000200041106a10e50220002000290300370218200020013602200340200041246a200041186a10880120002802240440200035022c2000350228101c101c0c010b0b200041306a24000b7201027f230041306b22002400103f410010db0110b60121012000411c6a10c003200041106a200041206a10e502200020002903103702280340200041086a200041286a108001200028020804402001200028020c10bc010c010b0b20002001360218200041186a10b003200041306a24000bae0101037f230041406a22002400103f410010db0110b6012102200041286a220110c003200041186a2000412c6a10e502200020002903183702342000200136023c024003400240200041106a200041346a10800120002802104101470d00200041086a200028023c2201280200200141086a28020020002802141089012000280208450d022002200028020c10bc010c010b0b20002002360224200041246a10b003200041406b24000f0b1079000b5a01047f230041206b22002400103f410210db01410041838d08410410c3012101410141878d08410510c3012102200041146a220310c003200041086a20032001200210c1022000280208200028020c10ea01200041206a24000b3d01027f230041106b22002400103f410110db01410041838d08410410c3012101200041046a10c0032000280204200110c402ad1041200041106a24000b5101027f230041206b22002400103f410110db01410041838d08410410c3012101200041146a10c003200041086a2000280214200028021c20011089012000280208200028020c10ea01200041206a24000b6101047f230041106b22002400103f410110db01410041838d08410410c3012102200041046a10c00320002802042000280208200210ce02047f200028020c2201200210c30221032001200210bf0241010541000b200310ea01200041106a24000b880101057f230041306b22002400103f410210db01410041838d08410410c3012102410141958d08410910c301200041246a220310c003200041186a22042003200210c702200041106a200410c902200028021022032000280214220410c80222026a2201200249044010b001000b200041086a20032004200110c1022001ad101c200041306a24000b850101047f230041206b22002400103f410210db01410041838d08410410c30121014101419e8d08410710c3012103200041086a220210c003200041146a2002200110c702200028021c2101200028021821022000280214450440200020022001200310ca0220002802002102200028020421010b2002200110c802ad101c200041206a24000bc20101057f230041306b22002400103f410310db01410041838d08410410c3012101410141958d08410910c30121034102418c8d08410910c3012104200041246a220210c003200041186a2002200110c70220002802202101200028021c2102024002402000280218044020032002200110c80222036a22042003490d02200041106a20022001200410c1020c010b200041086a20022001200410ca02200028020c2101200028020821020b2002200110c802ad101c200041306a24000f0b10b001000b990101047f230041206b22002400103f410210db01410041838d08410410c3012101410141a58d08410d10c3012103200041146a220210c003200041086a2002200110c70220002802102101200028020c210202402000280208450440200120036a22032001490d01200020022001200310ca0220002802002102200028020421010b2002200110c802ad101c200041206a24000f0b10b001000bb60201077f230041e0006b22002400103f410010db0110b6012102200041206a220110c803200041186a200041246a10e5022000200029031837022c200020013602342000413c6a2104200041d4006a2103024003400240200041106a2000412c6a10800120002802104101470d00200041d0006a20002802342201280200200141086a2802002000280214220110f9022000280250450d02200041406b200341086a28020036020020002003290200370338200041086a200410e502200020002903083702442000200041386a36024c0340200041d0006a200041c4006a1088012000280250450d02200028025821052000280254210620022001108c0220022006108c0220022005108c020c000b000b0b20002002360250200041d0006a10e001200041e0006a24000f0b41948108410b109c01000b4201027f230041106b22002400103f410110db01410041838d08410410c3012101200041046a10c80320002802042000280208200110c202ad1041200041106a24000b3d01027f230041106b22002400103f410110db01410041838d08410410c3012101200041046a10c8032000280204200110c402ad1041200041106a24000bda0101037f230041d0006b22002400103f410110db01410041838d08410410c30121012000410c6a10c803200041186a200028020c2000280214200110f90220002802180440200041306a200041246a2802003602002000200029021c37032810b60121012000200041286a220241047210e50220002000290300370238200020023602400340200041c4006a200041386a10880120002802440440200028024c210220012000280248108c0220012002108c020c010b0b20002001360208200041086a10e001200041d0006a24000f0b41f58e08410b109c01000b8f0101047f230041306b22002400103f410310db01410041838d08410410c30121014101419d8c08410310c3012102410241878d08410510c3012103200041146a10c803200041206a2000280214200028021c200110f902200028022045044041f58e08410b109c01000b200041086a200041246a2002200310c1022000280208200028020c10ea01200041306a24000b850101037f230041306b22002400103f410210db01410041838d08410410c30121014101419d8c08410310c3012102200041146a10c803200041206a2000280214200028021c200110f902200028022045044041f58e08410b109c01000b200041086a2000280224200028022c20021089012000280208200028020c10ea01200041306a24000b5f01047f230041206b22002400103f410110db01410041838d08410410c3012101200041086a10c8032000280208200028020c200110ce0222020440200041146a22032000280210200110fa02200310ac030b2002ad1041200041206a24000bc40101037f230041d0006b22002400103f410010db01200041186a220110c803200041106a2000411c6a10e502200020002903103702242000200136022c200041c4006a2101024003400240200041086a200041246a10800120002802084101470d00200041406b200028022c2202280200200241086a280200200028020c10f9022000280240450d02200041386a200141086a28020036020020002001290200370330200041306a10ac030c010b0b200041186a10a903200041d0006a24000f0b1079000bb40101067f230041306b22002400103f410310db01410041838d08410410c30121034101419d8c08410310c3012104410241958d08410910c301200041246a220110c803200041186a22052001200310c702200041106a200510fc0220052000280210200028021410f80220012005200410c702200041086a200110c90220002802082201200028020c220310c80222046a2202200449044010b001000b200020012003200210c1022002ad101c200041306a24000bef0101077f230041406a22002400103f410410db01410041838d08410410c30121024101419d8c08410310c3012104410241878d08410510c3012105410341f08e08410510c3012106200041286a220310c8032000411c6a2003200210c7022000280224210220002802202103200028021c0440200041346a22012003200210f802200041106a20012004200510c102410121010b2000200236023c2000200336023820002001360234200041086a200041346a220110fc0220012000280208200028020c10f80220002000280234200028023c20041089012000280204200620002802001bad101c200041406b24000b8e0101067f230041306b22002400103f410310db01410041838d08410410c30121024101419d8c08410310c3012103410241878d08410510c3012104200041186a220510c803200041246a22012005200210c702200041106a200110fc0220012000280210200028021410f802200041086a20012003200410c1022000280208200028020c10ea01200041306a24000b4701017f230041206b22002400103f410010db01200041106a10c10320002000290310370218200041086a2000411c6a10e5022000280208200028020c10b503200041206a24000b4201027f230041106b22002400103f410110db01410041838d08410410c3012101200041086a10c1032000280208200028020c200110c202ad1041200041106a24000b3d01027f230041106b22002400103f410110db01410041838d08410410c3012101200041086a10c1032000280208200110c402ad1041200041106a24000b4201027f230041106b22002400103f410110db01410041838d08410410c3012101200041086a10c1032000280208200028020c200110ce02ad1041200041106a24000b3d01017f230041106b22002400103f410010db01200041086a10c1032000200028020c10e6022000280204410020002802001bad101c200041106a24000b4e01027f230041206b22002400103f410010db01200041086a10c103200041106a200028020c220110df0220002001200028021810e4022000280204410020002802001bad101c200041206a24000b7801047f230041206b22002400103f410110db01410041838d08410410c3012101200041186a10c103200028021c210302402000280218200110cf022201450d00200041106a20032001108101200041086a2003200028021410e4022000280208450d00200028020c21020b2002ad101c200041206a24000b7801047f230041206b22002400103f410110db01410041838d08410410c3012101200041186a10c103200028021c210302402000280218200110cf022201450d00200041106a20032001108101200041086a2003200028021010e4022000280208450d00200028020c21020b2002ad101c200041206a24000b8e0101047f230041206b22002400103f410110db01410041838d08410410c3012102200041086a10c1032000200028020c36021420002000280208220336021020002003200210cf0236021c2000200041146a360218024003402000200041186a1080012000280200450d012001417f470440200141016a21010c010b0b10b001000b2001ad101c200041206a24000b1100103f410010db0110c60310af0210400b2401027f103f410110db01410010c901210010c6032201200110af02200010950210fd020b2801037f103f410110db01410010c901210010c603220110af02220220001097022001200210fd020b4301037f103f410110db01410010c901210010c603220210af0222012000108f0241ff017141024f044041f68d084110109c01000b200120001098022002200110fd020b2401027f103f410110db01410010c901210010c603220110800304402001200010b7020b0b0f00103f410010db0110c60310bc020b1200103f410010db0110c603108003ad10410b2300103f410110db01410041b78d08410710c20141c492084116107310ed0245ad10410b1200103f410010db0110c60310b202ad101c0b3101027f103f410210db014100419d8c08410310c3014101109101210141da9208411c1073220010db022000200110b6020b5901027f230041206b22002400103f410010db01200010c2032000200028020422013602102000200028020036020c2000200110ad0236021c2000410136021820002000410c6a360214200041146a10b403200041206a24000b3f01027f230041106b22002400103f410110db01410041838d08410410c3012101200041086a10c2032000280208200028020c200110d602200041106a24000b4201027f230041106b22002400103f410110db01410041b28d08410510c3012101200041086a10c2032000280208200028020c200110d802ad101c200041106a24000b4b01047f230041106b22002400103f410210db01410041b78d08410710c2012101410141b28d08410510c3012102200041046a2203200110c3032003200210d902ad101c200041106a24000b2e01017f230041106b22002400103f410010db01200041086a10c203200028020c10ad02ad101c200041106a24000b3e01017f230041106b22002400103f410110db01200041046a410041b78d08410710c20110c3032000280204200028020c10da02ad101c200041106a24000bbe0102047f027e230041106b22022400103f410310db01410010910121004101101921042002410210d401024002401072220120001098034504402001109b0310ae02220341ff017141ff01460d0120012000109703200341016a2200ad42ff0183220510bb022001109b03200510bb020c020b2001200010960321000c010b41a68a0841d7001003000b200120002004109e03450440200120002004200210a003200120002002200410a303200241106a24000f0b41fd8a0841171003000b950102047f017e230041206b22022400103f410310db01410010910121004101101921042002410210d4010240107222012000109803044020012001200010960322002004109e03450d01200241106a2203200120002004109c0320012000200310a403200120002004200210a003200120002002200410a303200241206a24000f0b41dd890841101003000b41ed8908411e1003000b920102037f017e230041106b22012400103f410210db01410010910121024101101921030240107222002002109803044020002000200210960322022003109e03450d012001200020022003109c03108a01210020012802082000109b012001290300200010e6012001410c6a200010a1032000108b01200141106a24000f0b41dd890841101003000b41ed8908411e1003000b9c0102047f017e230041406a22002400103f410210db0141001091012101200041306a410110d401200041106a200041386a29030037030020002000290330220437022020002004370308024010722202200110980304402002200220011096032201200041086a220310a20310b202450d0120022001200310a20310b002101c200041406b24000f0b41dd890841101003000b41ed8908411e1003000b6c02037f017e230041106b22022400103f410210db01410010910121004101101921030240107222012000109803450d0020012001200010960322002003109e03450d002002200120002003109c0320012000200310990310bc0220012000200210a4030b200241106a24000b3a02027f017e103f410210db0141001091012100410110192102107222012000109803047e2001200120001096032002109f03ad0542010b10410b1d01017f103f410110db014100109101210010d003200010ee0210fe020b1d01017f103f410110db014100109101210010d003200010ee0210bc020b1d01017f103f410110db014100109101210010d003200010ef02ad10410b4b01037f230041106b22002400103f410210db01410041b78d08410710c201210141011091012102200041086a200110d1032000280208200028020c200210ec02ad1041200041106a24000b2701017f103f410110db014100109101210010d003200010ef0245044041fd940841141003000b0b5501037f230041106b22002400103f410210db01410041b78d08410710c201210141011091012102200041086a200110d1032000280208200028020c200210ec0245044041fd940841141003000b200041106a24000b5401057f230041206b2200240010b301410210db0141001091012102410110b101210310aa01200041086a10d2031074210110b60121042000410036021420002802102001200420022003200041146a109503000b7c01077f230041206b2200240010b301410210db0141001091012104410110b101210210aa012002109103210310b6012105200041086a10d2031074210110b60121062000200536021c2000411f411b20031b360218200041ad8f0841928f0820031b36021420002802102001200620042002200041146a109503000bd60101067f230041206b2201240010b301410110db014100109101210410aa01200141086a10d2031074210210b60121052001410036021420012802102103230041406a220024002003108d030240200141146a2201280200450440200041086a200310a8021090030c010b200041106a200141086a280200360200200020012902003703080b20034101200010b302200041346a200220052004410010f801200041206a200041106a280200360200200020002902343703282000200028023c36022420002000290308370318200041186a108302000bc803010a7f230041206b22002400103f410010db0120004181043b000610b6012102200041086a220110d2032000200236021c20004112360218200041808f08360214200041066a2102200041146a2105108e03230041206b22032400200128020810800304404191890841201003000b2001108f032802002101200241026a2107230041106b22042400200441086a41e08408410e109e0120042004280208200428020c2001109f01200428020021082004280204220610f7010340200720022201470440200141016a210241b0950821000240024002400240024002400240024020012d000041016b0e080700010203040506090b41cc950821000c060b41e8950821000c050b4188960821000c040b41a0960821000c030b41bc960821000c020b41e0960821000c010b41f8960821000b200028020421012000280200210010b601220920002001101f1a2006200910bc010c010b0b2003200836020020032006360204200441106a24002003411c6a200541086a2802003602002003200329030037020c200320052902003702142003410c6a220241086a2201280200044020011084020b200228020021012002280204210241bc850810850210f1012001200210f201000b4001027f230041206b22002400103f410110db01410010b1012101200041146a10d2032000200028021420002802182001109203200010e501200041206a24000ba20101037f230041d0006b22002400103f410210db01410041d28f08410210c2012101410110b1012102200020013602182000411c6a10d203200041286a200028021c200028022020021092032000200041346a360244200042003703382000200041186a3602482000200041306a2201360240200041386a108102200041106a200129030037030020002000290328370308200041086a10e501200041d0006a24000b3b01037f230041106b22002400103f410110db01410010b1012101200041046a220210d2032002108f0328020042002001109d01200041106a24000b3701027f230041106b22002400103f410010db01200041046a220110d203108e032001108f03280200420010a701101d200041106a24000b4b01027f230041206b22002400410010db01200041106a220110ab012000200028021836020c200110d2032001108f032000410c6a10bd03044041fc880841151003000b200041206a24000bda0102097f017e230041306b22002400410010db0110ac0121022000410c6a220110d203200041206a21032001108f0321062002100c210741002101024002400340200141106a22042001490d02200420074b0d01200342003703002000420037031820022001200041186a2205411010ad011a2000410036022c20052000412c6a220810ae0121012005200810af0121092000200041186a2000412c6a10ae0136022420002001360220200020093703182006200310bd03450440200421010c010b0b41fc880841151003000b200041306a24000f0b10b001000b4701017f230041106b22002400103f410010db01200041046a10d203027f200028020c108003450440200028020420002802081093030c010b10b6010b10071a200041106a24000b880201087f230041206b2200240010b301410110db014100109101210610aa01200041086a10761074210210b60121072000410036021420002802102103200041146a2101230041306b22002400200020031077024002400240200028020041016b0e020001020b41c0880841181003000b41d8880841141003000b027f2001280200220545044010a50110b601220410f7012004200310800241b18908210541100c010b2001280208210420012802040b210120034101200010b302200041246a200220072006410310f80120002004360214200020013602102000200536020c200020002802283602202000200028022436021c2000200028022c3602182000410c6a108302000b6701027f230041106b22002400103f410110db0141001091012101200041046a1076024020002802042000280208107f41024704402001109f02450d01200028020c41022001107b10b302200041106a24000f0b41d8880841141003000b41ec880841101003000b5a01037f230041206b22002400103f410210db01410010b10121012000410110cd0122024110763a0012200020023b0110200041146a10762000200028021420002802182001200041106a10a503200010e501200041206a24000b9a0101047f230041406a22002400103f410310db01410041d28f08410210c2012101410110b10121022000410210cd0122034110763a0022200020033b01202000200136021c200041246a1076200041306a2201200028022420002802282002200041206a10a5032000411c6a200110a603200041106a200041386a29030037030020002000290330370308200041086a10e501200041406b24000b4902027f017e230041206b22002400103f410210db01410010192102410110b1012101200041146a10762000200028021420002802182002200110a703200010e501200041206a24000b860102037f017e230041306b22002400103f410310db01410041d28f08410210c2012101410110192103410210b101210220002001360210200041146a1076200041206a2201200028021420002802182003200210a703200041106a200110a603200041086a200041286a29030037030020002000290320370300200010e501200041306a24000b4202037f017e230041106b22002400103f410210db01410010192103410110b1012101200041046a220210762002108f0328020020032001109d01200041106a24000b3e02027f017e230041106b22002400103f410110db01410010192102200041046a22011076108e032001108f03280200200210a701101d200041106a24000bb402020b7f017e230041206b22002400103f410110db0141001019210b20001076108e032000108f0342001024210610042102100421071004210810042103100421014200102421091004210a280200200b2006200220072008200320012009200a106c2001100c450440200141b881084120101f1a0b200041003b010c200241002000410c6a22042202410210ad011a2003107b2203100c2101200041003a001c2000200136021820002003360214200020013602102000410036020c200210b3032102200410b30321032000410c6a10b3032104200028020c200028021010c801044020002d001c044041c4e508410036020041c8e50841003a00000b108a012201200210e3012001200310e3012001200410e3012001108b01200041206a24000f0b41de8608412041a58008410e108701000b4501017f230041106b22002400103f410010db01200041046a1076027f200028020c10b2020440200028020420002802081093030c010b10b6010b10071a200041106a24000b4e01027f230041106b22002400103f410110db01410041e98f08410310c3012101200041046a10ca03200028020810ad02044041808808410f1003000b200028020c200110e902200041106a24000b4201027f230041106b22002400103f410110db01410041b28d08410510c3012101200041046a10ca0320002802042000280208200110eb02ad101c200041106a24000b9a0101077f230041106b22002400103f410110db01410041b28d08410510c3012103200041046a10ca032000280208220210ad022101200028020422042002200110eb022105024020012003460440200521060c010b20042002200310eb022106200420022003200510ea020b200420022001410010d402200145044010b001000b200028020c200141016b10e9022006ad101c200041106a24000b4e01037f230041106b22002400103f410210db01410041b28d08410510c3012101410141e78f08410210c3012102200041046a10ca03200028020420002802082001200210ea02200041106a24000b6901057f230041106b22012400103f410010db01200141046a10ca032001280208220210ad022103200128020421044101210002400340200020034d04402000417f460d0220042002200010eb02ad101c200041016a21000c010b0b200141106a24000f0b10b001000b4801027f230041206b22002400103f410010db01200041086a220110cf032000200028020c10ad0236021c2000410136021820002001360214200041146a10b403200041206a24000b3c01037f230041106b22002400103f410110db01410041838d08410410c3012101200041046a220210cf0320022001108803ad1041200041106a24000b3d01027f230041106b22002400103f410110db01410041838d08410410c3012101200041046a10cf03200028020c2001108903ad1041200041106a24000bdc0101087f230041106b22012400103f410110db01410041838d08410410c3012104200141046a10cf030240200128020c22052004108c0322000440024020002001280208220310ad0222024d044020002002460d01200128020422072003200210d8022106200310ad022000490d032007200010d5022006ad10bb020c010b0c020b200310ad0220024904400c020b2001280204200210d50210bc022003200241016b10ba0220002002470440200520062000108a030b20052004108b0310bc020b2000410047ad1041200141106a24000f0b41eb940841121003000b7802057f017e230041206b22002400103f410210db01200041086a410041f78f0810ca01200041146a410141f58f0810ca01200028021c21012000280218210220002802102103200028020c210420002802082000280214109c0245200220044772047e42000520032001107cad0b1041200041206a24000b0d00103f410010db014200101c0b0d00103f410010db0110b001000b0d00103f410010db01427e10410b1100103f410010db0141a287084104101b0b7101037f103f410110db01230041106b2201240041001091012200100c41044604402001410036020c200041002001410c6a2202410410ad011a41feffffff0720002002410441a28708410410d3011b21000b200141106a2400200041feffffff0747047e2000109f02ad0542010b10410b1400103f410110db014100109101109f02ad10410b970102037f027e230041206b22002400103f410110db01410041f58c08410810c301ad210410b60121010340200320045145044010b6012202200342017c220310fe012001200210bc010c010b0b2000200136021020002001100c36021c200041003602182000200041106a3602140340200041086a200041146a10e10120002802080440200028020c10071a0c010b0b200041206a24000b2b01017f103f410110db01410041fd8c08410610c301220045044041e78c08410e109c01000b2000ad101c0b110010b301410010db0110aa011074101d0b2001017f103f410110db01410041b78d08410710c201210010cb03200010b6020b4101017f230041206b22002400103f410010db01200010cb0310b10210cd03200041106a2000280200200028020410c602200028021045ad1041200041206a24000b4501027f230041106b22002400103f410110db01410041838d08410410c3012101200010cb0310b10210cd032000280208200028020c200110d302ad1041200041106a24000b3f01017f230041206b22002400103f410010db01200010cb0310b10210cd03200041106a2000280200200028020410c6022000350210101c200041206a24000b840101047f230041206b22002400103f410110db01410041838d08410410c3012101200041106a10cb0310b10210cd0302402000280218200028021c200110d10222010440200041086a20002802102202200028021422032001108401200020022003200028020c10e30220002802000d010b1079000b2000350204101c200041206a24000b840101047f230041206b22002400103f410110db01410041838d08410410c3012101200041106a10cb0310b10210cd0302402000280218200028021c200110d10222010440200041086a20002802102202200028021422032001108401200020022003200028020810e30220002802000d010b1079000b2000350204101c200041206a24000b6301037f230041306b22002400103f410010db01200041106a10cb0310b10210cd03200041206a200028021022012000280214220210c602200041086a20012002200028022410e30220002802084504401079000b200035020c101c200041306a24000b6301037f230041306b22002400103f410010db01200041106a10cb0310b10210cd03200041206a200028021022012000280214220210c602200041086a20012002200028022810e30220002802084504401079000b200035020c101c200041306a24000b7402027f017e230041306b22002400103f410010db01200041106a220110cb0310b10210cc03200041086a200110c5022000290308210210b60121012000200237022803402000200041286a10830120002802004101474504402001200028020410bc010c010b0b200110071a200041306a24000bc60102057f017e230041406a22002400103f410010db012000411c6a220110cb0310b10210cc03200041106a200110c5022000290310210510b6012102200020053702342000200136023c024003400240200041086a200041346a10830120002802084101470d00200028023c220141086a2802002001410c6a280200200028020c220410d302450d022001280214107b220341d68708410710141a2004200310e80120022001280210200310d20210bc010c010b0b200210071a200041406b24000f0b1079000b5b01037f230041206b22002400103f410110db01410041838d08410410c3012000410c6a10cb0310b10210ce032000280210107b220141ba8808410610141a200110e801200028020c200110d202410047ad1041200041206a24000b4301027f230041206b22002400103f410110db01410041b28d08410510c30121012000410c6a10cb0310b10210ce03200041146a200110d902ad101c200041206a24000b7b01027f230041206b22002400103f410110db01410041878d08410510c3012101200041003a001c20002001360218200041013602140340200041086a200041146a10be0320002802080440200028020c2101200041b69108410a107310ad0320002802002000280204200110c2021a0c010b0b200041206a24000b920101047f230041306b22002400103f410110db01410041878d08410510c3012101200041003a00202000200136021c2000410136021802400340200041106a200041186a10be032000280210450d01200028021422014190ce006a220220014f0440200041246a220341ac9108410a107310fb02200041086a20032002200110c1020c010b0b10b001000b200041306a24000b7501037f230041206b22002400103f410110db01410041878d08410510c3012101200041003a00102000200136020c2000410136020803402000200041086a10be032000280200044020002802042101200041146a220241be93084114107310af03200220011088031a0c010b0b200041206a24000b3601027f103f410210db01410041b78d08410710c201410141d48f08410910c30141da9208411c1073220110db02200110bd0210071a0b1e01017f103f410210db01410010b1012200410110b1011097022000101d0b1e01017f103f410210db01410010b1012200410110b10110a1022000101d0b1900103f410210db01410010b101410110b101109c02ad10410b1900103f410010db0142e4f401107d4102109e0210a302101d0b1300103f410010db0142b9e000107d1074101d0b2f004299b796d8d30042acacc2ca0242a8c5a0c10a42c085f7bc05429ed69dd501429d988365411141fe860810c7060b2f004286bcb3def800428094ebdc0342dba9e5940f42fb9b9df30742a7b9d0b30242ead28a594113418f870810c7060bbd0501057f230041e0006b220024000240024010f901220410970122021094020d002002107b2201100c2102200041003a004c2000200236024820002001360244200020023602402000410036023c2000413c6a220210aa032103200210ab03210110b601210203402001044020022000413c6a10aa0310bc01200141016b21010c010b0b200028023c200028024010c801450d0120002d004c044041c4e508410036020041c8e50841003a00000b200410bc022000200310fb012000280220450d002000413c6a2201200310fb01200028025c450d00024002400240200141928f08411b10fa01450440200141ad8f08411f10fa010d01200141808f08411210fa010d02200041286a22042003200210b8032000280228450d04200028023021022001200028022c220310fb01200028025c450d0420042003200210b8032000280228450d042001200028022c200028023010b803200028023c450d0441b18c0841361003000b10dd01410010dc0120004100360224200041286a2201200041246a10b801200028022410d901200028022c210320002802282001200210de0110dd01200028022c200028023010da010d02200110d2032001200310b1030c030b10dd01410010dc0120004100360224200041286a2201200041246a41cc8f08410610b401200028022410d90120002802282001200210de0110dd01200028022c200028023010da01450440200110ab0120002802302102200110d2032001200210b1030c030b200041286a10d20320002802301094030c020b10dd01410010dc0120004100360224200041286a2201200041246a41cc8f08410610b401200028022410d90120002802282001200210de0110dd01200028022c200028023010da010d0141f493084108107310fe020c010b200041286a10d20320002802301094030b200041e0006a24000f0b419f8108411941a58008410e108701000b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072006200342208822067e22082005200142208822097e7c22054220867c220a37030020002007200a56ad200620097e2005200854ad4220862005422088847c7c200120047e200220037e7c7c3703080ba50101027f230041306b22062400027f2001500440200641106a2005410d109e01200641086a200628021020062802142000109f0120062802082107200628020c0c010b200641286a20042003109e01200641206a2006280228200628022c2000109f01200641186a20062802202006280224200110a00120062802182107200628021c0b2100200620072000200210a1012006280200200628020410a201200641306a24000b3401027f230041106b22032400200341086a200220011073220410772000200329030837020020002004360208200341106a24000be30202057f037e230041e0006b22082400103f410110db01200841d8006a410010b101220a10a702024020082802584101460440200828025c21094109109e02210b4201107d200910a202210c200841c8006a200a200b10a402200c10a00210a9022008290348a70d0120072006109c01000b41c08e08410e109c01000b200841386a2008290350220e200e423f87220f2005427f10c406024020082903402008290338220d423f87520d00200841286a200d428094ebdc037f20047c220d200d423f87200e200f10c40620082903302008290328220d423f87520d00200841186a200d428094ebdc037f20037d220d200d423f87200e200f10c40620082903202008290318220d423f87520d00200841086a200d428094ebdc037f20027c220d200d423f87200e200f10c40620082903102008290308220e423f87520d002009ad20017e200e428094ebdc037f7c20007d107a1040200841e0006a24000f0b10b001000b0b9c170500418080080bb801546f6b656e417474726962757465736e6f6e46756e6769626c65546f6b656e4d6170706572696e70757420746f6f206c6f6e67696e76616c69642076616c756564656c6962657261746520746f70206465636f6465206572726f7264656c6962657261746520746f7020656e636f6465206572726f7264656c69626572617465206e657374656420656e636f6465206572726f726d697373696e67206b657973657269616c697a6572206465636f6465206572726f723a200041d881080be403696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473656e64706f696e7420726573756c7420656e636f6465206572726f723a2063616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e65676174697665455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e465443726561746566616c73657472756563616e467265657a6563616e5769706563616e506175736563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c65464e474e46545346544d4554417265676973746572416e64536574416c6c526f6c6573697373756543425f434c4f53555245636f6e74726163742063616c6c20656e636f6465206572726f723a200041c585080b01010041d985080bd41102ffff73796e6320726573756c7476616c756520746f6f206c6f6e67696e70757420746f6f2073686f72746361737420746f20693634206572726f72703232347032353670333834703532316661696c656420746f206c6f616420746f20627974652061727261794d616e6167656456656320696e646578206f7574206f662072616e67656572726f72206465636f64696e67204553445420617474726962757465733a206c6e20696e7465726e616c206572726f726c6f673220696e7465726e616c206572726f7245474c4473746f72616765206b657920656e636f6465206572726f723a2073746f7261676520656e636f6465206572726f723a202e6d61707065642e6e6f64655f69642e6974656d2e6e6f64655f6c696e6b732e76616c75652e696e666f6c656e20616c7265616479207365742e6c656e2e6e6f64652e73746f726167654164647265737320616c726561647920726567697374657265642e696e64657849737375652077617320616c72656164792063616c6c6564546f6b656e20494420616c726561647920736574496e76616c696420746f6b656e204944496e76616c6964207061796d656e7420746f6b656e4d757374206973737565206f722073657420746f6b656e20494420666972737464656661756c745f69737375655f636264656661756c745f69737375655f696e69745f737570706c795f6362556e6b6e6f776e20746f6b656e206964412076616c756520776173206e6f742070726576696f75736c79207365742e617474722e636f756e7465722e6d617070696e672e6e6f6e6365436f756e746572206f766572666c6f772e2054686973206d6f64756c652063616e20686f6c642065766964656e636520666f72206d6178696d756d2075383a3a4d415820646966666572656e7420746f6b656e20494473412076616c75652077617320616c7265616479207365746c6f67206461746120656e636f6465206572726f723a206c6f6720746f70696320656e636f6465206572726f723a2073746f72616765206465636f6465206572726f7220286b65793a20786d616d766563616d7664756d6d7964617461617267326e756d5f6c6f67736261206d75737420657175616c206273635f70616e696320746573747369676e6b657973686173685f74797065617267617267336e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637477616e7473206e6f6e2d7a65726f686f775f6d616e796e756d6265726974656d76616c75656f7468657277697365696e6372656d656e7464656661756c746b65795f696e6372656d656e74696e64657861646472657373616464723261646472316d76326d7631696e646578206f7574206f6620626f756e6473696f70745f61646472517565756520656d707479216e6f7420656e6f7567682066756e647363757276655f62697473697a656d62326d6231736c6963655f6c656e7374617274696e675f706f736974696f6e6e725f6279746573617272617963616e6e6f74206265207a65726f73746f726167655f6b65796e65775f76616c75656e6f64655f6964656c656d656e746f746865724e6f2073746f72616765217365745f726f6c65735f63616c6c6261636b637573746f6d5f69737375655f7a65726f5f737570706c795f6362637573746f6d5f69737375655f6e6f6e5f7a65726f5f737570706c795f6362726573756c74746f65787472615f6b65796174747269627574657369646c656e617673656e7a6f70747332733170656e64696e67626164206172726179206c656e67746876617220617267736361706163697479206578636565646564696e707574206f7574206f662072616e6765696e697469616c5f63616c6c65726576656e745f616576656e745f626576656e745f6572725f646174616576656e745f6572725f746f7069636c6f61645f776974685f6b65795f6572726c6f61645f776974685f76616c75655f65727273746f72655f776974685f76616c75655f6572726d61705f6d61707065727365745f6d61707065727665635f6d617070657273746f726167655f62797465737365725f327573697a656269675f696e746269675f75696e746e725f746f5f636c656172693634753634626f6f6c6d6170316d6170326d61703371756575655f6d6170706572454c524f4e44693634454c524f4e447265736572766564454c524f4e4442696755696e746933326d795f73696e676c655f76616c75655f6d617070657273696e676c655f76616c75655f6d61707065725f776974685f6b65796c6973745f6d61707065726d61705f73746f726167655f6d6170706572616464726573735f696473756e697175655f69645f6d6170706572636f6e74726163745f61646472657373756e6f7264657265645f7365745f6d617070657277686974656c6973744d617070657266756e6769626c65546f6b656e4d6170706572726f6c6573536574456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e7473616464724964616464726c6173744964556e6b6e6f776e2061646472657373696e646578206f7574206f662072616e67654974656d206e6f742077686974656c6973746564454c524f4e4472657761726445534454526f6c654c6f63616c4d696e7400009d0a02001100000045534454526f6c654c6f63616c4275726e000000b80a02001100000045534454526f6c654e4654437265617465000000d40a02001100000045534454526f6c654e46544164645175616e746974790000f00a02001600000045534454526f6c654e46544275726e00100b02000f00000045534454526f6c654e4654416464555249000000280b02001100000045534454526f6c654e46545570646174654174747269627574657300440b02001b000000455344545472616e73666572526f6c65680b02001000000070616e6963206f6363757272656400006e020200710202007402020077020200030000000300000003000000040041b097080b0438ffffff", + "report": { + "imports": [ + "addEC", + "bigIntAbs", + "bigIntAdd", + "bigIntAnd", + "bigIntCmp", + "bigIntFinishSigned", + "bigIntFinishUnsigned", + "bigIntGetCallValue", + "bigIntGetESDTExternalBalance", + "bigIntGetInt64", + "bigIntGetSignedArgument", + "bigIntGetUnsignedArgument", + "bigIntIsInt64", + "bigIntLog2", + "bigIntMul", + "bigIntNeg", + "bigIntNew", + "bigIntOr", + "bigIntPow", + "bigIntSetInt64", + "bigIntShl", + "bigIntShr", + "bigIntSign", + "bigIntSqrt", + "bigIntSub", + "bigIntTDiv", + "bigIntTMod", + "bigIntXor", + "checkNoPayment", + "cleanReturnData", + "createEC", + "doubleEC", + "ellipticCurveGetValues", + "finish", + "getArgumentLength", + "getBlockEpoch", + "getBlockNonce", + "getBlockRound", + "getBlockTimestamp", + "getCurveLengthEC", + "getGasLeft", + "getNumArguments", + "getNumESDTTransfers", + "getPrevBlockEpoch", + "getPrevBlockNonce", + "getPrevBlockRound", + "getPrevBlockTimestamp", + "getPrivKeyByteLengthEC", + "getShardOfAddress", + "isOnCurveEC", + "isSmartContract", + "mBufferAppend", + "mBufferAppendBytes", + "mBufferCopyByteSlice", + "mBufferEq", + "mBufferFinish", + "mBufferFromBigIntSigned", + "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntSigned", + "mBufferFromSmallIntUnsigned", + "mBufferGetArgument", + "mBufferGetByteSlice", + "mBufferGetBytes", + "mBufferGetLength", + "mBufferNew", + "mBufferSetByteSlice", + "mBufferSetBytes", + "mBufferSetRandom", + "mBufferStorageLoad", + "mBufferStorageLoadFromAddress", + "mBufferStorageStore", + "mBufferToBigIntSigned", + "mBufferToBigIntUnsigned", + "mBufferToSmallIntSigned", + "mBufferToSmallIntUnsigned", + "managedAsyncCall", + "managedCaller", + "managedCreateEC", + "managedEncodeSecp256k1DerSignature", + "managedExecuteOnDestContext", + "managedGenerateKeyEC", + "managedGetBlockRandomSeed", + "managedGetCodeMetadata", + "managedGetESDTTokenData", + "managedGetMultiESDTCallValue", + "managedGetOriginalTxHash", + "managedGetPrevBlockRandomSeed", + "managedGetStateRootHash", + "managedIsBuiltinFunction", + "managedKeccak256", + "managedMarshalCompressedEC", + "managedMarshalEC", + "managedMultiTransferESDTNFTExecute", + "managedOwnerAddress", + "managedRipemd160", + "managedSCAddress", + "managedScalarBaseMultEC", + "managedScalarMultEC", + "managedSha256", + "managedSignalError", + "managedTransferValueExecute", + "managedUnmarshalCompressedEC", + "managedUnmarshalEC", + "managedVerifyBLS", + "managedVerifyCustomSecp256k1", + "managedVerifyEd25519", + "managedVerifySecp256k1", + "managedWriteLog", + "signalError", + "smallIntFinishSigned", + "smallIntFinishUnsigned", + "smallIntGetSignedArgument", + "smallIntGetUnsignedArgument", + "validateTokenIdentifier" + ], + "isMemGrow": true, + "eiCheck": { + "eiVersion": "1.3", + "ok": false + }, + "codeReport": { + "path": "../output/basic-features.wasm", + "size": 64800, + "hasAllocator": false, + "hasPanic": "without message" + } + } } diff --git a/test/features/basic-features/scenarios/big_uint_log2.json b/test/features/basic-features/scenarios/big_uint_log2.json index 18fea6a2c..e4e6d5c97 100644 --- a/test/features/basic-features/scenarios/big_uint_log2.json +++ b/test/features/basic-features/scenarios/big_uint_log2.json @@ -42,6 +42,54 @@ "gas": "*", "refund": "*" } + }, + { + "step": "scCall", + "id": "log2 from 1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "value": "0", + "function": "log2_big_uint", + "arguments": [ + "1" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "log2 from 0", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "value": "0", + "function": "log2_big_uint", + "arguments": [ + "0" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "0", + "logs": "*", + "gas": "*", + "refund": "*" + } } ] -} +} \ No newline at end of file diff --git a/test/features/basic-features/scenarios/codec_err.scen.json b/test/features/basic-features/scenarios/codec_err.scen.json index 4951776ea..025d91127 100644 --- a/test/features/basic-features/scenarios/codec_err.scen.json +++ b/test/features/basic-features/scenarios/codec_err.scen.json @@ -53,7 +53,7 @@ "expect": { "out": [], "status": "4", - "message": "str:storage decode error: deliberate top decode error" + "message": "str:storage decode error (key: load_with_value_err): deliberate top decode error" } }, { diff --git a/test/features/basic-features/scenarios/managed_decimal.scen.json b/test/features/basic-features/scenarios/managed_decimal.scen.json new file mode 100644 index 000000000..e19612ae2 --- /dev/null +++ b/test/features/basic-features/scenarios/managed_decimal.scen.json @@ -0,0 +1,146 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_addition", + "arguments": [ + "4", + "5" + ], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "9" + ] + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_subtraction", + "arguments": [ + "9", + "4" + ], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ] + } + }, + { + "step": "scCall", + "id": "2", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_subtraction", + "arguments": [ + "2", + "8" + ], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:cannot subtract because result would be negative", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "3", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_eq", + "arguments": [ + "13", + "13" + ], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01" + ], + "status": "", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "4", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_trunc", + "arguments": [], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "313" + ], + "status": "", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "5", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_into_raw_units", + "arguments": [], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "12345" + ], + "status": "", + "message": "*", + "gas": "*", + "refund": "*" + } + } + ] +} \ No newline at end of file diff --git a/test/features/basic-features/scenarios/managed_decimal_logarithm.scen.json b/test/features/basic-features/scenarios/managed_decimal_logarithm.scen.json new file mode 100644 index 000000000..191c2bb60 --- /dev/null +++ b/test/features/basic-features/scenarios/managed_decimal_logarithm.scen.json @@ -0,0 +1,110 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "managed_decimal_ln(23)", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_ln", + "arguments": [ + "23,000000000" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "+3,135553845" + ], + "status": "", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "managed_decimal_ln(378,298)", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_ln", + "arguments": [ + "378,298000000" + ], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x0161cc16aa" + ], + "status": "", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "managed_decimal_log2(23)", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_log2", + "arguments": [ + "23,000000000" + ], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "4,523648008" + ], + "status": "", + "message": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "managed_decimal_log2(218,345)", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "managed_decimal_log2", + "arguments": [ + "218,345000000" + ], + "gasLimit": "1,000,000,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "7,770385327" + ], + "status": "", + "message": "*", + "gas": "*", + "refund": "*" + } + } + ] +} \ No newline at end of file diff --git a/test/features/basic-features/scenarios/storage_i64_bad.scen.json b/test/features/basic-features/scenarios/storage_i64_bad.scen.json index 74ae9f7bf..dff181e2d 100644 --- a/test/features/basic-features/scenarios/storage_i64_bad.scen.json +++ b/test/features/basic-features/scenarios/storage_i64_bad.scen.json @@ -33,7 +33,7 @@ "expect": { "out": [], "status": "*", - "message": "str:storage decode error: input too long", + "message": "str:storage decode error (key: i64): value too long", "logs": "*", "gas": "*", "refund": "*" diff --git a/test/features/basic-features/scenarios/storage_mapper_get_at_address.scen.json b/test/features/basic-features/scenarios/storage_mapper_get_at_address.scen.json index 7577d8d5b..77ffdda1e 100644 --- a/test/features/basic-features/scenarios/storage_mapper_get_at_address.scen.json +++ b/test/features/basic-features/scenarios/storage_mapper_get_at_address.scen.json @@ -152,6 +152,224 @@ "gas": "*", "refund": "*" } + }, + { + "step": "scCall", + "id": "next at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "next_at_address", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "6" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "previous at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "previous_at_address", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "4" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "front at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "front_at_address", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "1" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "back at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "back_at_address", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "10" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "fill map mapper", + "tx": { + "from": "address:an_account", + "to": "sc:to-be-called", + "function": "fill_map_mapper", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "keys at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "keys_at_address", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x0000271100002712000027130000271400002715" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "values at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "values_at_address", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x0000000100000002000000030000000400000005" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "fill unordered set mapper", + "tx": { + "from": "address:an_account", + "to": "sc:to-be-called", + "function": "fill_unordered_set_mapper", + "arguments": [ + "10" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "contains unordered at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "contains_unordered_at_address", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0x01" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "get by index at address", + "tx": { + "from": "address:an_account", + "to": "sc:caller", + "function": "get_by_index", + "arguments": [ + "5" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "5" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } } ] -} +} \ No newline at end of file diff --git a/test/features/basic-features/scenarios/storage_mapper_get_at_address_extra_key.scen.json b/test/features/basic-features/scenarios/storage_mapper_get_at_address_extra_key.scen.json new file mode 100644 index 000000000..e124fd7e1 --- /dev/null +++ b/test/features/basic-features/scenarios/storage_mapper_get_at_address_extra_key.scen.json @@ -0,0 +1,90 @@ +{ + "name": "storage mapper get at address", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:with-storage": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "set single_value_with_keys", + "tx": { + "from": "address:an_account", + "to": "sc:with-storage", + "function": "set_single_value_mapper_with_key", + "arguments": [ + "5", + "str:to-read" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scQuery", + "id": "check single_value_with_keys", + "tx": { + "to": "sc:basic-features", + "function": "get_value_from_address_with_keys", + "arguments": [ + "sc:with-storage", + "5" + ] + }, + "expect": { + "out": [ + "str:to-read" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:basic-features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "sc:with-storage": { + "nonce": "0", + "balance": "0", + "storage": { + "str:single_value_mapper_with_key|0x00000005": "str:to-read" + }, + "code": "mxsc:../output/basic-features.mxsc.json" + }, + "address:an_account": { + "nonce": "*", + "balance": "0" + } + } + } + ] +} \ No newline at end of file diff --git a/test/features/basic-features/scenarios/storage_mapper_set.scen.json b/test/features/basic-features/scenarios/storage_mapper_set.scen.json index 0bdd15381..3e5b59ed9 100644 --- a/test/features/basic-features/scenarios/storage_mapper_set.scen.json +++ b/test/features/basic-features/scenarios/storage_mapper_set.scen.json @@ -298,6 +298,209 @@ "gas": "*", "refund": "*" } + }, + { + "step": "scCall", + "id": "first-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_insert", + "arguments": [ + "111" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "second-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_insert", + "arguments": [ + "222" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "third-insert", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_insert", + "arguments": [ + "333" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "true" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-front", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_front", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-back", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_back", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "333" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-next", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_next", + "arguments": [ + "222" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "333" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-next-out-of-bounds", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_next", + "arguments": [ + "333" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "0" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-previous", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_previous", + "arguments": [ + "222" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "111" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "check-iter-from", + "tx": { + "from": "address:an_account", + "to": "sc:basic-features", + "function": "set_mapper_iter_from_and_count", + "arguments": [ + "222" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [ + "2" + ], + "status": "", + "logs": "*", + "gas": "*", + "refund": "*" + } } ] } diff --git a/test/features/basic-features/scenarios/storage_opt_managed_addr.scen.json b/test/features/basic-features/scenarios/storage_opt_managed_addr.scen.json index 352c818b2..81f66436e 100644 --- a/test/features/basic-features/scenarios/storage_opt_managed_addr.scen.json +++ b/test/features/basic-features/scenarios/storage_opt_managed_addr.scen.json @@ -36,7 +36,7 @@ "expect": { "out": [], "status": "4", - "message": "str:storage decode error: input too long", + "message": "str:storage decode error (key: opt_addr): input too long", "logs": "*", "gas": "*", "refund": "*" diff --git a/test/features/basic-features/scenarios/storage_u64_bad.scen.json b/test/features/basic-features/scenarios/storage_u64_bad.scen.json index 4bceff73d..e0ccba911 100644 --- a/test/features/basic-features/scenarios/storage_u64_bad.scen.json +++ b/test/features/basic-features/scenarios/storage_u64_bad.scen.json @@ -33,7 +33,7 @@ "expect": { "out": [], "status": "4", - "message": "str:storage decode error: input too long", + "message": "str:storage decode error (key: u64): value too long", "logs": "*", "gas": "*", "refund": "*" diff --git a/test/features/basic-features/scenarios/storage_usize_bad.scen.json b/test/features/basic-features/scenarios/storage_usize_bad.scen.json index 677f74a60..e74cc2ca9 100644 --- a/test/features/basic-features/scenarios/storage_usize_bad.scen.json +++ b/test/features/basic-features/scenarios/storage_usize_bad.scen.json @@ -33,7 +33,7 @@ "expect": { "out": [], "status": "4", - "message": "str:storage decode error: input too long", + "message": "str:storage decode error (key: usize): input too long", "logs": "*", "gas": "*", "refund": "*" diff --git a/testcommon/testexecutor/defaultTestExecutor.go b/testcommon/testexecutor/defaultTestExecutor.go index 577f71a7b..960efbc1c 100644 --- a/testcommon/testexecutor/defaultTestExecutor.go +++ b/testcommon/testexecutor/defaultTestExecutor.go @@ -7,16 +7,12 @@ import ( "testing" "github.com/multiversx/mx-chain-vm-go/executor" - "github.com/multiversx/mx-chain-vm-go/wasmer" "github.com/multiversx/mx-chain-vm-go/wasmer2" ) // EnvVMEXECUTOR is the name of the environment variable that controls the default test executor var EnvVMEXECUTOR = "VMEXECUTOR" -// ExecWasmer1 is the value of the EnvVMEXECUTOR variable which selects Wasmer 1 -var ExecWasmer1 = "wasmer1" - // ExecWasmer2 is the value of the EnvVMEXECUTOR variable which selects Wasmer 2 var ExecWasmer2 = "wasmer2" @@ -26,9 +22,6 @@ var defaultExecutorString = ExecWasmer2 func NewDefaultTestExecutorFactory(tb testing.TB) executor.ExecutorAbstractFactory { execStr := getVMExecutorString() - if execStr == ExecWasmer1 { - return wasmer.ExecutorFactory() - } if execStr == ExecWasmer2 { return wasmer2.ExecutorFactory() } @@ -41,13 +34,6 @@ func NewDefaultTestExecutorFactory(tb testing.TB) executor.ExecutorAbstractFacto return nil } -// IsWasmer1Allowed returns true if the default test executor is Wasmer 1. -// If the default test executor is Wasmer 2, it is not allowed to instantiate a -// Wasmer 1 executor due to low-level conflicts between Wasmer 1 and 2. -func IsWasmer1Allowed() bool { - return getVMExecutorString() == ExecWasmer1 -} - func getVMExecutorString() string { execStr := os.Getenv(EnvVMEXECUTOR) diff --git a/vmhost/contexts/async_test.go b/vmhost/contexts/async_test.go index 31a148bf5..579693bdc 100644 --- a/vmhost/contexts/async_test.go +++ b/vmhost/contexts/async_test.go @@ -2,6 +2,7 @@ package contexts import ( "errors" + "github.com/multiversx/mx-chain-vm-go/wasmer2" "math/big" "testing" @@ -18,7 +19,6 @@ import ( "github.com/multiversx/mx-chain-vm-go/testcommon/testexecutor" "github.com/multiversx/mx-chain-vm-go/vmhost" "github.com/multiversx/mx-chain-vm-go/vmhost/vmhooks" - "github.com/multiversx/mx-chain-vm-go/wasmer" "github.com/stretchr/testify/require" ) @@ -58,7 +58,8 @@ func initializeVMAndWasmerAsyncContextWithBuiltIn(tb testing.TB, isBuiltinFunc b gasSchedule := config.MakeGasMapForTests() gasCostConfig, err := config.CreateGasConfig(gasSchedule) require.Nil(tb, err) - wasmer.SetOpcodeCosts(gasCostConfig.WASMOpcodeCost) + wasmerExecutor, _ := wasmer2.CreateExecutor() + wasmerExecutor.SetOpcodeCosts(gasCostConfig.WASMOpcodeCost) host := &contextmock.VMHostMock{ EnableEpochsHandlerField: &worldmock.EnableEpochsHandlerStub{}, diff --git a/vmhost/contexts/blockchain.go b/vmhost/contexts/blockchain.go index fbdf520db..28609e75c 100644 --- a/vmhost/contexts/blockchain.go +++ b/vmhost/contexts/blockchain.go @@ -1,6 +1,7 @@ package contexts import ( + "github.com/multiversx/mx-chain-vm-go/vmhost/vmhooks" "math/big" "github.com/multiversx/mx-chain-core-go/core/check" @@ -8,7 +9,6 @@ import ( logger "github.com/multiversx/mx-chain-logger-go" vmcommon "github.com/multiversx/mx-chain-vm-common-go" "github.com/multiversx/mx-chain-vm-go/vmhost" - "github.com/multiversx/mx-chain-vm-go/vmhost/vmhooks" ) var logBlockchain = logger.GetOrCreate("vm/blockchainContext") @@ -317,7 +317,8 @@ func (context *blockchainContext) PopSetActiveState() { prevSnapshot := context.stateStack[stateStackLen-1] err := context.blockChainHook.RevertToSnapshot(prevSnapshot) - if vmhooks.WithFaultAndHost(context.host, err, true) { + if err != nil { + vmhooks.FailExecution(context.host, err) context.host.Runtime().AddError(err, "RevertToSnapshot") logBlockchain.Error("PopSetActiveState RevertToSnapshot", "error", err) return diff --git a/vmhost/contexts/instanceTracker.go b/vmhost/contexts/instanceTracker.go index 01201fee5..158f4d91b 100644 --- a/vmhost/contexts/instanceTracker.go +++ b/vmhost/contexts/instanceTracker.go @@ -59,11 +59,7 @@ func NewInstanceTracker() (*instanceTracker, error) { var err error instanceEvictedCallback := tracker.makeInstanceEvictionCallback() - if WarmInstancesEnabled { - tracker.warmInstanceCache, err = lrucache.NewCacheWithEviction(warmCacheSize, instanceEvictedCallback) - } else { - tracker.warmInstanceCache = nil - } + tracker.warmInstanceCache, err = lrucache.NewCacheWithEviction(warmCacheSize, instanceEvictedCallback) if err != nil { return nil, err } @@ -100,9 +96,7 @@ func (tracker *instanceTracker) PopSetActiveState() { onStack := tracker.IsCodeHashOnTheStack(activeCodeHash) activeInstanceIsTopOfStack := stackedPrevInstance == activeInstance - cold := !WarmInstancesEnabled - - if !activeInstanceIsTopOfStack && (onStack || cold) { + if !activeInstanceIsTopOfStack && onStack { tracker.cleanPoppedInstance(activeInstance, activeCodeHash) } @@ -169,9 +163,7 @@ func (tracker *instanceTracker) CodeHash() []byte { // ClearWarmInstanceCache clears the internal warm instance cache func (tracker *instanceTracker) ClearWarmInstanceCache() { - if WarmInstancesEnabled { - tracker.warmInstanceCache.Clear() - } + tracker.warmInstanceCache.Clear() } // TrackedInstances returns the internal map of tracked instances @@ -227,8 +219,7 @@ func (tracker *instanceTracker) ForceCleanInstance(bypassWarmAndStackChecks bool } onStack := tracker.IsCodeHashOnTheStack(tracker.codeHash) - coldOnlyEnabled := !WarmInstancesEnabled - if onStack || coldOnlyEnabled { + if onStack { if tracker.instance.Clean() { tracker.updateNumRunningInstances(-1) } @@ -348,10 +339,7 @@ func (tracker *instanceTracker) LogCounts() { // NumRunningInstances returns the number of currently running instances (cold and warm) func (tracker *instanceTracker) NumRunningInstances() (int, int) { numWarmInstances := 0 - if WarmInstancesEnabled { - numWarmInstances = tracker.warmInstanceCache.Len() - } - + numWarmInstances = tracker.warmInstanceCache.Len() numColdInstances := tracker.numRunningInstances - numWarmInstances return numWarmInstances, numColdInstances } diff --git a/vmhost/contexts/instanceTracker_test.go b/vmhost/contexts/instanceTracker_test.go index 0aaf4b152..ff8544e38 100644 --- a/vmhost/contexts/instanceTracker_test.go +++ b/vmhost/contexts/instanceTracker_test.go @@ -5,7 +5,7 @@ import ( "testing" mock "github.com/multiversx/mx-chain-vm-go/mock/context" - "github.com/multiversx/mx-chain-vm-go/wasmer" + "github.com/multiversx/mx-chain-vm-go/wasmer2" "github.com/stretchr/testify/require" ) @@ -13,9 +13,8 @@ func TestInstanceTracker_TrackInstance(t *testing.T) { iTracker, err := NewInstanceTracker() require.Nil(t, err) - newInstance := &wasmer.WasmerInstance{ - AlreadyClean: false, - } + newInstance := &wasmer2.Wasmer2Instance{ + AlreadyClean: false} _ = iTracker.SetNewInstance(newInstance, Bytecode) iTracker.codeHash = []byte("testinst") @@ -338,7 +337,7 @@ func TestInstanceTracker_UnsetInstance_Ok(t *testing.T) { iTracker, err := NewInstanceTracker() require.Nil(t, err) - iTracker.instance = &wasmer.WasmerInstance{ + iTracker.instance = &wasmer2.Wasmer2Instance{ AlreadyClean: true, } iTracker.UnsetInstance() diff --git a/vmhost/contexts/runtime.go b/vmhost/contexts/runtime.go index 22238a5e5..9449c430f 100644 --- a/vmhost/contexts/runtime.go +++ b/vmhost/contexts/runtime.go @@ -28,9 +28,6 @@ var mapNewCryptoAPI = map[string]struct{}{ const warmCacheSize = 100 -// WarmInstancesEnabled controls the usage of warm instances -const WarmInstancesEnabled = true - type runtimeContext struct { host vmhost.VMHost vmInput *vmcommon.ContractCallInput @@ -270,10 +267,6 @@ func (context *runtimeContext) makeInstanceFromContractByteCode(contract []byte, } func (context *runtimeContext) useWarmInstanceIfExists(gasLimit uint64, newCode bool) (bool, error) { - if !WarmInstancesEnabled { - return false, nil - } - codeHash := context.iTracker.CodeHash() if newCode || len(codeHash) == 0 { return false, nil @@ -337,10 +330,6 @@ func (context *runtimeContext) saveCompiledCode() { } func (context *runtimeContext) saveWarmInstance() { - if !WarmInstancesEnabled { - return - } - codeHash := context.iTracker.CodeHash() if context.iTracker.IsCodeHashOnTheStack(codeHash) { return @@ -702,44 +691,6 @@ func (context *runtimeContext) checkIfContainsNewCryptoApi() error { return nil } -// BaseOpsErrorShouldFailExecution returns true -func (context *runtimeContext) BaseOpsErrorShouldFailExecution() bool { - return true -} - -// SyncExecAPIErrorShouldFailExecution specifies whether an error in the -// EEI functions for synchronous execution should abort contract execution. -func (context *runtimeContext) SyncExecAPIErrorShouldFailExecution() bool { - return true -} - -// BigIntAPIErrorShouldFailExecution specifies whether an error in the EEI -// functions for BigInt operations should abort contract execution. -func (context *runtimeContext) BigIntAPIErrorShouldFailExecution() bool { - return true -} - -// BigFloatAPIErrorShouldFailExecution returns true -func (context *runtimeContext) BigFloatAPIErrorShouldFailExecution() bool { - return true -} - -// CryptoAPIErrorShouldFailExecution specifies whether an error in the EEI -// functions for crypto operations should abort contract execution. -func (context *runtimeContext) CryptoAPIErrorShouldFailExecution() bool { - return true -} - -// ManagedBufferAPIErrorShouldFailExecution returns true -func (context *runtimeContext) ManagedBufferAPIErrorShouldFailExecution() bool { - return true -} - -// ManagedMapAPIErrorShouldFailExecution returns true -func (context *runtimeContext) ManagedMapAPIErrorShouldFailExecution() bool { - return true -} - // UseGasBoundedShouldFailExecution returns true when flag activated func (context *runtimeContext) UseGasBoundedShouldFailExecution() bool { return context.host.EnableEpochsHandler().IsFlagEnabled(vmhost.UseGasBoundedShouldFailExecutionFlag) @@ -868,10 +819,6 @@ func (context *runtimeContext) EndExecution() { // ValidateInstances checks the state of the instances after execution func (context *runtimeContext) ValidateInstances() error { - if !WarmInstancesEnabled { - return nil - } - err := context.iTracker.CheckInstances() if err != nil { return err diff --git a/vmhost/contexts/runtime_test.go b/vmhost/contexts/runtime_test.go index 96cb131fb..ddfd0bee0 100644 --- a/vmhost/contexts/runtime_test.go +++ b/vmhost/contexts/runtime_test.go @@ -4,6 +4,7 @@ import ( "bytes" "errors" "fmt" + "github.com/multiversx/mx-chain-vm-go/wasmer2" "math/big" "testing" @@ -19,7 +20,6 @@ import ( "github.com/multiversx/mx-chain-vm-go/testcommon/testexecutor" "github.com/multiversx/mx-chain-vm-go/vmhost" "github.com/multiversx/mx-chain-vm-go/vmhost/vmhooks" - "github.com/multiversx/mx-chain-vm-go/wasmer" "github.com/stretchr/testify/require" ) @@ -32,7 +32,8 @@ var vmType = []byte("type") func InitializeVMAndWasmer() *contextmock.VMHostMock { gasSchedule := config.MakeGasMapForTests() gasCostConfig, _ := config.CreateGasConfig(gasSchedule) - wasmer.SetOpcodeCosts(gasCostConfig.WASMOpcodeCost) + wasmerExecutor, _ := wasmer2.CreateExecutor() + wasmerExecutor.SetOpcodeCosts(gasCostConfig.WASMOpcodeCost) host := &contextmock.VMHostMock{} @@ -276,7 +277,7 @@ func TestRuntimeContext_PushPopInstance(t *testing.T) { instance := runtimeCtx.iTracker.instance runtimeCtx.pushInstance() - runtimeCtx.iTracker.instance = &wasmer.WasmerInstance{} + runtimeCtx.iTracker.instance = &wasmer2.Wasmer2Instance{} runtimeCtx.iTracker.codeSize = newCodeSize require.Equal(t, newCodeSize, runtimeCtx.GetSCCodeSize()) require.Equal(t, 1, len(runtimeCtx.iTracker.instanceStack)) @@ -315,7 +316,7 @@ func TestRuntimeContext_PushPopState(t *testing.T) { } runtimeCtx.InitStateFromContractCallInput(input) - runtimeCtx.iTracker.instance = &wasmer.WasmerInstance{} + runtimeCtx.iTracker.instance = &wasmer2.Wasmer2Instance{} runtimeCtx.PushState() require.Equal(t, 1, len(runtimeCtx.stateStack)) @@ -337,11 +338,11 @@ func TestRuntimeContext_PushPopState(t *testing.T) { require.False(t, runtimeCtx.ReadOnly()) require.Nil(t, runtimeCtx.Arguments()) - runtimeCtx.iTracker.instance = &wasmer.WasmerInstance{} + runtimeCtx.iTracker.instance = &wasmer2.Wasmer2Instance{} runtimeCtx.PushState() require.Equal(t, 1, len(runtimeCtx.stateStack)) - runtimeCtx.iTracker.instance = &wasmer.WasmerInstance{} + runtimeCtx.iTracker.instance = &wasmer2.Wasmer2Instance{} runtimeCtx.PushState() require.Equal(t, 2, len(runtimeCtx.stateStack)) @@ -389,7 +390,7 @@ func TestRuntimeContext_CountContractInstancesOnStack(t *testing.T) { require.Equal(t, uint64(0), runtime.CountSameContractInstancesOnStack(beta)) require.Equal(t, uint64(0), runtime.CountSameContractInstancesOnStack(gamma)) - runtime.iTracker.instance = &wasmer.WasmerInstance{} + runtime.iTracker.instance = &wasmer2.Wasmer2Instance{} runtime.PushState() input.RecipientAddr = beta runtime.InitStateFromContractCallInput(input) @@ -397,7 +398,7 @@ func TestRuntimeContext_CountContractInstancesOnStack(t *testing.T) { require.Equal(t, uint64(0), runtime.CountSameContractInstancesOnStack(beta)) require.Equal(t, uint64(0), runtime.CountSameContractInstancesOnStack(gamma)) - runtime.iTracker.instance = &wasmer.WasmerInstance{} + runtime.iTracker.instance = &wasmer2.Wasmer2Instance{} runtime.PushState() input.RecipientAddr = gamma runtime.InitStateFromContractCallInput(input) @@ -405,7 +406,7 @@ func TestRuntimeContext_CountContractInstancesOnStack(t *testing.T) { require.Equal(t, uint64(1), runtime.CountSameContractInstancesOnStack(beta)) require.Equal(t, uint64(0), runtime.CountSameContractInstancesOnStack(gamma)) - runtime.iTracker.instance = &wasmer.WasmerInstance{} + runtime.iTracker.instance = &wasmer2.Wasmer2Instance{} runtime.PushState() input.RecipientAddr = alpha runtime.InitStateFromContractCallInput(input) diff --git a/vmhost/errors.go b/vmhost/errors.go index e57facf55..74def932b 100644 --- a/vmhost/errors.go +++ b/vmhost/errors.go @@ -118,9 +118,15 @@ var ErrStorageValueOutOfRange = errors.New("storage value out of range") // ErrDivZero signals that an attempt to divide by 0 has been made var ErrDivZero = errors.New("division by 0") -// ErrBigIntCannotBeRepresentedAsInt64 signals that an attempt to apply a bitwise operation on negative numbers has been made +// ErrBigIntCannotBeRepresentedAsInt64 signals that a big in conversion to int64 was attempted, but with a too large input var ErrBigIntCannotBeRepresentedAsInt64 = errors.New("big int cannot be represented as int64") +// ErrBytesExceedInt64 signals that managed buffer cannot be converted to int64 +var ErrBytesExceedInt64 = errors.New("bytes cannot be parsed as int64") + +// ErrBytesExceedUint64 signals that managed buffer cannot be converted to unsigned int64 +var ErrBytesExceedUint64 = errors.New("bytes cannot be parsed as uint64") + // ErrBitwiseNegative signals that an attempt to apply a bitwise operation on negative numbers has been made var ErrBitwiseNegative = errors.New("bitwise operations only allowed on positive integers") diff --git a/vmhost/hostCore/host.go b/vmhost/hostCore/host.go index 89becd3ba..9b180c862 100644 --- a/vmhost/hostCore/host.go +++ b/vmhost/hostCore/host.go @@ -546,10 +546,6 @@ func (host *vmHost) AreInSameShard(leftAddress []byte, rightAddress []byte) bool // IsAllowedToExecute returns true if the special opcode is allowed to be run by the address func (host *vmHost) IsAllowedToExecute(opcode string) bool { - if !host.enableEpochsHandler.IsFlagEnabled(vmhost.MultiESDTNFTTransferAndExecuteByUserFlag) { - return false - } - mapAddresses, ok := host.mapOpcodeAddressIsAllowed[opcode] if !ok { return false diff --git a/vmhost/hosttest/bad_test.go b/vmhost/hosttest/bad_test.go index ba5c9f9aa..d662d6cf5 100644 --- a/vmhost/hosttest/bad_test.go +++ b/vmhost/hosttest/bad_test.go @@ -9,9 +9,7 @@ import ( "github.com/multiversx/mx-chain-vm-go/executor" contextmock "github.com/multiversx/mx-chain-vm-go/mock/context" test "github.com/multiversx/mx-chain-vm-go/testcommon" - "github.com/multiversx/mx-chain-vm-go/testcommon/testexecutor" "github.com/multiversx/mx-chain-vm-go/vmhost" - "github.com/multiversx/mx-chain-vm-go/wasmer" "github.com/multiversx/mx-chain-vm-go/wasmer2" "github.com/stretchr/testify/require" ) @@ -263,14 +261,6 @@ func TestBadContract_NoPanic_NonExistingFunction(t *testing.T) { }) } -func TestBadContractExtra_LongIntLoop_Wasmer1(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - testBadContractExtraLongIntLoop(t, wasmer.ExecutorFactory()) -} - func TestBadContractExtra_LongIntLoop_Wasmer2(t *testing.T) { testBadContractExtraLongIntLoop(t, wasmer2.ExecutorFactory()) } diff --git a/vmhost/hosttest/execution_benchmark_test.go b/vmhost/hosttest/execution_benchmark_test.go index 8b01602bb..2c6d3768c 100644 --- a/vmhost/hosttest/execution_benchmark_test.go +++ b/vmhost/hosttest/execution_benchmark_test.go @@ -16,7 +16,6 @@ import ( gasSchedules "github.com/multiversx/mx-chain-vm-go/scenario/gasSchedules" "github.com/multiversx/mx-chain-vm-go/testcommon" "github.com/multiversx/mx-chain-vm-go/vmhost" - "github.com/multiversx/mx-chain-vm-go/vmhost/contexts" "github.com/multiversx/mx-chain-vm-go/vmhost/hostCore" "github.com/multiversx/mx-chain-vm-go/vmhost/mock" "github.com/stretchr/testify/assert" @@ -49,9 +48,6 @@ func Test_RunERC20BenchmarkFail(t *testing.T) { } func Test_WarmInstancesMemoryUsage(t *testing.T) { - if !contexts.WarmInstancesEnabled { - t.Skip("this test is only relevant with warm instances") - } if testing.Short() { t.Skip("not a short test") } @@ -60,9 +56,6 @@ func Test_WarmInstancesMemoryUsage(t *testing.T) { } func Test_WarmInstancesFuzzyMemoryUsage(t *testing.T) { - if !contexts.WarmInstancesEnabled { - t.Skip("this test is only relevant with warm instances") - } if testing.Short() { t.Skip("not a short test") } diff --git a/vmhost/hosttest/execution_test.go b/vmhost/hosttest/execution_test.go index 79fc50f25..563d91a78 100644 --- a/vmhost/hosttest/execution_test.go +++ b/vmhost/hosttest/execution_test.go @@ -23,7 +23,6 @@ import ( "github.com/multiversx/mx-chain-vm-go/testcommon/testexecutor" "github.com/multiversx/mx-chain-vm-go/vmhost" "github.com/multiversx/mx-chain-vm-go/vmhost/vmhooks" - "github.com/multiversx/mx-chain-vm-go/wasmer" "github.com/multiversx/mx-chain-vm-go/wasmer2" twoscomplement "github.com/multiversx/mx-components-big-int/twos-complement" "github.com/stretchr/testify/assert" @@ -140,14 +139,6 @@ func TestExecution_DeployNotWASM(t *testing.T) { }) } -func TestExecution_DeployWASM_WrongInit_Wasmer1(t *testing.T) { - if !testexecutor.IsWasmer1Allowed() { - t.Skip("run exclusively with wasmer1") - } - - testExecutionDeployWASMWrongInit(t, wasmer.ExecutorFactory()) -} - func TestExecution_DeployWASM_WrongInit_Wasmer2(t *testing.T) { testExecutionDeployWASMWrongInit(t, wasmer2.ExecutorFactory()) } @@ -1322,11 +1313,6 @@ func TestExecution_ExecuteOnSameContext_Prepare(t *testing.T) { } func TestExecution_ExecuteOnSameContext_Wrong(t *testing.T) { - executionCostBeforeExecuteAPI := uint64(156) - executeAPICost := uint64(39) - gasLostOnFailure := uint64(50000) - finalCost := uint64(44) - test.BuildInstanceCallTest(t). WithContracts( test.CreateInstanceContract(test.ParentAddress). @@ -1338,34 +1324,9 @@ func TestExecution_ExecuteOnSameContext_Wrong(t *testing.T) { WithGasProvided(test.GasProvided). Build()). AndAssertResults(func(host vmhost.VMHost, stubBlockchainHook *contextmock.BlockchainHookStub, verify *test.VMOutputVerifier) { - if !host.Runtime().SyncExecAPIErrorShouldFailExecution() { - verify.Ok(). - GasUsed(test.ParentAddress, 3405). - Balance(test.ParentAddress, 1000). - BalanceDelta(test.ParentAddress, -test.ParentTransferValue). - BalanceDelta(test.ParentTransferReceiver, test.ParentTransferValue). - GasRemaining(test.GasProvided- - test.ParentCompilationCostSameCtx- - executionCostBeforeExecuteAPI- - executeAPICost- - gasLostOnFailure- - finalCost). - ReturnData(test.ParentFinishA, test.ParentFinishB, []byte("succ"), []byte("fail")). - Storage( - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ParentKeyA).WithValue(test.ParentDataA), - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ParentKeyB).WithValue(test.ParentDataB), - test.CreateStoreEntry(test.ChildAddress).WithKey(test.ChildKey).WithValue(test.ChildData), - ). - Transfers( - test.CreateTransferEntry(test.ParentAddress, test.ParentTransferReceiver, 0). - WithData(test.ParentTransferData). - WithValue(big.NewInt(test.ParentTransferValue)), - ) - } else { - verify.ExecutionFailed(). - ReturnMessage("account not found"). - GasRemaining(0) - } + verify.ExecutionFailed(). + ReturnMessage("account not found"). + GasRemaining(0) }) } @@ -1386,11 +1347,6 @@ func TestExecution_ExecuteOnSameContext_OutOfGas(t *testing.T) { // compilation and starting, but the child starts an infinite loop which will // end in OutOfGas. - executionCostBeforeExecuteAPI := uint64(90) - executeAPICost := uint64(1) - gasLostOnFailure := uint64(3500) - finalCost := uint64(54) - test.BuildInstanceCallTest(t). WithContracts( test.CreateInstanceContract(test.ParentAddress). @@ -1405,27 +1361,10 @@ func TestExecution_ExecuteOnSameContext_OutOfGas(t *testing.T) { WithGasProvided(test.GasProvided). Build()). AndAssertResults(func(host vmhost.VMHost, stubBlockchainHook *contextmock.BlockchainHookStub, verify *test.VMOutputVerifier) { - if !host.Runtime().SyncExecAPIErrorShouldFailExecution() { - verify.Ok(). - Balance(test.ParentAddress, 1000). - BalanceDelta(test.ParentAddress, 0). - GasRemaining(test.GasProvided- - test.ParentCompilationCostSameCtx- - executionCostBeforeExecuteAPI- - executeAPICost- - gasLostOnFailure- - finalCost). - ReturnData(test.ParentFinishA, []byte("fail")). - Storage( - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ParentKeyA).WithValue(test.ParentDataA), - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ParentKeyB).WithValue(test.ParentDataB), - ) - } else { - verify.OutOfGas(). - ReturnMessage(vmhost.ErrNotEnoughGas.Error()). - HasRuntimeErrors(vmhost.ErrNotEnoughGas.Error()). - GasRemaining(0) - } + verify.OutOfGas(). + ReturnMessage(vmhost.ErrNotEnoughGas.Error()). + HasRuntimeErrors(vmhost.ErrNotEnoughGas.Error()). + GasRemaining(0) }) } @@ -1617,26 +1556,10 @@ func TestExecution_ExecuteOnSameContext_Recursive_Direct_ErrMaxInstances(t *test WithArguments([]byte{recursiveCalls}). Build()). AndAssertResults(func(host vmhost.VMHost, stubBlockchainHook *contextmock.BlockchainHookStub, verify *test.VMOutputVerifier) { - if host.Runtime().SyncExecAPIErrorShouldFailExecution() == false { - verify.Ok(). - Balance(test.ParentAddress, 1000). - BalanceDelta(test.ParentAddress, 0). - ReturnData( - []byte(fmt.Sprintf("Rfinish%03d", recursiveCalls)), - []byte("fail"), - ). - Storage( - test.CreateStoreEntry(test.ParentAddress). - WithKey([]byte(fmt.Sprintf("Rkey%03d.........................", recursiveCalls))). - WithValue([]byte(fmt.Sprintf("Rvalue%03d", recursiveCalls))), - ) - require.Equal(t, int64(1), host.ManagedTypes().GetBigIntOrCreate(16).Int64()) - } else { - verify.ExecutionFailed(). - ReturnMessage(vmhost.ErrExecutionFailed.Error()). - HasRuntimeErrors(vmhost.ErrMaxInstancesReached.Error(), vmhost.ErrExecutionFailed.Error()). - GasRemaining(0) - } + verify.ExecutionFailed(). + ReturnMessage(vmhost.ErrExecutionFailed.Error()). + HasRuntimeErrors(vmhost.ErrMaxInstancesReached.Error(), vmhost.ErrExecutionFailed.Error()). + GasRemaining(0) }) } @@ -1815,16 +1738,10 @@ func TestExecution_ExecuteOnSameContext_Recursive_Mutual_SCs_OutOfGas(t *testing WithArguments([]byte{recursiveCalls}). Build()). AndAssertResults(func(host vmhost.VMHost, stubBlockchainHook *contextmock.BlockchainHookStub, verify *test.VMOutputVerifier) { - if host.Runtime().SyncExecAPIErrorShouldFailExecution() == false { - verify.OutOfGas(). - ReturnMessage(vmhost.ErrNotEnoughGas.Error()). - GasRemaining(0) - } else { - verify.OutOfGas(). - ReturnMessage(vmhost.ErrNotEnoughGas.Error()). - HasRuntimeErrors(vmhost.ErrNotEnoughGas.Error()). - GasRemaining(0) - } + verify.OutOfGas(). + ReturnMessage(vmhost.ErrNotEnoughGas.Error()). + HasRuntimeErrors(vmhost.ErrNotEnoughGas.Error()). + GasRemaining(0) }) } @@ -1871,11 +1788,6 @@ func TestExecution_ExecuteOnDestContext_Wrong(t *testing.T) { // Call parentFunctionWrongCall() of the parent SC, which will try to call a // non-existing SC. - executionCostBeforeExecuteAPI := uint64(156) - executeAPICost := uint64(42) - gasLostOnFailure := uint64(10000) - finalCost := uint64(44) - test.BuildInstanceCallTest(t). WithContracts( test.CreateInstanceContract(test.ParentAddress). @@ -1887,38 +1799,9 @@ func TestExecution_ExecuteOnDestContext_Wrong(t *testing.T) { WithGasProvided(test.GasProvided). Build()). AndAssertResults(func(host vmhost.VMHost, stubBlockchainHook *contextmock.BlockchainHookStub, verify *test.VMOutputVerifier) { - if host.Runtime().SyncExecAPIErrorShouldFailExecution() == false { - verify.Ok(). - Balance(test.ParentAddress, 1000). - BalanceDelta(test.ParentAddress, -42). - GasUsed(test.ParentAddress, 3612). - BalanceDelta(test.ChildTransferReceiver, 96). - BalanceDelta(test.ParentTransferReceiver, test.ParentTransferValue). - GasRemaining(test.GasProvided- - test.ParentCompilationCostDestCtx- - executionCostBeforeExecuteAPI- - executeAPICost- - gasLostOnFailure- - finalCost). - ReturnData(test.ParentFinishA, test.ParentFinishB, []byte("succ"), []byte("fail")). - Storage( - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ParentKeyA).WithValue(test.ParentDataA), - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ParentKeyB).WithValue(test.ParentDataB), - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ChildKey).WithValue(test.ChildData), - ). - Transfers( - test.CreateTransferEntry(test.ChildAddress, test.ChildTransferReceiver, 0). - WithData([]byte("qwerty")). - WithValue(big.NewInt(96)), - test.CreateTransferEntry(test.ParentAddress, test.ParentTransferReceiver, 1). - WithData(test.ParentTransferData). - WithValue(big.NewInt(test.ParentTransferValue)), - ) - } else { - verify.ExecutionFailed(). - ReturnMessage("account not found"). - GasRemaining(0) - } + verify.ExecutionFailed(). + ReturnMessage("account not found"). + GasRemaining(0) }) } @@ -1939,11 +1822,6 @@ func TestExecution_ExecuteOnDestContext_OutOfGas(t *testing.T) { // compilation and starting, but the child starts an infinite loop which will // end in OutOfGas. - executionCostBeforeExecuteAPI := uint64(90) - executeAPICost := uint64(1) - gasLostOnFailure := uint64(3500) - finalCost := uint64(54) - test.BuildInstanceCallTest(t). WithContracts( test.CreateInstanceContract(test.ParentAddress). @@ -1959,27 +1837,10 @@ func TestExecution_ExecuteOnDestContext_OutOfGas(t *testing.T) { WithGasProvided(test.GasProvided). Build()). AndAssertResults(func(host vmhost.VMHost, stubBlockchainHook *contextmock.BlockchainHookStub, verify *test.VMOutputVerifier) { - if host.Runtime().SyncExecAPIErrorShouldFailExecution() == false { - verify.Ok(). - Balance(test.ParentAddress, 1000). - GasRemaining(test.GasProvided- - test.ParentCompilationCostDestCtx- - executionCostBeforeExecuteAPI- - executeAPICost- - gasLostOnFailure- - finalCost). - ReturnData(test.ParentFinishA, []byte("fail")). - Storage( - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ParentKeyA).WithValue(test.ParentDataA), - test.CreateStoreEntry(test.ParentAddress).WithKey(test.ParentKeyB).WithValue(test.ParentDataB), - ) - require.Equal(t, int64(42), host.ManagedTypes().GetBigIntOrCreate(12).Int64()) - } else { - verify.OutOfGas(). - ReturnMessage(vmhost.ErrNotEnoughGas.Error()). - HasRuntimeErrors(vmhost.ErrNotEnoughGas.Error()). - GasRemaining(0) - } + verify.OutOfGas(). + ReturnMessage(vmhost.ErrNotEnoughGas.Error()). + HasRuntimeErrors(vmhost.ErrNotEnoughGas.Error()). + GasRemaining(0) }) } @@ -2424,15 +2285,10 @@ func TestExecution_ExecuteOnDestContext_Recursive_Mutual_SCs_OutOfGas(t *testing WithArguments([]byte{recursiveCalls}). Build()). AndAssertResults(func(host vmhost.VMHost, stubBlockchainHook *contextmock.BlockchainHookStub, verify *test.VMOutputVerifier) { - if host.Runtime().SyncExecAPIErrorShouldFailExecution() == false { - verify.OutOfGas(). - ReturnMessage(vmhost.ErrNotEnoughGas.Error()) - } else { - verify.OutOfGas(). - ReturnMessage(vmhost.ErrNotEnoughGas.Error()). - HasRuntimeErrors(vmhost.ErrNotEnoughGas.Error()). - GasRemaining(0) - } + verify.OutOfGas(). + ReturnMessage(vmhost.ErrNotEnoughGas.Error()). + HasRuntimeErrors(vmhost.ErrNotEnoughGas.Error()). + GasRemaining(0) }) } @@ -3242,7 +3098,7 @@ func TestExecution_Mocked_Warm_Instances_Same_Contract_Same_Address(t *testing.T host := parentInstance.Host instance := contextmock.GetMockInstance(host) - vmhooks.WithFaultAndHost(host, vmhost.ErrNotEnoughGas, true) + vmhooks.FailExecution(host, vmhost.ErrNotEnoughGas) childInput := test.DefaultTestContractCallInput() childInput.CallerAddr = test.ParentAddress @@ -3285,7 +3141,7 @@ func TestExecution_Mocked_Warm_Instances_Same_Contract_Different_Address(t *test host := parentInstance.Host instance := contextmock.GetMockInstance(host) - vmhooks.WithFaultAndHost(host, vmhost.ErrNotEnoughGas, true) + vmhooks.FailExecution(host, vmhost.ErrNotEnoughGas) childInput := test.DefaultTestContractCallInput() childInput.CallerAddr = test.ParentAddress diff --git a/vmhost/hosttest/managedops_test.go b/vmhost/hosttest/managedops_test.go index f5a50a9bb..1339f2fce 100644 --- a/vmhost/hosttest/managedops_test.go +++ b/vmhost/hosttest/managedops_test.go @@ -30,11 +30,11 @@ func TestManaged_SetByteSlice(t *testing.T) { result := vmhooks.ManagedBufferSetByteSliceWithTypedArgs( host, mBuffer, int32(len(prefix)), int32(len(slice)), []byte(data)) if result != 0 { - vmhooks.WithFaultAndHost(host, vmhost.ErrSignalError, true) + vmhooks.FailExecution(host, vmhost.ErrSignalError) } bufferBytes, err := managedType.GetBytes(mBuffer) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) } host.Output().Finish(bufferBytes) return parentInstance @@ -77,11 +77,11 @@ func TestManaged_CopyByteSlice_DifferentBuffer(t *testing.T) { result := vmhooks.ManagedBufferCopyByteSliceWithHost( host, sourceMBuffer, int32(len(prefix)), int32(len(slice)), destMBuffer) if result != 0 { - vmhooks.WithFaultAndHost(host, vmhost.ErrSignalError, true) + vmhooks.FailExecution(host, vmhost.ErrSignalError) } destBytes, err := managedType.GetBytes(destMBuffer) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) } host.Output().Finish(destBytes) return parentInstance @@ -119,11 +119,11 @@ func TestManaged_CopyByteSlice_SameBuffer(t *testing.T) { result := vmhooks.ManagedBufferCopyByteSliceWithHost( host, sourceMBuffer, int32(len(prefix))-deltaForSlice, int32(len(slice)), sourceMBuffer) if result != 0 { - vmhooks.WithFaultAndHost(host, vmhost.ErrSignalError, true) + vmhooks.FailExecution(host, vmhost.ErrSignalError) } destBytes, err := managedType.GetBytes(sourceMBuffer) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) } host.Output().Finish(destBytes) return parentInstance diff --git a/vmhost/hosttest/wasmer_test.go b/vmhost/hosttest/wasmer_test.go index 26d5d27f9..f081b6425 100644 --- a/vmhost/hosttest/wasmer_test.go +++ b/vmhost/hosttest/wasmer_test.go @@ -9,7 +9,6 @@ import ( contextmock "github.com/multiversx/mx-chain-vm-go/mock/context" test "github.com/multiversx/mx-chain-vm-go/testcommon" "github.com/multiversx/mx-chain-vm-go/vmhost" - "github.com/multiversx/mx-chain-vm-go/vmhost/contexts" "github.com/multiversx/mx-chain-vm-go/wasmer2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -241,10 +240,6 @@ func TestWASMMemories_MultipleMemories(t *testing.T) { } func TestWASMMemories_ResetContent(t *testing.T) { - if !contexts.WarmInstancesEnabled { - t.Skip("test only relevant with warm instances") - } - testCase := test.BuildInstanceCallTest(t). WithContracts( test.CreateInstanceContract(test.ParentAddress). @@ -271,10 +266,6 @@ func TestWASMMemories_ResetContent(t *testing.T) { } func TestWASMMemories_ResetDataInitializers(t *testing.T) { - if !contexts.WarmInstancesEnabled { - t.Skip("test only relevant with warm instances") - } - testCase := test.BuildInstanceCallTest(t). WithContracts( test.CreateInstanceContract(test.ParentAddress). diff --git a/vmhost/interface.go b/vmhost/interface.go index ae122cea0..fa74ff916 100644 --- a/vmhost/interface.go +++ b/vmhost/interface.go @@ -148,13 +148,6 @@ type RuntimeContext interface { CallSCFunction(functionName string) error GetPointsUsed() uint64 SetPointsUsed(gasPoints uint64) - BaseOpsErrorShouldFailExecution() bool - SyncExecAPIErrorShouldFailExecution() bool - CryptoAPIErrorShouldFailExecution() bool - BigIntAPIErrorShouldFailExecution() bool - BigFloatAPIErrorShouldFailExecution() bool - ManagedBufferAPIErrorShouldFailExecution() bool - ManagedMapAPIErrorShouldFailExecution() bool UseGasBoundedShouldFailExecution() bool CleanInstance() @@ -162,7 +155,7 @@ type RuntimeContext interface { GetAllErrors() error ValidateCallbackName(callbackName string) error - + IsReservedFunctionName(functionName string) bool HasFunction(functionName string) bool diff --git a/vmhost/vmhooks/baseOps.go b/vmhost/vmhooks/baseOps.go index ba9efeb39..72547da21 100644 --- a/vmhost/vmhooks/baseOps.go +++ b/vmhost/vmhooks/baseOps.go @@ -114,7 +114,7 @@ var logEEI = logger.GetOrCreate("vm/eei") func getESDTTransferFromInputFailIfWrongIndex(host vmhost.VMHost, index int32) *vmcommon.ESDTTransfer { esdtTransfers := host.Runtime().GetVMInput().ESDTTransfers if int32(len(esdtTransfers))-1 < index || index < 0 { - WithFaultAndHost(host, vmhost.ErrInvalidTokenIndex, host.Runtime().BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrInvalidTokenIndex) return nil } return esdtTransfers[index] @@ -123,7 +123,8 @@ func getESDTTransferFromInputFailIfWrongIndex(host vmhost.VMHost, index int32) * func failIfMoreThanOneESDTTransfer(context *VMHooksImpl) bool { runtime := context.GetRuntimeContext() if len(runtime.GetVMInput().ESDTTransfers) > 1 { - return context.WithFault(vmhost.ErrTooManyESDTTransfers, true) + FailExecution(context.GetVMHost(), vmhost.ErrTooManyESDTTransfers) + return true } return false } @@ -135,7 +136,8 @@ func (context *VMHooksImpl) GetGasLeft() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetGasLeft err := metering.UseGasBoundedAndAddTracedGas(getGasLeftName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } @@ -150,13 +152,15 @@ func (context *VMHooksImpl) GetSCAddress(resultOffset executor.MemPtr) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetSCAddress err := metering.UseGasBoundedAndAddTracedGas(getSCAddressName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } owner := runtime.GetContextAddress() err = context.MemStore(resultOffset, owner) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } } @@ -165,22 +169,24 @@ func (context *VMHooksImpl) GetSCAddress(resultOffset executor.MemPtr) { // @autogenerate(VMHooks) func (context *VMHooksImpl) GetOwnerAddress(resultOffset executor.MemPtr) { blockchain := context.GetBlockchainContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetOwnerAddress err := metering.UseGasBoundedAndAddTracedGas(getOwnerAddressName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } owner, err := blockchain.GetOwnerAddress() - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = context.MemStore(resultOffset, owner) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } } @@ -189,17 +195,18 @@ func (context *VMHooksImpl) GetOwnerAddress(resultOffset executor.MemPtr) { // @autogenerate(VMHooks) func (context *VMHooksImpl) GetShardOfAddress(addressOffset executor.MemPtr) int32 { blockchain := context.GetBlockchainContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetShardOfAddress err := metering.UseGasBoundedAndAddTracedGas(getShardOfAddressName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } address, err := context.MemLoad(addressOffset, vmhost.AddressLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -210,17 +217,18 @@ func (context *VMHooksImpl) GetShardOfAddress(addressOffset executor.MemPtr) int // @autogenerate(VMHooks) func (context *VMHooksImpl) IsSmartContract(addressOffset executor.MemPtr) int32 { blockchain := context.GetBlockchainContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.IsSmartContract err := metering.UseGasBoundedAndAddTracedGas(isSmartContractName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } address, err := context.MemLoad(addressOffset, vmhost.AddressLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -240,14 +248,17 @@ func (context *VMHooksImpl) SignalError(messageOffset executor.MemPtr, messageLe gasToUse += metering.GasSchedule().BaseOperationCost.PersistPerByte * uint64(messageLength) err := metering.UseGasBounded(gasToUse) - if err != nil && context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return } message, err := context.MemLoad(messageOffset, messageLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } + runtime.SignalUserError(string(message)) } @@ -255,24 +266,26 @@ func (context *VMHooksImpl) SignalError(messageOffset executor.MemPtr, messageLe // @autogenerate(VMHooks) func (context *VMHooksImpl) GetExternalBalance(addressOffset executor.MemPtr, resultOffset executor.MemPtr) { blockchain := context.GetBlockchainContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetExternalBalance err := metering.UseGasBoundedAndAddTracedGas(getExternalBalanceName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } address, err := context.MemLoad(addressOffset, vmhost.AddressLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } balance := blockchain.GetBalance(address) err = context.MemStore(resultOffset, balance) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } } @@ -281,18 +294,19 @@ func (context *VMHooksImpl) GetExternalBalance(addressOffset executor.MemPtr, re // @autogenerate(VMHooks) func (context *VMHooksImpl) GetBlockHash(nonce int64, resultOffset executor.MemPtr) int32 { blockchain := context.GetBlockchainContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockHash err := metering.UseGasBoundedAndAddTracedGas(blockHashName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } hash := blockchain.BlockHash(uint64(nonce)) err = context.MemStore(resultOffset, hash) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -342,17 +356,18 @@ func (context *VMHooksImpl) GetESDTBalance( nonce int64, resultOffset executor.MemPtr, ) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(getESDTBalanceName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } err = context.MemStore(resultOffset, esdtData.Value.Bytes()) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -367,17 +382,17 @@ func (context *VMHooksImpl) GetESDTNFTNameLength( tokenIDLen executor.MemLength, nonce int64, ) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(getESDTNFTNameLengthName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if esdtData == nil || esdtData.TokenMetaData == nil { - context.WithFault(vmhost.ErrNilESDTData, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(context.GetVMHost(), vmhost.ErrNilESDTData) return 0 } @@ -392,17 +407,17 @@ func (context *VMHooksImpl) GetESDTNFTAttributeLength( tokenIDLen executor.MemLength, nonce int64, ) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(getESDTNFTAttributeLengthName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if esdtData == nil || esdtData.TokenMetaData == nil { - context.WithFault(vmhost.ErrNilESDTData, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(context.GetVMHost(), vmhost.ErrNilESDTData) return 0 } @@ -417,17 +432,17 @@ func (context *VMHooksImpl) GetESDTNFTURILength( tokenIDLen executor.MemLength, nonce int64, ) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(getESDTNFTURILengthName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if esdtData == nil || esdtData.TokenMetaData == nil { - context.WithFault(vmhost.ErrNilESDTData, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(context.GetVMHost(), vmhost.ErrNilESDTData) return 0 } if len(esdtData.TokenMetaData.URIs) == 0 { @@ -454,13 +469,13 @@ func (context *VMHooksImpl) GetESDTTokenData( urisOffset executor.MemPtr, ) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(getESDTTokenDataName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -468,25 +483,30 @@ func (context *VMHooksImpl) GetESDTTokenData( value.Set(esdtData.Value) err = context.MemStore(propertiesOffset, esdtData.Properties) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if esdtData.TokenMetaData != nil { err = context.MemStore(hashOffset, esdtData.TokenMetaData.Hash) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } err = context.MemStore(nameOffset, esdtData.TokenMetaData.Name) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } err = context.MemStore(attributesOffset, esdtData.TokenMetaData.Attributes) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } err = context.MemStore(creatorOffset, esdtData.TokenMetaData.Creator) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -495,7 +515,8 @@ func (context *VMHooksImpl) GetESDTTokenData( if len(esdtData.TokenMetaData.URIs) > 0 { err = context.MemStore(urisOffset, esdtData.TokenMetaData.URIs[0]) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } } @@ -507,12 +528,12 @@ func (context *VMHooksImpl) GetESDTTokenData( // @autogenerate(VMHooks) func (context *VMHooksImpl) GetESDTLocalRoles(tokenIdHandle int32) int64 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() tokenID, err := managedType.GetBytes(tokenIdHandle) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -520,7 +541,8 @@ func (context *VMHooksImpl) GetESDTLocalRoles(tokenIdHandle int32) int64 { key := []byte(string(esdtRoleKeyPrefix) + string(tokenID)) data, trieDepth, usedCache, err := storage.GetStorage(key) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -529,7 +551,8 @@ func (context *VMHooksImpl) GetESDTLocalRoles(tokenIdHandle int32) int64 { int64(trieDepth), metering.GasSchedule().BaseOpsAPICost.StorageLoad, usedCache) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -543,17 +566,18 @@ func (context *VMHooksImpl) ValidateTokenIdentifier( tokenIdHandle int32, ) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetArgument err := metering.UseGasBoundedAndAddTracedGas(validateTokenIdentifierName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } tokenID, err := managedType.GetBytes(tokenIdHandle) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -581,39 +605,45 @@ func (context *VMHooksImpl) TransferValue( gasToUse := metering.GasSchedule().BaseOpsAPICost.TransferValue err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return 1 } sender := runtime.GetContextAddress() dest, err := context.MemLoad(destOffset, vmhost.AddressLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } valueBytes, err := context.MemLoad(valueOffset, vmhost.BalanceLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.PersistPerByte, uint64(length)) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return 1 } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } if host.IsBuiltinFunctionCall(data) { - context.WithFault(vmhost.ErrTransferValueOnESDTCall, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrTransferValueOnESDTCall) return 1 } err = output.Transfer(dest, sender, 0, 0, big.NewInt(0).SetBytes(valueBytes), nil, data, vm.DirectCall) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -775,13 +805,15 @@ func (context *VMHooksImpl) TransferValueExecuteWithHost( gasToUse := metering.GasSchedule().BaseOpsAPICost.TransferValue err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return 1 } callArgs, err := context.extractIndirectContractCallArgumentsWithValue( host, destOffset, valueOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -810,7 +842,9 @@ func TransferValueExecuteWithTypedArgs( gasToUse := metering.GasSchedule().BaseOpsAPICost.TransferValue err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -829,14 +863,15 @@ func TransferValueExecuteWithTypedArgs( gasToUse, false, ) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } } if contractCallInput != nil { if host.IsBuiltinFunctionName(contractCallInput.Function) { - WithFaultAndHost(host, vmhost.ErrNilESDTData, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrNilESDTData) return 1 } } @@ -846,7 +881,7 @@ func TransferValueExecuteWithTypedArgs( vmOutput, err := executeOnDestContextFromAPI(host, contractCallInput) if err != nil { logEEI.Trace("eGLD pre-transfer execution failed", "error", err) - WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return 1 } host.CompleteLogEntriesWithCallType(vmOutput, vmhost.TransferAndExecuteString) @@ -860,12 +895,14 @@ func TransferValueExecuteWithTypedArgs( } err = metering.UseGasBounded(uint64(gasLimit)) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } err = output.Transfer(dest, sender, uint64(gasLimit), 0, value, nil, []byte(data), vm.DirectCall) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -953,19 +990,21 @@ func (context *VMHooksImpl) MultiTransferESDTNFTExecute( metering.StartGasTracing(multiTransferESDTNFTExecuteName) if numTokenTransfers == 0 { - _ = WithFaultAndHost(host, vmhost.ErrFailedTransfer, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrFailedTransfer) return 1 } callArgs, err := context.extractIndirectContractCallArgumentsWithoutValue( host, destOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } gasToUse := math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(callArgs.actualLen)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -976,13 +1015,15 @@ func (context *VMHooksImpl) MultiTransferESDTNFTExecute( tokenTransferDataOffset, ) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -1030,19 +1071,22 @@ func (context *VMHooksImpl) TransferESDTNFTExecuteWithHost( metering := host.Metering() tokenIdentifier, executeErr := context.MemLoad(tokenIDOffset, tokenIDLen) - if WithFaultAndHost(host, executeErr, runtime.BaseOpsErrorShouldFailExecution()) { + if executeErr != nil { + FailExecution(host, executeErr) return 1 } callArgs, err := context.extractIndirectContractCallArgumentsWithValue( host, destOffset, valueOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } gasToUse := math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(callArgs.actualLen)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -1083,7 +1127,8 @@ func TransferESDTNFTExecuteWithTypedArgs( gasToUse := metering.GasSchedule().BaseOpsAPICost.TransferValue * uint64(len(transfers)) err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -1102,7 +1147,8 @@ func TransferESDTNFTExecuteWithTypedArgs( gasToUse, false, ) - if WithFaultAndHost(host, executeErr, runtime.SyncExecAPIErrorShouldFailExecution()) { + if executeErr != nil { + FailExecution(host, executeErr) return 1 } @@ -1120,7 +1166,8 @@ func TransferESDTNFTExecuteWithTypedArgs( SenderForExec: sender, } gasLimitForExec, executeErr := output.TransferESDT(transfersArgs, contractCallInput) - if WithFaultAndHost(host, executeErr, runtime.BaseOpsErrorShouldFailExecution()) { + if executeErr != nil { + FailExecution(host, executeErr) return 1 } @@ -1132,7 +1179,7 @@ func TransferESDTNFTExecuteWithTypedArgs( if executeErr != nil { logEEI.Trace("ESDT post-transfer execution failed", "error", executeErr) host.Blockchain().RevertToSnapshot(snapshotBeforeTransfer) - WithFaultAndHost(host, executeErr, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, executeErr) return 1 } @@ -1162,7 +1209,8 @@ func TransferESDTNFTExecuteByUserWithTypedArgs( gasToUse := metering.GasSchedule().BaseOpsAPICost.TransferValue * uint64(len(transfers)) err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.SyncExecAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -1181,7 +1229,8 @@ func TransferESDTNFTExecuteByUserWithTypedArgs( gasToUse, false, ) - if WithFaultAndHost(host, executeErr, runtime.SyncExecAPIErrorShouldFailExecution()) { + if executeErr != nil { + FailExecution(host, executeErr) return 1 } @@ -1197,7 +1246,8 @@ func TransferESDTNFTExecuteByUserWithTypedArgs( SenderForExec: callerForExecution, } gasLimitForExec, executeErr := output.TransferESDT(transfersArgs, contractCallInput) - if WithFaultAndHost(host, executeErr, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, executeErr) return 1 } @@ -1219,7 +1269,8 @@ func TransferESDTNFTExecuteByUserWithTypedArgs( ReturnAfterError: true, } _, executeErr = output.TransferESDT(returnTransferArgs, nil) - if WithFaultAndHost(host, executeErr, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, executeErr) return 1 } @@ -1274,30 +1325,34 @@ func (context *VMHooksImpl) CreateAsyncCallWithHost(host vmhost.VMHost, gas int64, extraGasForCallback int64, ) int32 { - runtime := host.Runtime() calledSCAddress, err := context.MemLoad(destOffset, vmhost.AddressLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } data, err := context.MemLoad(dataOffset, dataLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } successFunc, err := context.MemLoad(successOffset, successLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } errorFunc, err := context.MemLoad(errorOffset, errorLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -1331,7 +1386,8 @@ func CreateAsyncCallWithTypedArgs(host vmhost.VMHost, gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateAsyncCall err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -1350,13 +1406,15 @@ func CreateAsyncCallWithTypedArgs(host vmhost.VMHost, if asyncCall.HasDefinedAnyCallback() { gasToUse = metering.GasSchedule().BaseOpsAPICost.SetAsyncCallback err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } } err = async.RegisterAsyncCall("", asyncCall) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -1380,17 +1438,20 @@ func (context *VMHooksImpl) SetAsyncContextCallback( gasToUse := metering.GasSchedule().BaseOpsAPICost.SetAsyncContextCallback err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } callbackNameBytes, err := context.MemLoad(callback, callbackLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } dataBytes, err := context.MemLoad(data, dataLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -1398,7 +1459,8 @@ func (context *VMHooksImpl) SetAsyncContextCallback( string(callbackNameBytes), dataBytes, uint64(gas)) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -1426,22 +1488,26 @@ func (context *VMHooksImpl) UpgradeContract( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } code, err := context.MemLoad(codeOffset, length) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } codeMetadata, err := context.MemLoad(codeMetadataOffset, vmhost.CodeMetadataLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -1451,29 +1517,34 @@ func (context *VMHooksImpl) UpgradeContract( argumentsLengthOffset, dataOffset, ) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } calledSCAddress, err := context.MemLoad(destOffset, vmhost.AddressLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } gasSchedule := metering.GasSchedule() gasToUse = math.MulUint64(gasSchedule.BaseOperationCost.DataCopyPerByte, uint64(length)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } @@ -1499,22 +1570,26 @@ func (context *VMHooksImpl) UpgradeFromSourceContract( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } sourceContractAddress, err := context.MemLoad(sourceContractAddressOffset, vmhost.AddressLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } codeMetadata, err := context.MemLoad(codeMetadataOffset, vmhost.CodeMetadataLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -1524,22 +1599,26 @@ func (context *VMHooksImpl) UpgradeFromSourceContract( argumentsLengthOffset, dataOffset, ) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } calledSCAddress, err := context.MemLoad(destOffset, vmhost.AddressLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -1564,11 +1643,11 @@ func UpgradeFromSourceContractWithTypedArgs( gasLimit int64, codeMetadata []byte, ) { - runtime := host.Runtime() blockchain := host.Blockchain() code, err := blockchain.GetCode(sourceContractAddress) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -1615,7 +1694,8 @@ func upgradeContract( runtime.SetRuntimeBreakpointValue(vmhost.BreakpointOutOfGas) return } - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } } @@ -1636,7 +1716,8 @@ func (context *VMHooksImpl) DeleteContract( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } @@ -1646,22 +1727,26 @@ func (context *VMHooksImpl) DeleteContract( argumentsLengthOffset, dataOffset, ) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } calledSCAddress, err := context.MemLoad(destOffset, vmhost.AddressLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -1707,7 +1792,8 @@ func deleteContract( runtime.SetRuntimeBreakpointValue(vmhost.BreakpointOutOfGas) return } - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } } @@ -1729,28 +1815,33 @@ func (context *VMHooksImpl) AsyncCall( gasSchedule := metering.GasSchedule() gasToUse := gasSchedule.BaseOpsAPICost.AsyncCallStep err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } calledSCAddress, err := context.MemLoad(destOffset, vmhost.AddressLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } gasToUse = math.MulUint64(gasSchedule.BaseOperationCost.DataCopyPerByte, uint64(length)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -1759,7 +1850,8 @@ func (context *VMHooksImpl) AsyncCall( runtime.SetRuntimeBreakpointValue(vmhost.BreakpointOutOfGas) return } - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } } @@ -1772,13 +1864,14 @@ func (context *VMHooksImpl) GetArgumentLength(id int32) int32 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetArgument err := metering.UseGasBoundedAndAddTracedGas(getArgumentLengthName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } args := runtime.Arguments() if id < 0 || int32(len(args)) <= id { - context.WithFault(vmhost.ErrInvalidArgument, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrInvalidArgument) return -1 } @@ -1793,18 +1886,20 @@ func (context *VMHooksImpl) GetArgument(id int32, argOffset executor.MemPtr) int gasToUse := metering.GasSchedule().BaseOpsAPICost.GetArgument err := metering.UseGasBoundedAndAddTracedGas(getArgumentName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } args := runtime.Arguments() if id < 0 || int32(len(args)) <= id { - context.WithFault(vmhost.ErrInvalidArgument, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrInvalidArgument) return -1 } err = context.MemStore(argOffset, args[id]) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -1819,13 +1914,15 @@ func (context *VMHooksImpl) GetFunction(functionOffset executor.MemPtr) int32 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetFunction err := metering.UseGasBoundedAndAddTracedGas(getFunctionName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } function := runtime.FunctionName() err = context.MemStore(functionOffset, []byte(function)) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -1840,7 +1937,8 @@ func (context *VMHooksImpl) GetNumArguments() int32 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetNumArguments err := metering.UseGasBoundedAndAddTracedGas(getNumArgumentsName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -1874,15 +1972,15 @@ func (context *VMHooksImpl) StorageStoreWithHost( dataOffset executor.MemPtr, dataLength executor.MemLength) int32 { - runtime := host.Runtime() - key, err := context.MemLoad(keyOffset, keyLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } data, err := context.MemLoad(dataOffset, dataLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1891,18 +1989,19 @@ func (context *VMHooksImpl) StorageStoreWithHost( // StorageStoreWithTypedArgs - storageStore with args already read from memory func StorageStoreWithTypedArgs(host vmhost.VMHost, key []byte, data []byte) int32 { - runtime := host.Runtime() storage := host.Storage() metering := host.Metering() gasToUse := metering.GasSchedule().BaseOpsAPICost.StorageStore err := metering.UseGasBoundedAndAddTracedGas(storageStoreName, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } storageStatus, err := storage.SetStorage(key, data) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1912,17 +2011,18 @@ func StorageStoreWithTypedArgs(host vmhost.VMHost, key []byte, data []byte) int3 // StorageLoadLength VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) StorageLoadLength(keyOffset executor.MemPtr, keyLength executor.MemLength) int32 { - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } data, trieDepth, usedCache, err := storage.GetStorageUnmetered(key) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -1931,7 +2031,8 @@ func (context *VMHooksImpl) StorageLoadLength(keyOffset executor.MemPtr, keyLeng int64(trieDepth), metering.GasSchedule().BaseOpsAPICost.StorageLoad, usedCache) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -1964,25 +2065,27 @@ func (context *VMHooksImpl) StorageLoadFromAddressWithHost( keyLength executor.MemLength, dataOffset executor.MemPtr) int32 { - runtime := host.Runtime() - key, err := context.MemLoad(keyOffset, keyLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } address, err := context.MemLoad(addressOffset, vmhost.AddressLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } data, err := StorageLoadFromAddressWithTypedArgs(host, address, key) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } err = context.MemStore(dataOffset, data) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -2023,20 +2126,22 @@ func (context *VMHooksImpl) StorageLoad(keyOffset executor.MemPtr, keyLength exe // StorageLoadWithHost - storageLoad with host instead of pointer context func (context *VMHooksImpl) StorageLoadWithHost(host vmhost.VMHost, keyOffset executor.MemPtr, keyLength executor.MemLength, dataOffset executor.MemPtr) int32 { - runtime := host.Runtime() key, err := context.MemLoad(keyOffset, keyLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } data, err := StorageLoadWithWithTypedArgs(host, key) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } err = context.MemStore(dataOffset, data) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -2078,17 +2183,18 @@ func (context *VMHooksImpl) SetStorageLock(keyOffset executor.MemPtr, keyLength // SetStorageLockWithHost - setStorageLock with host instead of pointer context func (context *VMHooksImpl) SetStorageLockWithHost(host vmhost.VMHost, keyOffset executor.MemPtr, keyLength executor.MemLength, lockTimestamp int64) int32 { - runtime := host.Runtime() metering := host.Metering() gasToUse := metering.GasSchedule().BaseOpsAPICost.Int64StorageStore err := metering.UseGasBoundedAndAddTracedGas(setStorageLockName, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } key, err := context.MemLoad(keyOffset, keyLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -2097,13 +2203,13 @@ func (context *VMHooksImpl) SetStorageLockWithHost(host vmhost.VMHost, keyOffset // SetStorageLockWithTypedArgs - setStorageLock with args already read from memory func SetStorageLockWithTypedArgs(host vmhost.VMHost, key []byte, lockTimestamp int64) int32 { - runtime := host.Runtime() storage := host.Storage() timeLockKeyPrefix := string(storage.GetVmProtectedPrefix(vmhost.TimeLockKeyPrefix)) timeLockKey := vmhost.CustomStorageKey(timeLockKeyPrefix, key) bigTimestamp := big.NewInt(0).SetInt64(lockTimestamp) storageStatus, err := storage.SetProtectedStorage(timeLockKey, bigTimestamp.Bytes()) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } return int32(storageStatus) @@ -2112,18 +2218,19 @@ func SetStorageLockWithTypedArgs(host vmhost.VMHost, key []byte, lockTimestamp i // GetStorageLock VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetStorageLock(keyOffset executor.MemPtr, keyLength executor.MemLength) int64 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() storage := context.GetStorageContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.StorageLoad err := metering.UseGasBoundedAndAddTracedGas(getStorageLockName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2131,7 +2238,8 @@ func (context *VMHooksImpl) GetStorageLock(keyOffset executor.MemPtr, keyLength timeLockKey := vmhost.CustomStorageKey(timeLockKeyPrefix, key) data, trieDepth, usedCache, err := storage.GetStorage(timeLockKey) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2140,7 +2248,8 @@ func (context *VMHooksImpl) GetStorageLock(keyOffset executor.MemPtr, keyLength int64(trieDepth), metering.GasSchedule().BaseOpsAPICost.StorageLoad, usedCache) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2181,14 +2290,16 @@ func (context *VMHooksImpl) GetCaller(resultOffset executor.MemPtr) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCaller err := metering.UseGasBoundedAndAddTracedGas(getCallerName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } caller := runtime.GetVMInput().CallerAddr err = context.MemStore(resultOffset, caller) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } } @@ -2201,17 +2312,18 @@ func (context *VMHooksImpl) CheckNoPayment() { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(checkNoPaymentName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } vmInput := runtime.GetVMInput() if vmInput.CallValue.Sign() > 0 { - _ = context.WithFault(vmhost.ErrNonPayableFunctionEgld, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNonPayableFunctionEgld) return } if len(vmInput.ESDTTransfers) > 0 { - _ = context.WithFault(vmhost.ErrNonPayableFunctionEsdt, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNonPayableFunctionEsdt) return } } @@ -2224,7 +2336,8 @@ func (context *VMHooksImpl) GetCallValue(resultOffset executor.MemPtr) int32 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(callValueName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2232,7 +2345,8 @@ func (context *VMHooksImpl) GetCallValue(resultOffset executor.MemPtr) int32 { value = vmhost.PadBytesLeft(value, vmhost.BalanceLen) err = context.MemStore(resultOffset, value) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2252,12 +2366,12 @@ func (context *VMHooksImpl) GetESDTValue(resultOffset executor.MemPtr) int32 { // GetESDTValueByIndex VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetESDTValueByIndex(resultOffset executor.MemPtr, index int32) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(getESDTValueByIndexName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2270,7 +2384,8 @@ func (context *VMHooksImpl) GetESDTValueByIndex(resultOffset executor.MemPtr, in } err = context.MemStore(resultOffset, value) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2290,12 +2405,12 @@ func (context *VMHooksImpl) GetESDTTokenName(resultOffset executor.MemPtr) int32 // GetESDTTokenNameByIndex VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetESDTTokenNameByIndex(resultOffset executor.MemPtr, index int32) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(getESDTTokenNameByIndexName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2306,7 +2421,8 @@ func (context *VMHooksImpl) GetESDTTokenNameByIndex(resultOffset executor.MemPtr } err = context.MemStore(resultOffset, tokenName) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2330,7 +2446,8 @@ func (context *VMHooksImpl) GetESDTTokenNonceByIndex(index int32) int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(getESDTTokenNonceByIndexName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2349,23 +2466,25 @@ func (context *VMHooksImpl) GetCurrentESDTNFTNonce( tokenIDOffset executor.MemPtr, tokenIDLen executor.MemLength) int64 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() storage := context.GetStorageContext() destination, err := context.MemLoad(addressOffset, vmhost.AddressLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } tokenID, err := context.MemLoad(tokenIDOffset, tokenIDLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } key := []byte(core.ProtectedKeyPrefix + core.ESDTNFTLatestNonceIdentifier + string(tokenID)) data, trieDepth, _, err := storage.GetStorageFromAddress(destination, key) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } @@ -2374,7 +2493,8 @@ func (context *VMHooksImpl) GetCurrentESDTNFTNonce( int64(trieDepth), metering.GasSchedule().BaseOpsAPICost.StorageLoad, false) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } @@ -2399,7 +2519,8 @@ func (context *VMHooksImpl) GetESDTTokenTypeByIndex(index int32) int32 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(getESDTTokenTypeByIndexName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2418,7 +2539,8 @@ func (context *VMHooksImpl) GetNumESDTTransfers() int32 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(getNumESDTTransfersName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2447,7 +2569,8 @@ func (context *VMHooksImpl) GetCallValueTokenNameByIndex( gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(getCallValueTokenNameByIndexName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2463,12 +2586,14 @@ func (context *VMHooksImpl) GetCallValueTokenNameByIndex( callValue = vmhost.PadBytesLeft(callValue, vmhost.BalanceLen) err = context.MemStore(tokenNameOffset, tokenName) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } err = context.MemStore(callValueOffset, callValue) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2485,12 +2610,14 @@ func (context *VMHooksImpl) IsReservedFunctionName(nameHandle int32) int32 { gasToUse := metering.GasSchedule().BaseOpsAPICost.IsReservedFunctionName err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } name, err := managedTypes.GetBytes(nameHandle) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2520,24 +2647,27 @@ func (context *VMHooksImpl) WriteLog( if numTopics < 0 || dataLength < 0 { err := vmhost.ErrNegativeLength - context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(err) return } err := metering.UseGasBoundedAndAddTracedGas(writeLogName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } log, err := context.MemLoad(dataPointer, dataLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } topics := make([][]byte, numTopics) for i := int32(0); i < numTopics; i++ { topics[i], err = context.MemLoad(topicPtr.Offset(i*vmhost.HashLen), vmhost.HashLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } } @@ -2566,12 +2696,14 @@ func (context *VMHooksImpl) WriteEventLog( topicLengthsOffset, topicOffset, ) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } data, err := context.MemLoad(dataOffset, dataLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -2581,7 +2713,8 @@ func (context *VMHooksImpl) WriteEventLog( uint64(topicDataTotalLen+dataLength)) gasToUse = math.AddUint64(gasToUse, gasForData) err = metering.UseGasBoundedAndAddTracedGas(writeEventLogName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -2596,7 +2729,8 @@ func (context *VMHooksImpl) GetBlockTimestamp() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockTimeStamp err := metering.UseGasBoundedAndAddTracedGas(getBlockTimestampName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2611,7 +2745,8 @@ func (context *VMHooksImpl) GetBlockNonce() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockNonce err := metering.UseGasBoundedAndAddTracedGas(getBlockNonceName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2626,7 +2761,8 @@ func (context *VMHooksImpl) GetBlockRound() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockRound err := metering.UseGasBoundedAndAddTracedGas(getBlockRoundName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2641,7 +2777,8 @@ func (context *VMHooksImpl) GetBlockEpoch() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockEpoch err := metering.UseGasBoundedAndAddTracedGas(getBlockEpochName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2651,37 +2788,41 @@ func (context *VMHooksImpl) GetBlockEpoch() int64 { // GetBlockRandomSeed VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetBlockRandomSeed(pointer executor.MemPtr) { - runtime := context.GetRuntimeContext() blockchain := context.GetBlockchainContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockRandomSeed err := metering.UseGasBoundedAndAddTracedGas(getBlockRandomSeedName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } randomSeed := blockchain.CurrentRandomSeed() err = context.MemStore(pointer, randomSeed) - context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) + if err != nil { + context.FailExecution(err) + } } // GetStateRootHash VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetStateRootHash(pointer executor.MemPtr) { - runtime := context.GetRuntimeContext() blockchain := context.GetBlockchainContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetStateRootHash err := metering.UseGasBoundedAndAddTracedGas(getStateRootHashName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } stateRootHash := blockchain.GetStateRootHash() err = context.MemStore(pointer, stateRootHash) - context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) + if err != nil { + context.FailExecution(err) + } } // GetPrevBlockTimestamp VMHooks implementation. @@ -2692,7 +2833,8 @@ func (context *VMHooksImpl) GetPrevBlockTimestamp() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockTimeStamp err := metering.UseGasBoundedAndAddTracedGas(getPrevBlockTimestampName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2707,7 +2849,8 @@ func (context *VMHooksImpl) GetPrevBlockNonce() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockNonce err := metering.UseGasBoundedAndAddTracedGas(getPrevBlockNonceName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2722,7 +2865,8 @@ func (context *VMHooksImpl) GetPrevBlockRound() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockRound err := metering.UseGasBoundedAndAddTracedGas(getPrevBlockRoundName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2737,7 +2881,8 @@ func (context *VMHooksImpl) GetPrevBlockEpoch() int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockEpoch err := metering.UseGasBoundedAndAddTracedGas(getPrevBlockEpochName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -2747,25 +2892,26 @@ func (context *VMHooksImpl) GetPrevBlockEpoch() int64 { // GetPrevBlockRandomSeed VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetPrevBlockRandomSeed(pointer executor.MemPtr) { - runtime := context.GetRuntimeContext() blockchain := context.GetBlockchainContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockRandomSeed err := metering.UseGasBoundedAndAddTracedGas(getPrevBlockRandomSeedName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } randomSeed := blockchain.LastRandomSeed() err = context.MemStore(pointer, randomSeed) - context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) + if err != nil { + context.FailExecution(err) + } } // Finish VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) Finish(pointer executor.MemPtr, length executor.MemLength) { - runtime := context.GetRuntimeContext() output := context.GetOutputContext() metering := context.GetMeteringContext() metering.StartGasTracing(returnDataName) @@ -2775,12 +2921,13 @@ func (context *VMHooksImpl) Finish(pointer executor.MemPtr, length executor.MemL gasToUse = math.AddUint64(gasToUse, gas) err := metering.UseGasBounded(gasToUse) if err != nil { - _ = context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(err) return } data, err := context.MemLoad(pointer, length) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -2828,11 +2975,11 @@ func (context *VMHooksImpl) ExecuteOnSameContextWithHost( argumentsLengthOffset executor.MemPtr, dataOffset executor.MemPtr, ) int32 { - runtime := host.Runtime() callArgs, err := context.extractIndirectContractCallArgumentsWithValue( host, addressOffset, valueOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -2860,7 +3007,8 @@ func ExecuteOnSameContextWithTypedArgs( gasToUse := metering.GasSchedule().BaseOpsAPICost.ExecuteOnSameContext err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return -1 } @@ -2877,17 +3025,19 @@ func ExecuteOnSameContextWithTypedArgs( gasToUse, true, ) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } if host.IsBuiltinFunctionName(contractCallInput.Function) { - WithFaultAndHost(host, vmhost.ErrInvalidBuiltInFunctionCall, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrInvalidBuiltInFunctionCall) return 1 } err = host.ExecuteOnSameContext(contractCallInput) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -2935,11 +3085,11 @@ func (context *VMHooksImpl) ExecuteOnDestContextWithHost( argumentsLengthOffset executor.MemPtr, dataOffset executor.MemPtr, ) int32 { - runtime := host.Runtime() callArgs, err := context.extractIndirectContractCallArgumentsWithValue( host, addressOffset, valueOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -2967,7 +3117,8 @@ func ExecuteOnDestContextWithTypedArgs( gasToUse := metering.GasSchedule().BaseOpsAPICost.ExecuteOnDestContext err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return -1 } @@ -2984,12 +3135,14 @@ func ExecuteOnDestContextWithTypedArgs( gasToUse, true, ) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } vmOutput, err := executeOnDestContextFromAPI(host, contractCallInput) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -3036,11 +3189,11 @@ func (context *VMHooksImpl) ExecuteReadOnlyWithHost( argumentsLengthOffset executor.MemPtr, dataOffset executor.MemPtr, ) int32 { - runtime := host.Runtime() callArgs, err := context.extractIndirectContractCallArgumentsWithoutValue( host, addressOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -3066,7 +3219,8 @@ func ExecuteReadOnlyWithTypedArguments( gasToUse := metering.GasSchedule().BaseOpsAPICost.ExecuteReadOnly err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -3083,12 +3237,13 @@ func ExecuteReadOnlyWithTypedArguments( gasToUse, true, ) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } if host.IsBuiltinFunctionName(contractCallInput.Function) { - WithFaultAndHost(host, vmhost.ErrInvalidBuiltInFunctionCall, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrInvalidBuiltInFunctionCall) return 1 } @@ -3097,7 +3252,8 @@ func ExecuteReadOnlyWithTypedArguments( _, err = executeOnDestContextFromAPI(host, contractCallInput) runtime.SetReadOnly(wasReadOnly) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -3151,23 +3307,27 @@ func (context *VMHooksImpl) createContractWithHost( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return -1 } sender := runtime.GetContextAddress() value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } code, err := context.MemLoad(codeOffset, length) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } codeMetadata, err := context.MemLoad(codeMetadataOffset, vmhost.CodeMetadataLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -3177,25 +3337,29 @@ func (context *VMHooksImpl) createContractWithHost( argumentsLengthOffset, dataOffset, ) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } valueAsInt := big.NewInt(0).SetBytes(value) newAddress, err := createContract(sender, data, valueAsInt, gasLimit, code, codeMetadata, host, CreateContract) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = context.MemStore(resultOffset, newAddress) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -3221,22 +3385,26 @@ func (context *VMHooksImpl) DeployFromSourceContract( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } sourceContractAddress, err := context.MemLoad(sourceContractAddressOffset, vmhost.AddressLen) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } codeMetadata, err := context.MemLoad(codeMetadataOffset, vmhost.CodeMetadataLen) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -3246,13 +3414,15 @@ func (context *VMHooksImpl) DeployFromSourceContract( argumentsLengthOffset, dataOffset, ) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -3265,12 +3435,14 @@ func (context *VMHooksImpl) DeployFromSourceContract( gasLimit, ) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = context.MemStore(resultAddressOffset, newAddress) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -3291,7 +3463,8 @@ func DeployFromSourceContractWithTypedArgs( blockchain := host.Blockchain() code, err := blockchain.GetCode(sourceContractAddress) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return nil, err } @@ -3340,7 +3513,8 @@ func (context *VMHooksImpl) GetNumReturnData() int32 { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetNumReturnData err := metering.UseGasBoundedAndAddTracedGas(getNumReturnDataName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -3351,19 +3525,19 @@ func (context *VMHooksImpl) GetNumReturnData() int32 { // GetReturnDataSize VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetReturnDataSize(resultID int32) int32 { - runtime := context.GetRuntimeContext() output := context.GetOutputContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetReturnDataSize err := metering.UseGasBoundedAndAddTracedGas(getReturnDataSizeName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } returnData := output.ReturnData() if resultID >= int32(len(returnData)) || resultID < 0 { - context.WithFault(vmhost.ErrInvalidArgument, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrInvalidArgument) return 0 } @@ -3380,9 +3554,9 @@ func (context *VMHooksImpl) GetReturnData(resultID int32, dataOffset executor.Me return 0 } - runtime := context.GetRuntimeContext() err := context.MemStore(dataOffset, result) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } @@ -3395,13 +3569,14 @@ func GetReturnDataWithHostAndTypedArgs(host vmhost.VMHost, resultID int32) []byt gasToUse := metering.GasSchedule().BaseOpsAPICost.GetReturnData err := metering.UseGasBoundedAndAddTracedGas(getReturnDataName, gasToUse) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return nil } returnData := output.ReturnData() if resultID >= int32(len(returnData)) || resultID < 0 { - WithFaultAndHost(host, vmhost.ErrInvalidArgument, host.Runtime().BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrInvalidArgument) return nil } @@ -3422,7 +3597,8 @@ func CleanReturnDataWithHost(host vmhost.VMHost) { gasToUse := metering.GasSchedule().BaseOpsAPICost.CleanReturnData err := metering.UseGasBoundedAndAddTracedGas(cleanReturnDataName, gasToUse) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -3443,7 +3619,8 @@ func DeleteFromReturnDataWithHost(host vmhost.VMHost, resultID int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.DeleteFromReturnData err := metering.UseGasBoundedAndAddTracedGas(deleteFromReturnDataName, gasToUse) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -3461,12 +3638,15 @@ func (context *VMHooksImpl) GetOriginalTxHash(dataOffset executor.MemPtr) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetOriginalTxHash err := metering.UseGasBoundedAndAddTracedGas(getOriginalTxHashName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = context.MemStore(dataOffset, runtime.GetOriginalTxHash()) - _ = context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) + if err != nil { + context.FailExecution(err) + } } // GetCurrentTxHash VMHooks implementation. @@ -3477,12 +3657,15 @@ func (context *VMHooksImpl) GetCurrentTxHash(dataOffset executor.MemPtr) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCurrentTxHash err := metering.UseGasBoundedAndAddTracedGas(getCurrentTxHashName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = context.MemStore(dataOffset, runtime.GetCurrentTxHash()) - _ = context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) + if err != nil { + context.FailExecution(err) + } } // GetPrevTxHash VMHooks implementation. @@ -3493,12 +3676,15 @@ func (context *VMHooksImpl) GetPrevTxHash(dataOffset executor.MemPtr) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetPrevTxHash err := metering.UseGasBoundedAndAddTracedGas(getPrevTxHashName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = context.MemStore(dataOffset, runtime.GetPrevTxHash()) - _ = context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) + if err != nil { + context.FailExecution(err) + } } func prepareIndirectContractCallInput( diff --git a/vmhost/vmhooks/bigFloatOps.go b/vmhost/vmhooks/bigFloatOps.go index 647bb4f4f..a4555d980 100644 --- a/vmhost/vmhooks/bigFloatOps.go +++ b/vmhost/vmhooks/bigFloatOps.go @@ -44,20 +44,20 @@ func areAllZero(values ...*big.Float) bool { func setResultIfNotInfinity(host vmhost.VMHost, result *big.Float, destinationHandle int32) { managedType := host.ManagedTypes() - runtime := host.Runtime() if result.IsInf() { - _ = WithFaultAndHost(host, vmhost.ErrInfinityFloatOperation, runtime.BigFloatAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrInfinityFloatOperation) return } exponent := result.MantExp(nil) if managedType.BigFloatExpIsNotValid(exponent) { - _ = WithFaultAndHost(host, vmhost.ErrExponentTooBigOrTooSmall, runtime.BigFloatAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrExponentTooBigOrTooSmall) return } dest, err := managedType.GetBigFloatOrCreate(destinationHandle) - if WithFaultAndHost(host, err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -68,17 +68,17 @@ func setResultIfNotInfinity(host vmhost.VMHost, result *big.Float, destinationHa // @autogenerate(VMHooks) func (context *VMHooksImpl) BigFloatNewFromParts(integralPart, fractionalPart, exponent int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatNewFromParts err := metering.UseGasBoundedAndAddTracedGas(bigFloatNewFromPartsName, gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if exponent > 0 { - _ = context.WithFault(vmhost.ErrPositiveExponent, runtime.BigFloatAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrPositiveExponent) return -1 } @@ -89,7 +89,8 @@ func (context *VMHooksImpl) BigFloatNewFromParts(integralPart, fractionalPart, e bigFractionalPart := big.NewFloat(float64(fractionalPart)) bigExponentMultiplier := big.NewFloat(math.Pow10(int(exponent))) bigFractional, err = vmMath.MulBigFloat(bigFractionalPart, bigExponentMultiplier) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } } @@ -97,17 +98,20 @@ func (context *VMHooksImpl) BigFloatNewFromParts(integralPart, fractionalPart, e var value *big.Float if integralPart >= 0 { value, err = vmMath.AddBigFloat(big.NewFloat(float64(integralPart)), bigFractional) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } } else { value, err = vmMath.SubBigFloat(big.NewFloat(float64(integralPart)), bigFractional) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } } handle, err := managedType.PutBigFloat(value) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } return handle @@ -117,28 +121,30 @@ func (context *VMHooksImpl) BigFloatNewFromParts(integralPart, fractionalPart, e // @autogenerate(VMHooks) func (context *VMHooksImpl) BigFloatNewFromFrac(numerator, denominator int64) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatNewFromParts err := metering.UseGasBoundedAndAddTracedGas(bigFloatNewFromFracName, gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if denominator == 0 { - _ = context.WithFault(vmhost.ErrDivZero, runtime.BigFloatAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrDivZero) return -1 } bigNumerator := big.NewFloat(float64(numerator)) bigDenominator := big.NewFloat(float64(denominator)) value, err := vmMath.QuoBigFloat(bigNumerator, bigDenominator) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } handle, err := managedType.PutBigFloat(value) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } return handle @@ -148,22 +154,23 @@ func (context *VMHooksImpl) BigFloatNewFromFrac(numerator, denominator int64) in // @autogenerate(VMHooks) func (context *VMHooksImpl) BigFloatNewFromSci(significand, exponent int64) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatNewFromParts err := metering.UseGasBoundedAndAddTracedGas(bigFloatNewFromSciName, gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if exponent > 0 { - _ = context.WithFault(vmhost.ErrPositiveExponent, runtime.BigFloatAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrPositiveExponent) return -1 } if exponent < -322 { handle, err := managedType.PutBigFloat(big.NewFloat(0)) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } return handle @@ -172,11 +179,13 @@ func (context *VMHooksImpl) BigFloatNewFromSci(significand, exponent int64) int3 bigSignificand := big.NewFloat(float64(significand)) bigExponentMultiplier := big.NewFloat(math.Pow10(int(exponent))) value, err := vmMath.MulBigFloat(bigSignificand, bigExponentMultiplier) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } handle, err := managedType.PutBigFloat(value) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } return handle @@ -187,22 +196,24 @@ func (context *VMHooksImpl) BigFloatNewFromSci(significand, exponent int64) int3 func (context *VMHooksImpl) BigFloatAdd(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatAddName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatAdd err := metering.UseGasBoundedAndAddTracedGas(bigFloatAddName, gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op1, op2, err := managedType.GetTwoBigFloats(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } resultAdd, err := vmMath.AddBigFloat(op1, op2) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -214,22 +225,24 @@ func (context *VMHooksImpl) BigFloatAdd(destinationHandle, op1Handle, op2Handle func (context *VMHooksImpl) BigFloatSub(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatSubName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatSub err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op1, op2, err := managedType.GetTwoBigFloats(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } resultSub, err := vmMath.SubBigFloat(op1, op2) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } setResultIfNotInfinity(context.GetVMHost(), resultSub, destinationHandle) @@ -240,23 +253,25 @@ func (context *VMHooksImpl) BigFloatSub(destinationHandle, op1Handle, op2Handle func (context *VMHooksImpl) BigFloatMul(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatMulName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatMul err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op1, op2, err := managedType.GetTwoBigFloats(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } resultMul, err := vmMath.MulBigFloat(op1, op2) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } setResultIfNotInfinity(context.GetVMHost(), resultMul, destinationHandle) @@ -267,27 +282,29 @@ func (context *VMHooksImpl) BigFloatMul(destinationHandle, op1Handle, op2Handle func (context *VMHooksImpl) BigFloatDiv(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatDivName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatDiv err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op1, op2, err := managedType.GetTwoBigFloats(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if areAllZero(op1, op2) { - _ = context.WithFault(vmhost.ErrAllOperandsAreEqualToZero, runtime.BigFloatAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrAllOperandsAreEqualToZero) return } resultDiv, err := vmMath.QuoBigFloat(op1, op2) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } setResultIfNotInfinity(context.GetVMHost(), resultDiv, destinationHandle) @@ -298,22 +315,24 @@ func (context *VMHooksImpl) BigFloatDiv(destinationHandle, op1Handle, op2Handle func (context *VMHooksImpl) BigFloatNeg(destinationHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatNegName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatNeg err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest, err := managedType.GetBigFloatOrCreate(destinationHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest.Neg(op) @@ -324,22 +343,24 @@ func (context *VMHooksImpl) BigFloatNeg(destinationHandle, opHandle int32) { func (context *VMHooksImpl) BigFloatClone(destinationHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatCloneName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatClone err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest, err := managedType.GetBigFloatOrCreate(destinationHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest.Copy(op) @@ -350,18 +371,19 @@ func (context *VMHooksImpl) BigFloatClone(destinationHandle, opHandle int32) { func (context *VMHooksImpl) BigFloatCmp(op1Handle, op2Handle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatCmpName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatCmp err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } op1, op2, err := managedType.GetTwoBigFloats(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } return int32(op1.Cmp(op2)) @@ -372,22 +394,24 @@ func (context *VMHooksImpl) BigFloatCmp(op1Handle, op2Handle int32) int32 { func (context *VMHooksImpl) BigFloatAbs(destinationHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatAbsName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatAbs err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest, err := managedType.GetBigFloatOrCreate(destinationHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest.Abs(op) @@ -398,16 +422,17 @@ func (context *VMHooksImpl) BigFloatAbs(destinationHandle, opHandle int32) { func (context *VMHooksImpl) BigFloatSign(opHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatAbs err := metering.UseGasBoundedAndAddTracedGas(bigFloatSignName, gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } return int32(op.Sign()) @@ -418,30 +443,33 @@ func (context *VMHooksImpl) BigFloatSign(opHandle int32) int32 { func (context *VMHooksImpl) BigFloatSqrt(destinationHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatSqrtName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatSqrt err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest, err := managedType.GetBigFloatOrCreate(destinationHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if op.Sign() < 0 { - _ = context.WithFault(vmhost.ErrBadLowerBounds, runtime.BigFloatAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBadLowerBounds) return } resultSqrt, err := vmMath.SqrtBigFloat(op) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest.Set(resultSqrt) @@ -452,17 +480,18 @@ func (context *VMHooksImpl) BigFloatSqrt(destinationHandle, opHandle int32) { func (context *VMHooksImpl) BigFloatPow(destinationHandle, opHandle, exponent int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatPowName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatPow err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -476,12 +505,14 @@ func (context *VMHooksImpl) BigFloatPow(destinationHandle, opHandle, exponent in //this calculates the length of the result in bytes lengthOfResult := big.NewInt(0).Div(big.NewInt(0).Mul(op2BigInt, big.NewInt(int64(opBigInt.BitLen()))), big.NewInt(8)) err = managedType.ConsumeGasForThisBigIntNumberOfBytes(lengthOfResult) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } powResult, err := context.pow(op, exponent) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } setResultIfNotInfinity(context.GetVMHost(), powResult, destinationHandle) @@ -511,23 +542,25 @@ func (context *VMHooksImpl) pow(base *big.Float, exp int32) (*big.Float, error) func (context *VMHooksImpl) BigFloatFloor(destBigIntHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatFloorName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatFloor err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } bigIntOp := managedType.GetBigIntOrCreate(destBigIntHandle) err = managedType.ConsumeGasForBigIntCopy(bigIntOp) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -545,23 +578,25 @@ func (context *VMHooksImpl) BigFloatFloor(destBigIntHandle, opHandle int32) { func (context *VMHooksImpl) BigFloatCeil(destBigIntHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatCeilName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatCeil err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } bigIntOp := managedType.GetBigIntOrCreate(destBigIntHandle) err = managedType.ConsumeGasForBigIntCopy(bigIntOp) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -579,23 +614,25 @@ func (context *VMHooksImpl) BigFloatCeil(destBigIntHandle, opHandle int32) { func (context *VMHooksImpl) BigFloatTruncate(destBigIntHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatTruncateName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatTruncate err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } bigIntValue := managedType.GetBigIntOrCreate(destBigIntHandle) err = managedType.ConsumeGasForBigIntCopy(bigIntValue) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -607,16 +644,17 @@ func (context *VMHooksImpl) BigFloatTruncate(destBigIntHandle, opHandle int32) { func (context *VMHooksImpl) BigFloatSetInt64(destinationHandle int32, value int64) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatSetInt64 err := metering.UseGasBoundedAndAddTracedGas(bigFloatSetInt64Name, gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest, err := managedType.GetBigFloatOrCreate(destinationHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest.SetInt64(value) @@ -627,17 +665,18 @@ func (context *VMHooksImpl) BigFloatSetInt64(destinationHandle int32, value int6 func (context *VMHooksImpl) BigFloatIsInt(opHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatIsIntName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatIsInt err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } op, err := managedType.GetBigFloat(opHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if op.IsInt() { @@ -651,22 +690,24 @@ func (context *VMHooksImpl) BigFloatIsInt(opHandle int32) int32 { func (context *VMHooksImpl) BigFloatSetBigInt(destinationHandle, bigIntHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigFloatSetBigIntName) gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatSetBigInt err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } bigIntValue, err := managedType.GetBigInt(bigIntHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(bigIntValue) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -679,16 +720,17 @@ func (context *VMHooksImpl) BigFloatSetBigInt(destinationHandle, bigIntHandle in func (context *VMHooksImpl) BigFloatGetConstPi(destinationHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatGetConst err := metering.UseGasBoundedAndAddTracedGas(bigFloatGetConstPiName, gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } pi, err := managedType.GetBigFloatOrCreate(destinationHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } pi.SetFloat64(math.Pi) @@ -699,16 +741,17 @@ func (context *VMHooksImpl) BigFloatGetConstPi(destinationHandle int32) { func (context *VMHooksImpl) BigFloatGetConstE(destinationHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigFloatAPICost.BigFloatGetConst err := metering.UseGasBoundedAndAddTracedGas(bigFloatGetConstEName, gasToUse) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } e, err := managedType.GetBigFloatOrCreate(destinationHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } e.SetFloat64(math.E) diff --git a/vmhost/vmhooks/bigIntOps.go b/vmhost/vmhooks/bigIntOps.go index e28b5447f..99cebf0c6 100644 --- a/vmhost/vmhooks/bigIntOps.go +++ b/vmhost/vmhooks/bigIntOps.go @@ -63,7 +63,8 @@ func (context *VMHooksImpl) BigIntGetUnsignedArgument(id int32, destinationHandl gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetUnsignedArgument err := metering.UseGasBoundedAndAddTracedGas(bigIntGetUnsignedArgumentName, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -86,7 +87,8 @@ func (context *VMHooksImpl) BigIntGetSignedArgument(id int32, destinationHandle gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetSignedArgument err := metering.UseGasBoundedAndAddTracedGas(bigIntGetSignedArgumentName, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -104,18 +106,19 @@ func (context *VMHooksImpl) BigIntGetSignedArgument(id int32, destinationHandle // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntStorageStoreUnsigned(keyOffset executor.MemPtr, keyLength executor.MemLength, sourceHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntStorageStoreUnsigned err := metering.UseGasBoundedAndAddTracedGas(bigIntStorageStoreUnsignedName, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -123,7 +126,8 @@ func (context *VMHooksImpl) BigIntStorageStoreUnsigned(keyOffset executor.MemPtr bytes := value.Bytes() storageStatus, err := storage.SetStorage(key, bytes) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -134,17 +138,18 @@ func (context *VMHooksImpl) BigIntStorageStoreUnsigned(keyOffset executor.MemPtr // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntStorageLoadUnsigned(keyOffset executor.MemPtr, keyLength executor.MemLength, destinationHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } bytes, trieDepth, usedCache, err := storage.GetStorage(key) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -152,7 +157,8 @@ func (context *VMHooksImpl) BigIntStorageLoadUnsigned(keyOffset executor.MemPtr, int64(trieDepth), metering.GasSchedule().BigIntAPICost.BigIntStorageLoadUnsigned, usedCache) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -171,7 +177,8 @@ func (context *VMHooksImpl) BigIntGetCallValue(destinationHandle int32) { gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetCallValue err := metering.UseGasBoundedAndAddTracedGas(bigIntGetCallValueName, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -197,7 +204,8 @@ func (context *VMHooksImpl) BigIntGetESDTCallValueByIndex(destinationHandle int3 gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetCallValue err := metering.UseGasBoundedAndAddTracedGas(bigIntGetESDTCallValueByIndexName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -214,18 +222,19 @@ func (context *VMHooksImpl) BigIntGetESDTCallValueByIndex(destinationHandle int3 // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntGetExternalBalance(addressOffset executor.MemPtr, result int32) { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() blockchain := context.GetBlockchainContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetExternalBalance err := metering.UseGasBoundedAndAddTracedGas(bigIntGetExternalBalanceName, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } address, err := context.MemLoad(addressOffset, vmhost.AddressLen) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -245,18 +254,19 @@ func (context *VMHooksImpl) BigIntGetESDTExternalBalance( resultHandle int32) { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(bigIntGetESDTExternalBalanceName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetExternalBalance err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if esdtData == nil { @@ -275,7 +285,8 @@ func (context *VMHooksImpl) BigIntNew(smallValue int64) int32 { gasToUse := metering.GasSchedule().BigIntAPICost.BigIntNew err := metering.UseGasBoundedAndAddTracedGas(bigIntNewName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -287,16 +298,17 @@ func (context *VMHooksImpl) BigIntNew(smallValue int64) int32 { func (context *VMHooksImpl) BigIntUnsignedByteLength(referenceHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntUnsignedByteLength err := metering.UseGasBoundedAndAddTracedGas(bigIntUnsignedByteLengthName, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } value, err := managedType.GetBigInt(referenceHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -309,16 +321,17 @@ func (context *VMHooksImpl) BigIntUnsignedByteLength(referenceHandle int32) int3 func (context *VMHooksImpl) BigIntSignedByteLength(referenceHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntSignedByteLength err := metering.UseGasBoundedAndAddTracedGas(bigIntSignedByteLengthName, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } value, err := managedType.GetBigInt(referenceHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -330,30 +343,33 @@ func (context *VMHooksImpl) BigIntSignedByteLength(referenceHandle int32) int32 // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntGetUnsignedBytes(referenceHandle int32, byteOffset executor.MemPtr) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(bigIntGetUnsignedBytesName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetUnsignedBytes err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } value, err := managedType.GetBigInt(referenceHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } bytes := value.Bytes() err = context.MemStore(byteOffset, bytes) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(bytes))) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -364,30 +380,33 @@ func (context *VMHooksImpl) BigIntGetUnsignedBytes(referenceHandle int32, byteOf // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntGetSignedBytes(referenceHandle int32, byteOffset executor.MemPtr) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(bigIntGetSignedBytesName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetSignedBytes err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } value, err := managedType.GetBigInt(referenceHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } bytes := twos.ToBytes(value) err = context.MemStore(byteOffset, bytes) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(bytes))) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -398,24 +417,26 @@ func (context *VMHooksImpl) BigIntGetSignedBytes(referenceHandle int32, byteOffs // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntSetUnsignedBytes(destinationHandle int32, byteOffset executor.MemPtr, byteLength executor.MemLength) { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(bigIntSetUnsignedBytesName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntSetUnsignedBytes err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } bytes, err := context.MemLoad(byteOffset, byteLength) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(bytes))) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -427,24 +448,26 @@ func (context *VMHooksImpl) BigIntSetUnsignedBytes(destinationHandle int32, byte // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntSetSignedBytes(destinationHandle int32, byteOffset executor.MemPtr, byteLength executor.MemLength) { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(bigIntSetSignedBytesName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntSetSignedBytes err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } bytes, err := context.MemLoad(byteOffset, byteLength) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(bytes))) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -457,16 +480,17 @@ func (context *VMHooksImpl) BigIntSetSignedBytes(destinationHandle int32, byteOf func (context *VMHooksImpl) BigIntIsInt64(destinationHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntIsInt64 err := metering.UseGasBoundedAndAddTracedGas(bigIntIsInt64Name, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } value, err := managedType.GetBigInt(destinationHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if value.IsInt64() { @@ -480,19 +504,18 @@ func (context *VMHooksImpl) BigIntIsInt64(destinationHandle int32) int32 { func (context *VMHooksImpl) BigIntGetInt64(destinationHandle int32) int64 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetInt64 err := metering.UseGasBoundedAndAddTracedGas(bigIntGetInt64Name, gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } value := managedType.GetBigIntOrCreate(destinationHandle) if !value.IsInt64() { - if context.WithFault(vmhost.ErrBigIntCannotBeRepresentedAsInt64, runtime.BigIntAPIErrorShouldFailExecution()) { - return -1 - } + context.FailExecution(vmhost.ErrBigIntCannotBeRepresentedAsInt64) + return -1 } return value.Int64() } @@ -505,7 +528,8 @@ func (context *VMHooksImpl) BigIntSetInt64(destinationHandle int32, value int64) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntSetInt64 err := metering.UseGasBoundedAndAddTracedGas(bigIntSetInt64Name, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -518,23 +542,25 @@ func (context *VMHooksImpl) BigIntSetInt64(destinationHandle int32, value int64) func (context *VMHooksImpl) BigIntAdd(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntAddName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntAdd err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -546,23 +572,25 @@ func (context *VMHooksImpl) BigIntAdd(destinationHandle, op1Handle, op2Handle in func (context *VMHooksImpl) BigIntSub(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntSubName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntSub err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -574,23 +602,25 @@ func (context *VMHooksImpl) BigIntSub(destinationHandle, op1Handle, op2Handle in func (context *VMHooksImpl) BigIntMul(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntMulName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntMul err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -602,28 +632,30 @@ func (context *VMHooksImpl) BigIntMul(destinationHandle, op1Handle, op2Handle in func (context *VMHooksImpl) BigIntTDiv(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntTDivName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntTDiv err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if b.Sign() == 0 { - _ = context.WithFault(vmhost.ErrDivZero, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrDivZero) return } dest.Quo(a, b) // Quo implements truncated division (like Go) @@ -634,28 +666,30 @@ func (context *VMHooksImpl) BigIntTDiv(destinationHandle, op1Handle, op2Handle i func (context *VMHooksImpl) BigIntTMod(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntTModName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntTMod err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if b.Sign() == 0 { - _ = context.WithFault(vmhost.ErrDivZero, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrDivZero) return } dest.Rem(a, b) // Rem implements truncated modulus (like Go) @@ -666,28 +700,30 @@ func (context *VMHooksImpl) BigIntTMod(destinationHandle, op1Handle, op2Handle i func (context *VMHooksImpl) BigIntEDiv(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntEDivName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntEDiv err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if b.Sign() == 0 { - _ = context.WithFault(vmhost.ErrDivZero, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrDivZero) return } dest.Div(a, b) // Div implements Euclidean division (unlike Go) @@ -698,28 +734,30 @@ func (context *VMHooksImpl) BigIntEDiv(destinationHandle, op1Handle, op2Handle i func (context *VMHooksImpl) BigIntEMod(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntEModName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntEMod err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if b.Sign() == 0 { - _ = context.WithFault(vmhost.ErrDivZero, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrDivZero) return } dest.Mod(a, b) // Mod implements Euclidean division (unlike Go) @@ -730,28 +768,30 @@ func (context *VMHooksImpl) BigIntEMod(destinationHandle, op1Handle, op2Handle i func (context *VMHooksImpl) BigIntSqrt(destinationHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntSqrtName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntSqrt err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, err := managedType.GetBigInt(opHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if a.Sign() < 0 { - _ = context.WithFault(vmhost.ErrBadLowerBounds, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBadLowerBounds) return } dest.Sqrt(a) @@ -762,18 +802,19 @@ func (context *VMHooksImpl) BigIntSqrt(destinationHandle, opHandle int32) { func (context *VMHooksImpl) BigIntPow(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntPowName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntPow err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -781,17 +822,19 @@ func (context *VMHooksImpl) BigIntPow(destinationHandle, op1Handle, op2Handle in lengthOfResult := big.NewInt(0).Div(big.NewInt(0).Mul(b, big.NewInt(int64(a.BitLen()))), big.NewInt(8)) err = managedType.ConsumeGasForThisBigIntNumberOfBytes(lengthOfResult) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if b.Sign() < 0 { - _ = context.WithFault(vmhost.ErrBadLowerBounds, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBadLowerBounds) return } @@ -803,27 +846,29 @@ func (context *VMHooksImpl) BigIntPow(destinationHandle, op1Handle, op2Handle in func (context *VMHooksImpl) BigIntLog2(op1Handle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntLog2Name) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntLog err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } a, err := managedType.GetBigInt(op1Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } err = managedType.ConsumeGasForBigIntCopy(a) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if a.Sign() < 0 { - _ = context.WithFault(vmhost.ErrBadLowerBounds, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBadLowerBounds) return -1 } @@ -835,23 +880,25 @@ func (context *VMHooksImpl) BigIntLog2(op1Handle int32) int32 { func (context *VMHooksImpl) BigIntAbs(destinationHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntAbsName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntAbs err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, err := managedType.GetBigInt(opHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -863,23 +910,25 @@ func (context *VMHooksImpl) BigIntAbs(destinationHandle, opHandle int32) { func (context *VMHooksImpl) BigIntNeg(destinationHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntNegName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntNeg err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, err := managedType.GetBigInt(opHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -891,22 +940,24 @@ func (context *VMHooksImpl) BigIntNeg(destinationHandle, opHandle int32) { func (context *VMHooksImpl) BigIntSign(opHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntSignName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntSign err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } a, err := managedType.GetBigInt(opHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } err = managedType.ConsumeGasForBigIntCopy(a) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } @@ -918,22 +969,24 @@ func (context *VMHooksImpl) BigIntSign(opHandle int32) int32 { func (context *VMHooksImpl) BigIntCmp(op1Handle, op2Handle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntCmpName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntCmp err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } err = managedType.ConsumeGasForBigIntCopy(a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -2 } @@ -945,28 +998,30 @@ func (context *VMHooksImpl) BigIntCmp(op1Handle, op2Handle int32) int32 { func (context *VMHooksImpl) BigIntNot(destinationHandle, opHandle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntNotName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntNot err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, err := managedType.GetBigInt(opHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(dest, a) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if a.Sign() < 0 { - _ = context.WithFault(vmhost.ErrBitwiseNegative, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBitwiseNegative) return } dest.Not(a) @@ -977,28 +1032,30 @@ func (context *VMHooksImpl) BigIntNot(destinationHandle, opHandle int32) { func (context *VMHooksImpl) BigIntAnd(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntAndName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntAnd err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if a.Sign() < 0 || b.Sign() < 0 { - _ = context.WithFault(vmhost.ErrBitwiseNegative, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBitwiseNegative) return } dest.And(a, b) @@ -1009,28 +1066,30 @@ func (context *VMHooksImpl) BigIntAnd(destinationHandle, op1Handle, op2Handle in func (context *VMHooksImpl) BigIntOr(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntOrName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntOr err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if a.Sign() < 0 || b.Sign() < 0 { - _ = context.WithFault(vmhost.ErrBitwiseNegative, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBitwiseNegative) return } dest.Or(a, b) @@ -1041,28 +1100,30 @@ func (context *VMHooksImpl) BigIntOr(destinationHandle, op1Handle, op2Handle int func (context *VMHooksImpl) BigIntXor(destinationHandle, op1Handle, op2Handle int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntXorName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntXor err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, b, err := managedType.GetTwoBigInt(op1Handle, op2Handle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(a, b) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if a.Sign() < 0 || b.Sign() < 0 { - _ = context.WithFault(vmhost.ErrBitwiseNegative, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBitwiseNegative) return } dest.Xor(a, b) @@ -1073,34 +1134,37 @@ func (context *VMHooksImpl) BigIntXor(destinationHandle, op1Handle, op2Handle in func (context *VMHooksImpl) BigIntShr(destinationHandle, opHandle, bits int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntShrName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntShr err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, err := managedType.GetBigInt(opHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(a) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if a.Sign() < 0 || bits < 0 { - _ = context.WithFault(vmhost.ErrShiftNegative, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrShiftNegative) return } dest.Rsh(a, uint(bits)) err = managedType.ConsumeGasForBigIntCopy(dest) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } } @@ -1110,34 +1174,37 @@ func (context *VMHooksImpl) BigIntShr(destinationHandle, opHandle, bits int32) { func (context *VMHooksImpl) BigIntShl(destinationHandle, opHandle, bits int32) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntShlName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntShl err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dest := managedType.GetBigIntOrCreate(destinationHandle) a, err := managedType.GetBigInt(opHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBigIntCopy(a) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } if a.Sign() < 0 || bits < 0 { - _ = context.WithFault(vmhost.ErrShiftNegative, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrShiftNegative) return } dest.Lsh(a, uint(bits)) err = managedType.ConsumeGasForBigIntCopy(dest) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } } @@ -1148,24 +1215,26 @@ func (context *VMHooksImpl) BigIntFinishUnsigned(referenceHandle int32) { managedType := context.GetManagedTypesContext() output := context.GetOutputContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntFinishUnsignedName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntFinishUnsigned err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } value, err := managedType.GetBigInt(referenceHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } bigIntBytes := value.Bytes() gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.PersistPerByte, uint64(len(value.Bytes()))) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -1178,24 +1247,26 @@ func (context *VMHooksImpl) BigIntFinishSigned(referenceHandle int32) { managedType := context.GetManagedTypesContext() output := context.GetOutputContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(bigIntFinishSignedName) gasToUse := metering.GasSchedule().BigIntAPICost.BigIntFinishSigned err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } value, err := managedType.GetBigInt(referenceHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } bigInt2cBytes := twos.ToBytes(value) gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.PersistPerByte, uint64(len(bigInt2cBytes))) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -1210,18 +1281,19 @@ func (context *VMHooksImpl) BigIntToString(bigIntHandle int32, destinationHandle } func BigIntToStringWithHost(host vmhost.VMHost, bigIntHandle int32, destinationHandle int32) { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntFinishSigned err := metering.UseGasBoundedAndAddTracedGas(bigIntToStringName, gasToUse) - if WithFaultAndHost(host, err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } value, err := managedType.GetBigInt(bigIntHandle) - if WithFaultAndHost(host, err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -1229,7 +1301,8 @@ func BigIntToStringWithHost(host vmhost.VMHost, bigIntHandle int32, destinationH gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(resultStr))) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } diff --git a/vmhost/vmhooks/cryptoei.go b/vmhost/vmhooks/cryptoei.go index 5415f34b7..a7d57b747 100644 --- a/vmhost/vmhooks/cryptoei.go +++ b/vmhost/vmhooks/cryptoei.go @@ -50,30 +50,32 @@ func (context *VMHooksImpl) Sha256( length executor.MemLength, resultOffset executor.MemPtr) int32 { - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() memLoadGas := math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(length)) gasToUse := math.AddUint64(metering.GasSchedule().CryptoAPICost.SHA256, memLoadGas) err := metering.UseGasBoundedAndAddTracedGas(sha256Name, gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } result, err := crypto.Sha256(data) if err != nil { - context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(err) return 1 } err = context.MemStore(resultOffset, result) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -84,28 +86,30 @@ func (context *VMHooksImpl) Sha256( // @autogenerate(VMHooks) func (context *VMHooksImpl) ManagedSha256(inputHandle, outputHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() err := metering.UseGasBoundedAndAddTracedGas(sha256Name, metering.GasSchedule().CryptoAPICost.SHA256) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } inputBytes, err := managedType.GetBytes(inputHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ConsumeGasForBytes(inputBytes) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } resultBytes, err := crypto.Sha256(inputBytes) if err != nil { - context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(err) return 1 } @@ -117,30 +121,32 @@ func (context *VMHooksImpl) ManagedSha256(inputHandle, outputHandle int32) int32 // Keccak256 VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) Keccak256(dataOffset executor.MemPtr, length executor.MemLength, resultOffset executor.MemPtr) int32 { - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() memLoadGas := math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(length)) gasToUse := math.AddUint64(metering.GasSchedule().CryptoAPICost.Keccak256, memLoadGas) err := metering.UseGasBoundedAndAddTracedGas(keccak256Name, gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } result, err := crypto.Keccak256(data) if err != nil { - context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(err) return 1 } err = context.MemStore(resultOffset, result) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -151,28 +157,30 @@ func (context *VMHooksImpl) Keccak256(dataOffset executor.MemPtr, length executo // @autogenerate(VMHooks) func (context *VMHooksImpl) ManagedKeccak256(inputHandle, outputHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() err := metering.UseGasBoundedAndAddTracedGas(keccak256Name, metering.GasSchedule().CryptoAPICost.Keccak256) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } inputBytes, err := managedType.GetBytes(inputHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ConsumeGasForBytes(inputBytes) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } resultBytes, err := crypto.Keccak256(inputBytes) if err != nil { - context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(err) return 1 } @@ -184,30 +192,32 @@ func (context *VMHooksImpl) ManagedKeccak256(inputHandle, outputHandle int32) in // Ripemd160 VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) Ripemd160(dataOffset executor.MemPtr, length executor.MemLength, resultOffset executor.MemPtr) int32 { - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() memLoadGas := math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(length)) gasToUse := math.AddUint64(metering.GasSchedule().CryptoAPICost.Ripemd160, memLoadGas) err := metering.UseGasBoundedAndAddTracedGas(ripemd160Name, gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } result, err := crypto.Ripemd160(data) if err != nil { - context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(err) return 1 } err = context.MemStore(resultOffset, result) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -223,29 +233,31 @@ func (context *VMHooksImpl) ManagedRipemd160(inputHandle int32, outputHandle int // ManagedRipemd160WithHost VMHooks implementation. func ManagedRipemd160WithHost(host vmhost.VMHost, inputHandle int32, outputHandle int32) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() crypto := host.Crypto() err := metering.UseGasBoundedAndAddTracedGas(ripemd160Name, metering.GasSchedule().CryptoAPICost.Ripemd160) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } inputBytes, err := managedType.GetBytes(inputHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(inputBytes) - if WithFaultAndHost(host, err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } result, err := crypto.Ripemd160(inputBytes) if err != nil { - WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, err) return 1 } @@ -262,41 +274,45 @@ func (context *VMHooksImpl) VerifyBLS( messageLength executor.MemLength, sigOffset executor.MemPtr, ) int32 { - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() metering.StartGasTracing(verifyBLSName) gasToUse := metering.GasSchedule().CryptoAPICost.VerifyBLS err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } key, err := context.MemLoad(keyOffset, blsPublicKeyLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(messageLength)) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } message, err := context.MemLoad(messageOffset, messageLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } sig, err := context.MemLoad(sigOffset, blsSignatureLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } invalidSigErr := crypto.VerifyBLS(key, message, sig) if invalidSigErr != nil { - context.WithFault(invalidSigErr, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(invalidSigErr) return -1 } @@ -350,37 +366,44 @@ func ManagedVerifyBLSWithHost( managedType := host.ManagedTypes() crypto := host.Crypto() err := useGasForCryptoVerify(metering, sigVerificationType) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } keyBytes, err := managedType.GetBytes(keyHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(keyBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } msgBytes, err := managedType.GetBytes(messageHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(msgBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } sigBytes, err := managedType.GetBytes(sigHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(sigBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -401,7 +424,7 @@ func ManagedVerifyBLSWithHost( } if invalidSigErr != nil { - WithFaultAndHost(host, invalidSigErr, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, invalidSigErr) return -1 } @@ -416,41 +439,45 @@ func (context *VMHooksImpl) VerifyEd25519( messageLength executor.MemLength, sigOffset executor.MemPtr, ) int32 { - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() metering.StartGasTracing(verifyEd25519Name) gasToUse := metering.GasSchedule().CryptoAPICost.VerifyEd25519 err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } key, err := context.MemLoad(keyOffset, ed25519PublicKeyLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(messageLength)) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } message, err := context.MemLoad(messageOffset, messageLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } sig, err := context.MemLoad(sigOffset, ed25519SignatureLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } invalidSigErr := crypto.VerifyEd25519(key, message, sig) if invalidSigErr != nil { - context.WithFault(invalidSigErr, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(invalidSigErr) return -1 } @@ -471,7 +498,6 @@ func ManagedVerifyEd25519WithHost( host vmhost.VMHost, keyHandle, messageHandle, sigHandle int32, ) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() crypto := host.Crypto() @@ -479,43 +505,50 @@ func ManagedVerifyEd25519WithHost( gasToUse := metering.GasSchedule().CryptoAPICost.VerifyEd25519 err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } keyBytes, err := managedType.GetBytes(keyHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(keyBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } msgBytes, err := managedType.GetBytes(messageHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(msgBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } sigBytes, err := managedType.GetBytes(sigHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(sigBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } invalidSigErr := crypto.VerifyEd25519(keyBytes, msgBytes, sigBytes) if invalidSigErr != nil { - WithFaultAndHost(host, invalidSigErr, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, invalidSigErr) return -1 } @@ -532,35 +565,38 @@ func (context *VMHooksImpl) VerifyCustomSecp256k1( sigOffset executor.MemPtr, hashType int32, ) int32 { - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() metering.StartGasTracing(verifyCustomSecp256k1Name) gasToUse := metering.GasSchedule().CryptoAPICost.VerifySecp256k1 err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } if keyLength != secp256k1CompressedPublicKeyLength && keyLength != secp256k1UncompressedPublicKeyLength { - _ = context.WithFault(vmhost.ErrInvalidPublicKeySize, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrInvalidPublicKeySize) return 1 } key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(messageLength)) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } message, err := context.MemLoad(messageOffset, messageLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -569,18 +605,20 @@ func (context *VMHooksImpl) VerifyCustomSecp256k1( // byte2: the remaining buffer length const sigHeaderLength = 2 sigHeader, err := context.MemLoad(sigOffset, sigHeaderLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } sigLength := int32(sigHeader[1]) + sigHeaderLength sig, err := context.MemLoad(sigOffset, sigLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } invalidSigErr := crypto.VerifySecp256k1(key, message, sig, uint8(hashType)) if invalidSigErr != nil { - context.WithFault(invalidSigErr, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(invalidSigErr) return -1 } @@ -616,37 +654,44 @@ func ManagedVerifyCustomSecp256k1WithHost( crypto := host.Crypto() err := useGasForCryptoVerify(metering, verifyCryptoFunc) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } keyBytes, err := managedType.GetBytes(keyHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(keyBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } msgBytes, err := managedType.GetBytes(messageHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(msgBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } sigBytes, err := managedType.GetBytes(sigHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(sigBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -659,7 +704,7 @@ func ManagedVerifyCustomSecp256k1WithHost( } if invalidSigErr != nil { - WithFaultAndHost(host, invalidSigErr, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, invalidSigErr) return -1 } @@ -718,29 +763,32 @@ func (context *VMHooksImpl) EncodeSecp256k1DerSignature( sLength executor.MemLength, sigOffset executor.MemPtr, ) int32 { - runtime := context.GetRuntimeContext() crypto := context.GetCryptoContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().CryptoAPICost.EncodeDERSig err := metering.UseGasBoundedAndAddTracedGas(encodeSecp256k1DerSignatureName, gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } r, err := context.MemLoad(rOffset, rLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } s, err := context.MemLoad(sOffset, sLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } derSig := crypto.EncodeSecp256k1DERSignature(r, s) err = context.MemStore(sigOffset, derSig) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -761,24 +809,26 @@ func ManagedEncodeSecp256k1DerSignatureWithHost( host vmhost.VMHost, rHandle, sHandle, sigHandle int32, ) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() crypto := host.Crypto() gasToUse := metering.GasSchedule().CryptoAPICost.EncodeDERSig err := metering.UseGasBoundedAndAddTracedGas(encodeSecp256k1DerSignatureName, gasToUse) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } r, err := managedType.GetBytes(rHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } s, err := managedType.GetBytes(sHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -801,48 +851,49 @@ func (context *VMHooksImpl) AddEC( ) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(addECName) curveMultiplier := managedType.Get100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) return } gasToUse := metering.GasSchedule().CryptoAPICost.AddECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } ec, err1 := managedType.GetEllipticCurve(ecHandle) - if context.WithFault(err1, runtime.CryptoAPIErrorShouldFailExecution()) { - return + if err1 != nil { + context.FailExecution(err1) } xResult, yResult, err := managedType.GetTwoBigInt(xResultHandle, yResultHandle) if err != nil { - _ = context.WithFault(vmhost.ErrNoBigIntUnderThisHandle, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoBigIntUnderThisHandle) return } x1, y1, err := managedType.GetTwoBigInt(fstPointXHandle, fstPointYHandle) if err != nil { - _ = context.WithFault(vmhost.ErrNoBigIntUnderThisHandle, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoBigIntUnderThisHandle) return } x2, y2, err := managedType.GetTwoBigInt(sndPointXHandle, sndPointYHandle) if err != nil { - _ = context.WithFault(vmhost.ErrNoBigIntUnderThisHandle, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoBigIntUnderThisHandle) return } if !ec.IsOnCurve(x1, y1) || !ec.IsOnCurve(x2, y2) { - _ = context.WithFault(vmhost.ErrPointNotOnCurve, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrPointNotOnCurve) return } err = managedType.ConsumeGasForBigIntCopy(xResult, yResult, ec.P, ec.N, ec.B, ec.Gx, ec.Gy, x1, y1, x2, y2) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } xResultAdd, yResultAdd := ec.Add(x1, y1, x2, y2) @@ -861,38 +912,40 @@ func (context *VMHooksImpl) DoubleEC( ) { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(doubleECName) curveMultiplier := managedType.Get100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) return } gasToUse := metering.GasSchedule().CryptoAPICost.DoubleECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } ec, err1 := managedType.GetEllipticCurve(ecHandle) - if context.WithFault(err1, runtime.CryptoAPIErrorShouldFailExecution()) { + if err1 != nil { + context.FailExecution(err1) return } xResult, yResult, err1 := managedType.GetTwoBigInt(xResultHandle, yResultHandle) x, y, err2 := managedType.GetTwoBigInt(pointXHandle, pointYHandle) if err1 != nil || err2 != nil { - _ = context.WithFault(vmhost.ErrNoBigIntUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoBigIntUnderThisHandle) return } if !ec.IsOnCurve(x, y) { - _ = context.WithFault(vmhost.ErrPointNotOnCurve, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrPointNotOnCurve) return } err = managedType.ConsumeGasForBigIntCopy(xResult, yResult, ec.P, ec.N, ec.B, ec.Gx, ec.Gy, x, y) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -910,33 +963,35 @@ func (context *VMHooksImpl) IsOnCurveEC( ) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(isOnCurveECName) curveMultiplier := managedType.Get100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } gasToUse := metering.GasSchedule().CryptoAPICost.IsOnCurveECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } ec, err := managedType.GetEllipticCurve(ecHandle) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } x, y, err := managedType.GetTwoBigInt(pointXHandle, pointYHandle) if err != nil || x == nil || y == nil { - _ = context.WithFault(vmhost.ErrNoBigIntUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoBigIntUnderThisHandle) return -1 } err = managedType.ConsumeGasForBigIntCopy(ec.P, ec.N, ec.B, ec.Gx, ec.Gy, x, y) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -956,30 +1011,31 @@ func (context *VMHooksImpl) ScalarBaseMultEC( dataOffset executor.MemPtr, length executor.MemLength, ) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() managedType := context.GetManagedTypesContext() metering.StartGasTracing(scalarBaseMultECName) if length < 0 { - _ = context.WithFault(vmhost.ErrNegativeLength, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNegativeLength) return 1 } curveMultiplier := managedType.GetScalarMult100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } oneByteScalarGasCost := metering.GasSchedule().CryptoAPICost.ScalarMultECC * uint64(curveMultiplier) / 100 gasToUse := oneByteScalarGasCost + uint64(length)*oneByteScalarGasCost err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -1013,26 +1069,27 @@ func ManagedScalarBaseMultECWithHost( ecHandle int32, dataHandle int32, ) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() metering.StartGasTracing(scalarBaseMultECName) curveMultiplier := managedType.GetScalarMult100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = WithFaultAndHost(host, vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } data, err := managedType.GetBytes(dataHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } oneByteScalarGasCost := metering.GasSchedule().CryptoAPICost.ScalarMultECC * uint64(curveMultiplier) / 100 gasToUse := oneByteScalarGasCost + uint64(len(data))*oneByteScalarGasCost err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1046,27 +1103,29 @@ func commonScalarBaseMultEC( ecHandle int32, data []byte, ) int32 { - runtime := host.Runtime() managedType := host.ManagedTypes() ec, err := managedType.GetEllipticCurve(ecHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } xResult, yResult, err := managedType.GetTwoBigInt(xResultHandle, yResultHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBigIntCopy(ec.P, ec.N, ec.B, ec.Gx, ec.Gy, xResult, yResult) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } xResultSBM, yResultSBM := ec.ScalarBaseMult(data) if !ec.IsOnCurve(xResultSBM, yResultSBM) { - _ = WithFaultAndHost(host, vmhost.ErrPointNotOnCurve, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrPointNotOnCurve) return 1 } xResult.Set(xResultSBM) @@ -1086,30 +1145,31 @@ func (context *VMHooksImpl) ScalarMultEC( dataOffset executor.MemPtr, length executor.MemLength, ) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() managedType := context.GetManagedTypesContext() metering.StartGasTracing(scalarMultECName) if length < 0 { - _ = context.WithFault(vmhost.ErrNegativeLength, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNegativeLength) return 1 } curveMultiplier := managedType.GetScalarMult100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } oneByteScalarGasCost := metering.GasSchedule().CryptoAPICost.ScalarMultECC * uint64(curveMultiplier) / 100 gasToUse := oneByteScalarGasCost + uint64(length)*oneByteScalarGasCost err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -1149,26 +1209,27 @@ func ManagedScalarMultECWithHost( pointYHandle int32, dataHandle int32, ) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() metering.StartGasTracing(scalarMultECName) curveMultiplier := managedType.GetScalarMult100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = WithFaultAndHost(host, vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } data, err := managedType.GetBytes(dataHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } oneByteScalarGasCost := metering.GasSchedule().CryptoAPICost.ScalarMultECC * uint64(curveMultiplier) / 100 gasToUse := oneByteScalarGasCost + uint64(len(data))*oneByteScalarGasCost err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1184,35 +1245,36 @@ func commonScalarMultEC( pointYHandle int32, data []byte, ) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() metering.StartGasTracing(scalarMultECName) ec, err1 := managedType.GetEllipticCurve(ecHandle) - if WithFaultAndHost(host, err1, runtime.CryptoAPIErrorShouldFailExecution()) { + if err1 != nil { + FailExecution(host, err1) return 1 } xResult, yResult, err1 := managedType.GetTwoBigInt(xResultHandle, yResultHandle) x, y, err2 := managedType.GetTwoBigInt(pointXHandle, pointYHandle) if err1 != nil || err2 != nil { - _ = WithFaultAndHost(host, vmhost.ErrNoBigIntUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrNoBigIntUnderThisHandle) return 1 } if !ec.IsOnCurve(x, y) { - _ = WithFaultAndHost(host, vmhost.ErrPointNotOnCurve, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrPointNotOnCurve) return 1 } err := managedType.ConsumeGasForBigIntCopy(xResult, yResult, ec.P, ec.N, ec.B, ec.Gx, ec.Gy, x, y) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } xResultSM, yResultSM := ec.ScalarMult(x, y, data) if !ec.IsOnCurve(xResultSM, yResultSM) { - _ = WithFaultAndHost(host, vmhost.ErrPointNotOnCurve, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrPointNotOnCurve) return 1 } xResult.Set(xResultSM) @@ -1229,16 +1291,16 @@ func (context *VMHooksImpl) MarshalEC( ecHandle int32, resultOffset executor.MemPtr, ) int32 { - runtime := context.GetRuntimeContext() host := context.GetVMHost() result, err := commonMarshalEC(host, xPairHandle, yPairHandle, ecHandle) if err != nil { - _ = context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(err) return -1 } err = context.MemStore(resultOffset, result) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } return int32(len(result)) @@ -1272,7 +1334,7 @@ func ManagedMarshalECWithHost( ) int32 { result, err := commonMarshalEC(host, xPairHandle, yPairHandle, ecHandle) if err != nil { - _ = WithFaultAndHost(host, err, true) + FailExecution(host, err) return -1 } @@ -1334,16 +1396,16 @@ func (context *VMHooksImpl) MarshalCompressedEC( ecHandle int32, resultOffset executor.MemPtr, ) int32 { - runtime := context.GetRuntimeContext() host := context.GetVMHost() result, err := commonMarshalCompressedEC(host, xPairHandle, yPairHandle, ecHandle) if err != nil { - _ = context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(err) return -1 } err = context.MemStore(resultOffset, result) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } return int32(len(result)) @@ -1375,11 +1437,10 @@ func ManagedMarshalCompressedECWithHost( ecHandle int32, resultHandle int32, ) int32 { - runtime := host.Runtime() managedType := host.ManagedTypes() result, err := commonMarshalCompressedEC(host, xPairHandle, yPairHandle, ecHandle) if err != nil { - _ = WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, err) return -1 } @@ -1440,24 +1501,25 @@ func (context *VMHooksImpl) UnmarshalEC( dataOffset executor.MemPtr, length executor.MemLength, ) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() managedType := context.GetManagedTypesContext() metering.StartGasTracing(unmarshalECName) curveMultiplier := managedType.Get100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } gasToUse := metering.GasSchedule().CryptoAPICost.UnmarshalECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -1491,19 +1553,19 @@ func ManagedUnmarshalECWithHost( ecHandle int32, dataHandle int32, ) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() metering.StartGasTracing(unmarshalECName) curveMultiplier := managedType.Get100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = WithFaultAndHost(host, vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } gasToUse := metering.GasSchedule().CryptoAPICost.UnmarshalECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1522,32 +1584,34 @@ func commonUnmarshalEC( ecHandle int32, data []byte, ) int32 { - runtime := host.Runtime() managedType := host.ManagedTypes() ec, err := managedType.GetEllipticCurve(ecHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } byteLen := (ec.BitSize + 7) / 8 if len(data) != 1+2*byteLen { - _ = WithFaultAndHost(host, vmhost.ErrLengthOfBufferNotCorrect, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrLengthOfBufferNotCorrect) return 1 } xResult, yResult, err := managedType.GetTwoBigInt(xResultHandle, yResultHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBigIntCopy(ec.P, ec.N, ec.B, ec.Gx, ec.Gy, xResult, yResult) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } xResultU, yResultU := elliptic.Unmarshal(ec, data) if xResultU == nil || yResultU == nil || !ec.IsOnCurve(xResultU, yResultU) { - _ = WithFaultAndHost(host, vmhost.ErrPointNotOnCurve, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrPointNotOnCurve) return 1 } xResult.Set(xResultU) @@ -1565,24 +1629,25 @@ func (context *VMHooksImpl) UnmarshalCompressedEC( dataOffset executor.MemPtr, length executor.MemLength, ) int32 { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() managedType := context.GetManagedTypesContext() metering.StartGasTracing(unmarshalCompressedECName) curveMultiplier := managedType.GetUCompressed100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } gasToUse := metering.GasSchedule().CryptoAPICost.UnmarshalCompressedECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } data, err := context.MemLoad(dataOffset, length) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return int32(len(data)) } @@ -1616,24 +1681,25 @@ func ManagedUnmarshalCompressedECWithHost( ecHandle int32, dataHandle int32, ) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() metering.StartGasTracing(unmarshalCompressedECName) curveMultiplier := managedType.GetUCompressed100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { - _ = WithFaultAndHost(host, vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrNoEllipticCurveUnderThisHandle) return 1 } gasToUse := metering.GasSchedule().CryptoAPICost.UnmarshalCompressedECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } data, err := managedType.GetBytes(dataHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return int32(len(data)) } @@ -1647,32 +1713,34 @@ func commonUnmarshalCompressedEC( ecHandle int32, data []byte, ) int32 { - runtime := host.Runtime() managedType := host.ManagedTypes() ec, err := managedType.GetEllipticCurve(ecHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } byteLen := (ec.BitSize+7)/8 + 1 if len(data) != byteLen { - _ = WithFaultAndHost(host, vmhost.ErrLengthOfBufferNotCorrect, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrLengthOfBufferNotCorrect) return 1 } xResult, yResult, err := managedType.GetTwoBigInt(xResultHandle, yResultHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBigIntCopy(ec.P, ec.N, ec.B, ec.Gx, ec.Gy, xResult, yResult) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } xResultUC, yResultUC := elliptic.UnmarshalCompressed(ec, data) if xResultUC == nil || yResultUC == nil || !ec.IsOnCurve(xResultUC, yResultUC) { - _ = WithFaultAndHost(host, vmhost.ErrPointNotOnCurve, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrPointNotOnCurve) return 1 } xResult.Set(xResultUC) @@ -1688,15 +1756,16 @@ func (context *VMHooksImpl) GenerateKeyEC( ecHandle int32, resultOffset executor.MemPtr, ) int32 { - runtime := context.GetRuntimeContext() host := context.GetVMHost() result, err := commonGenerateEC(host, xPubKeyHandle, yPubKeyHandle, ecHandle) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = context.MemStore(resultOffset, result) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return int32(len(result)) } @@ -1729,10 +1798,10 @@ func ManagedGenerateKeyECWithHost( ecHandle int32, resultHandle int32, ) int32 { - runtime := host.Runtime() managedType := host.ManagedTypes() result, err := commonGenerateEC(host, xPubKeyHandle, yPubKeyHandle, ecHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -1794,21 +1863,22 @@ func commonGenerateEC( // @autogenerate(VMHooks) func (context *VMHooksImpl) CreateEC(dataOffset executor.MemPtr, dataLength executor.MemLength) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().CryptoAPICost.EllipticCurveNew err := metering.UseGasBoundedAndAddTracedGas(createECName, gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } if dataLength != curveNameLength { - _ = context.WithFault(vmhost.ErrBadBounds, runtime.CryptoAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBadBounds) return -1 } data, err := context.MemLoad(dataOffset, dataLength) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } curveChoice := string(data[:]) @@ -1838,18 +1908,19 @@ func (context *VMHooksImpl) ManagedCreateEC(dataHandle int32) int32 { // ManagedCreateECWithHost VMHooks implementation. func ManagedCreateECWithHost(host vmhost.VMHost, dataHandle int32) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() gasToUse := metering.GasSchedule().CryptoAPICost.EllipticCurveNew err := metering.UseGasBoundedAndAddTracedGas(createECName, gasToUse) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } data, err := managedType.GetBytes(dataHandle) - if WithFaultAndHost(host, err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } curveChoice := string(data[:]) @@ -1868,7 +1939,7 @@ func ManagedCreateECWithHost(host vmhost.VMHost, dataHandle int32) int32 { return managedType.PutEllipticCurve(curveParams) } - _ = WithFaultAndHost(host, vmhost.ErrBadBounds, runtime.CryptoAPIErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrBadBounds) return -1 } @@ -1877,17 +1948,17 @@ func ManagedCreateECWithHost(host vmhost.VMHost, dataHandle int32) int32 { func (context *VMHooksImpl) GetCurveLengthEC(ecHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetInt64 err := metering.UseGasBoundedAndAddTracedGas(getCurveLengthECName, gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } ecLength := managedType.GetEllipticCurveSizeOfField(ecHandle) if ecLength == -1 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) } return ecLength @@ -1898,17 +1969,17 @@ func (context *VMHooksImpl) GetCurveLengthEC(ecHandle int32) int32 { func (context *VMHooksImpl) GetPrivKeyByteLengthEC(ecHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetInt64 err := metering.UseGasBoundedAndAddTracedGas(getPrivKeyByteLengthECName, gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } byteLength := managedType.GetPrivateKeyByteLengthEC(ecHandle) if byteLength == -1 { - _ = context.WithFault(vmhost.ErrNoEllipticCurveUnderThisHandle, runtime.BigIntAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) } return byteLength @@ -1919,28 +1990,32 @@ func (context *VMHooksImpl) GetPrivKeyByteLengthEC(ecHandle int32) int32 { func (context *VMHooksImpl) EllipticCurveGetValues(ecHandle int32, fieldOrderHandle int32, basePointOrderHandle int32, eqConstantHandle int32, xBasePointHandle int32, yBasePointHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().BigIntAPICost.BigIntGetInt64 * 5 err := metering.UseGasBoundedAndAddTracedGas(ellipticCurveGetValuesName, gasToUse) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } ec, err := managedType.GetEllipticCurve(ecHandle) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } fieldOrder, basePointOrder, err := managedType.GetTwoBigInt(fieldOrderHandle, basePointOrderHandle) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } eqConstant, err := managedType.GetBigInt(eqConstantHandle) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } xBasePoint, yBasePoint, err := managedType.GetTwoBigInt(xBasePointHandle, yBasePointHandle) - if context.WithFault(err, runtime.CryptoAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } fieldOrder.Set(ec.P) diff --git a/vmhost/vmhooks/generate/cmd/eiGenMain.go b/vmhost/vmhooks/generate/cmd/eiGenMain.go index 1579d0748..b20216e6d 100644 --- a/vmhost/vmhooks/generate/cmd/eiGenMain.go +++ b/vmhost/vmhooks/generate/cmd/eiGenMain.go @@ -44,7 +44,6 @@ func main() { writeVMHooks(eiMetadata) writeVMHooksWrapper(eiMetadata) - writeWasmer1ImportsCgo(eiMetadata) writeWasmer2ImportsCgo(eiMetadata) writeWasmer2Names(eiMetadata) @@ -85,12 +84,6 @@ func writeVMHooksWrapper(eiMetadata *eapigen.EIMetadata) { eapigen.WriteVMHooksWrapper(out, eiMetadata) } -func writeWasmer1ImportsCgo(eiMetadata *eapigen.EIMetadata) { - out := eapigen.NewEIGenWriter(pathToApiPackage, "../../wasmer/wasmerImportsCgo.go") - defer out.Close() - eapigen.WriteWasmer1Cgo(out, eiMetadata) -} - func writeWasmer2ImportsCgo(eiMetadata *eapigen.EIMetadata) { out := eapigen.NewEIGenWriter(pathToApiPackage, "../../wasmer2/wasmer2ImportsCgo.go") defer out.Close() diff --git a/vmhost/vmhooks/manBufOps.go b/vmhost/vmhooks/manBufOps.go index c443844fa..cf4090ece 100644 --- a/vmhost/vmhooks/manBufOps.go +++ b/vmhost/vmhooks/manBufOps.go @@ -11,27 +11,31 @@ import ( ) const ( - mBufferNewName = "mBufferNew" - mBufferNewFromBytesName = "mBufferNewFromBytes" - mBufferGetLengthName = "mBufferGetLength" - mBufferGetBytesName = "mBufferGetBytes" - mBufferGetByteSliceName = "mBufferGetByteSlice" - mBufferCopyByteSliceName = "mBufferCopyByteSlice" - mBufferEqName = "mBufferEq" - mBufferSetBytesName = "mBufferSetBytes" - mBufferAppendName = "mBufferAppend" - mBufferAppendBytesName = "mBufferAppendBytes" - mBufferToBigIntUnsignedName = "mBufferToBigIntUnsigned" - mBufferToBigIntSignedName = "mBufferToBigIntSigned" - mBufferFromBigIntUnsignedName = "mBufferFromBigIntUnsigned" - mBufferFromBigIntSignedName = "mBufferFromBigIntSigned" - mBufferStorageStoreName = "mBufferStorageStore" - mBufferStorageLoadName = "mBufferStorageLoad" - mBufferGetArgumentName = "mBufferGetArgument" - mBufferFinishName = "mBufferFinish" - mBufferSetRandomName = "mBufferSetRandom" - mBufferToBigFloatName = "mBufferToBigFloat" - mBufferFromBigFloatName = "mBufferFromBigFloat" + mBufferNewName = "mBufferNew" + mBufferNewFromBytesName = "mBufferNewFromBytes" + mBufferGetLengthName = "mBufferGetLength" + mBufferGetBytesName = "mBufferGetBytes" + mBufferGetByteSliceName = "mBufferGetByteSlice" + mBufferCopyByteSliceName = "mBufferCopyByteSlice" + mBufferEqName = "mBufferEq" + mBufferSetBytesName = "mBufferSetBytes" + mBufferAppendName = "mBufferAppend" + mBufferAppendBytesName = "mBufferAppendBytes" + mBufferToBigIntUnsignedName = "mBufferToBigIntUnsigned" + mBufferToBigIntSignedName = "mBufferToBigIntSigned" + mBufferFromBigIntUnsignedName = "mBufferFromBigIntUnsigned" + mBufferFromBigIntSignedName = "mBufferFromBigIntSigned" + mBufferToSmallIntUnsignedName = "mBufferToSmallIntUnsigned" + mBufferToSmallIntSignedName = "mBufferToSmallIntSigned" + mBufferFromSmallIntUnsignedName = "mBufferFromSmallIntUnsigned" + mBufferFromSmallIntSignedName = "mBufferFromSmallIntSigned" + mBufferStorageStoreName = "mBufferStorageStore" + mBufferStorageLoadName = "mBufferStorageLoad" + mBufferGetArgumentName = "mBufferGetArgument" + mBufferFinishName = "mBufferFinish" + mBufferSetRandomName = "mBufferSetRandom" + mBufferToBigFloatName = "mBufferToBigFloat" + mBufferFromBigFloatName = "mBufferFromBigFloat" ) // MBufferNew VMHooks implementation. @@ -42,7 +46,8 @@ func (context *VMHooksImpl) MBufferNew() int32 { gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferNew err := metering.UseGasBoundedAndAddTracedGas(mBufferNewName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -53,17 +58,18 @@ func (context *VMHooksImpl) MBufferNew() int32 { // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferNewFromBytes(dataOffset executor.MemPtr, dataLength executor.MemLength) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferNewFromBytes err := metering.UseGasBoundedAndAddTracedGas(mBufferNewFromBytesName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } data, err := context.MemLoad(dataOffset, dataLength) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -74,18 +80,18 @@ func (context *VMHooksImpl) MBufferNewFromBytes(dataOffset executor.MemPtr, data // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferGetLength(mBufferHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferGetLength err := metering.UseGasBoundedAndAddTracedGas(mBufferGetLengthName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } length := managedType.GetLength(mBufferHandle) if length == -1 { - _ = context.WithFault(vmhost.ErrNoManagedBufferUnderThisHandle, runtime.ManagedBufferAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoManagedBufferUnderThisHandle) return -1 } @@ -96,27 +102,30 @@ func (context *VMHooksImpl) MBufferGetLength(mBufferHandle int32) int32 { // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferGetBytes(mBufferHandle int32, resultOffset executor.MemPtr) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(mBufferGetBytesName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferGetBytes err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } mBufferBytes, err := managedType.GetBytes(mBufferHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ConsumeGasForBytes(mBufferBytes) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = context.MemStore(resultOffset, mBufferBytes) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -132,22 +141,24 @@ func (context *VMHooksImpl) MBufferGetByteSlice( resultOffset executor.MemPtr) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(mBufferGetByteSliceName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferGetByteSlice err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } sourceBytes, err := managedType.GetBytes(sourceHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ConsumeGasForBytes(sourceBytes) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -158,7 +169,8 @@ func (context *VMHooksImpl) MBufferGetByteSlice( slice := sourceBytes[startingPosition : startingPosition+sliceLength] err = context.MemStore(resultOffset, slice) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -175,22 +187,24 @@ func (context *VMHooksImpl) MBufferCopyByteSlice(sourceHandle int32, startingPos // ManagedBufferCopyByteSliceWithHost VMHooks implementation. func ManagedBufferCopyByteSliceWithHost(host vmhost.VMHost, sourceHandle int32, startingPosition int32, sliceLength int32, destinationHandle int32) int32 { managedType := host.ManagedTypes() - runtime := host.Runtime() metering := host.Metering() metering.StartGasTracing(mBufferCopyByteSliceName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferCopyByteSlice err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } sourceBytes, err := managedType.GetBytes(sourceHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } err = managedType.ConsumeGasForBytes(sourceBytes) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -204,7 +218,8 @@ func ManagedBufferCopyByteSliceWithHost(host vmhost.VMHost, sourceHandle int32, gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(slice))) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -215,31 +230,35 @@ func ManagedBufferCopyByteSliceWithHost(host vmhost.VMHost, sourceHandle int32, // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferEq(mBufferHandle1 int32, mBufferHandle2 int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(mBufferEqName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferCopyByteSlice err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } bytes1, err := managedType.GetBytes(mBufferHandle1) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } err = managedType.ConsumeGasForBytes(bytes1) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } bytes2, err := managedType.GetBytes(mBufferHandle2) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } err = managedType.ConsumeGasForBytes(bytes2) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -254,23 +273,25 @@ func (context *VMHooksImpl) MBufferEq(mBufferHandle1 int32, mBufferHandle2 int32 // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferSetBytes(mBufferHandle int32, dataOffset executor.MemPtr, dataLength executor.MemLength) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(mBufferSetBytesName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferSetBytes err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } data, err := context.MemLoad(dataOffset, dataLength) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ConsumeGasForBytes(data) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -299,18 +320,19 @@ func (context *VMHooksImpl) ManagedBufferSetByteSliceWithHost( dataLength executor.MemLength, dataOffset executor.MemPtr) int32 { - runtime := host.Runtime() metering := host.Metering() metering.StartGasTracing(mBufferGetByteSliceName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferSetBytes err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } data, err := context.MemLoad(dataOffset, dataLength) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -320,17 +342,18 @@ func (context *VMHooksImpl) ManagedBufferSetByteSliceWithHost( // ManagedBufferSetByteSliceWithTypedArgs VMHooks implementation. func ManagedBufferSetByteSliceWithTypedArgs(host vmhost.VMHost, mBufferHandle int32, startingPosition int32, dataLength int32, data []byte) int32 { managedType := host.ManagedTypes() - runtime := host.Runtime() metering := host.Metering() metering.StartGasTracing(mBufferGetByteSliceName) err := managedType.ConsumeGasForBytes(data) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } bufferBytes, err := managedType.GetBytes(mBufferHandle) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -354,29 +377,31 @@ func ManagedBufferSetByteSliceWithTypedArgs(host vmhost.VMHost, mBufferHandle in // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferAppend(accumulatorHandle int32, dataHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(mBufferAppendName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferAppend err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } dataBufferBytes, err := managedType.GetBytes(dataHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ConsumeGasForBytes(dataBufferBytes) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } isSuccess := managedType.AppendBytes(accumulatorHandle, dataBufferBytes) if !isSuccess { - _ = context.WithFault(vmhost.ErrNoManagedBufferUnderThisHandle, runtime.ManagedBufferAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoManagedBufferUnderThisHandle) return 1 } @@ -387,30 +412,32 @@ func (context *VMHooksImpl) MBufferAppend(accumulatorHandle int32, dataHandle in // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferAppendBytes(accumulatorHandle int32, dataOffset executor.MemPtr, dataLength executor.MemLength) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(mBufferAppendBytesName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferAppendBytes err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } data, err := context.MemLoad(dataOffset, dataLength) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } isSuccess := managedType.AppendBytes(accumulatorHandle, data) if !isSuccess { - _ = context.WithFault(vmhost.ErrNoManagedBufferUnderThisHandle, runtime.ManagedBufferAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrNoManagedBufferUnderThisHandle) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(data))) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -421,17 +448,18 @@ func (context *VMHooksImpl) MBufferAppendBytes(accumulatorHandle int32, dataOffs // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferToBigIntUnsigned(mBufferHandle int32, bigIntHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferToBigIntUnsigned err := metering.UseGasBoundedAndAddTracedGas(mBufferToBigIntUnsignedName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } managedBuffer, err := managedType.GetBytes(mBufferHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -445,17 +473,18 @@ func (context *VMHooksImpl) MBufferToBigIntUnsigned(mBufferHandle int32, bigIntH // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferToBigIntSigned(mBufferHandle int32, bigIntHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferToBigIntSigned err := metering.UseGasBoundedAndAddTracedGas(mBufferToBigIntSignedName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } managedBuffer, err := managedType.GetBytes(mBufferHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -469,17 +498,18 @@ func (context *VMHooksImpl) MBufferToBigIntSigned(mBufferHandle int32, bigIntHan // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferFromBigIntUnsigned(mBufferHandle int32, bigIntHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferFromBigIntUnsigned err := metering.UseGasBoundedAndAddTracedGas(mBufferFromBigIntUnsignedName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } value, err := managedType.GetBigInt(bigIntHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -492,17 +522,18 @@ func (context *VMHooksImpl) MBufferFromBigIntUnsigned(mBufferHandle int32, bigIn // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferFromBigIntSigned(mBufferHandle int32, bigIntHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferFromBigIntSigned err := metering.UseGasBoundedAndAddTracedGas(mBufferFromBigIntSignedName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } value, err := managedType.GetBigInt(bigIntHandle) - if context.WithFault(err, runtime.BigIntAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -510,47 +541,137 @@ func (context *VMHooksImpl) MBufferFromBigIntSigned(mBufferHandle int32, bigIntH return 0 } +// MBufferToSmallIntUnsigned VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) MBufferToSmallIntUnsigned(mBufferHandle int32) int64 { + managedType := context.GetManagedTypesContext() + metering := context.GetMeteringContext() + + gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferToSmallIntUnsigned + err := metering.UseGasBoundedAndAddTracedGas(mBufferToSmallIntUnsignedName, gasToUse) + if err != nil { + context.FailExecution(err) + return 0 + } + + data, err := managedType.GetBytes(mBufferHandle) + if err != nil { + context.FailExecution(err) + return 1 + } + bigInt := big.NewInt(0).SetBytes(data) + if !bigInt.IsUint64() { + context.FailExecution(vmhost.ErrBytesExceedUint64) + return 0 + } + return int64(bigInt.Uint64()) +} + +// MBufferToSmallIntSigned VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) MBufferToSmallIntSigned(mBufferHandle int32) int64 { + managedType := context.GetManagedTypesContext() + metering := context.GetMeteringContext() + + gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferToSmallIntSigned + err := metering.UseGasBoundedAndAddTracedGas(mBufferToSmallIntSignedName, gasToUse) + if err != nil { + context.FailExecution(err) + return 0 + } + + data, err := managedType.GetBytes(mBufferHandle) + if err != nil { + context.FailExecution(err) + return 1 + } + bigInt := twos.SetBytes(big.NewInt(0), data) + if !bigInt.IsInt64() { + context.FailExecution(vmhost.ErrBytesExceedInt64) + return 0 + } + return bigInt.Int64() +} + +// MBufferFromSmallIntUnsigned VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) MBufferFromSmallIntUnsigned(mBufferHandle int32, value int64) { + managedType := context.GetManagedTypesContext() + metering := context.GetMeteringContext() + + gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferFromSmallIntUnsigned + err := metering.UseGasBoundedAndAddTracedGas(mBufferFromSmallIntUnsignedName, gasToUse) + if err != nil { + context.FailExecution(err) + return + } + + valueBytes := big.NewInt(0).SetUint64(uint64(value)).Bytes() + managedType.SetBytes(mBufferHandle, valueBytes) +} + +// MBufferFromSmallIntSigned VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) MBufferFromSmallIntSigned(mBufferHandle int32, value int64) { + managedType := context.GetManagedTypesContext() + metering := context.GetMeteringContext() + + gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferFromSmallIntSigned + err := metering.UseGasBoundedAndAddTracedGas(mBufferFromSmallIntSignedName, gasToUse) + if err != nil { + context.FailExecution(err) + return + } + + valueBytes := big.NewInt(0).SetInt64(value).Bytes() + managedType.SetBytes(mBufferHandle, valueBytes) +} + // MBufferToBigFloat VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferToBigFloat(mBufferHandle, bigFloatHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(mBufferToBigFloatName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferToBigFloat err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } managedBuffer, err := managedType.GetBytes(mBufferHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ConsumeGasForBytes(managedBuffer) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } if managedType.EncodedBigFloatIsNotValid(managedBuffer) { - _ = context.WithFault(vmhost.ErrBigFloatWrongPrecision, runtime.BigFloatAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrBigFloatWrongPrecision) return 1 } value, err := managedType.GetBigFloatOrCreate(bigFloatHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } bigFloat := new(big.Float) err = bigFloat.GobDecode(managedBuffer) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } if bigFloat.IsInf() { - _ = context.WithFault(vmhost.ErrInfinityFloatOperation, runtime.BigFloatAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrInfinityFloatOperation) return 1 } @@ -562,28 +683,31 @@ func (context *VMHooksImpl) MBufferToBigFloat(mBufferHandle, bigFloatHandle int3 // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferFromBigFloat(mBufferHandle, bigFloatHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() metering.StartGasTracing(mBufferFromBigFloatName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferFromBigFloat err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } value, err := managedType.GetBigFloat(bigFloatHandle) - if context.WithFault(err, runtime.BigFloatAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } encodedFloat, err := value.GobEncode() - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ConsumeGasForBytes(encodedFloat) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -596,28 +720,31 @@ func (context *VMHooksImpl) MBufferFromBigFloat(mBufferHandle, bigFloatHandle in // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferStorageStore(keyHandle int32, sourceHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferStorageStore err := metering.UseGasBoundedAndAddTracedGas(mBufferStorageStoreName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } key, err := managedType.GetBytes(keyHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } sourceBytes, err := managedType.GetBytes(sourceHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } _, err = storage.SetStorage(key, sourceBytes) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -628,17 +755,18 @@ func (context *VMHooksImpl) MBufferStorageStore(keyHandle int32, sourceHandle in // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferStorageLoad(keyHandle int32, destinationHandle int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() key, err := managedType.GetBytes(keyHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } storageBytes, trieDepth, usedCache, err := storage.GetStorage(key) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } @@ -647,7 +775,8 @@ func (context *VMHooksImpl) MBufferStorageLoad(keyHandle int32, destinationHandl int64(trieDepth), metering.GasSchedule().ManagedBufferAPICost.MBufferStorageLoad, usedCache) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -661,21 +790,22 @@ func (context *VMHooksImpl) MBufferStorageLoad(keyHandle int32, destinationHandl func (context *VMHooksImpl) MBufferStorageLoadFromAddress(addressHandle, keyHandle, destinationHandle int32) { host := context.GetVMHost() managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() key, err := managedType.GetBytes(keyHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } address, err := managedType.GetBytes(addressHandle) if err != nil { - _ = context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return } storageBytes, err := StorageLoadFromAddressWithTypedArgs(host, address, key) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -691,13 +821,14 @@ func (context *VMHooksImpl) MBufferGetArgument(id int32, destinationHandle int32 gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferGetArgument err := metering.UseGasBoundedAndAddTracedGas(mBufferGetArgumentName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } args := runtime.Arguments() if int32(len(args)) <= id || id < 0 { - context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return 1 } managedType.SetBytes(destinationHandle, args[id]) @@ -710,24 +841,25 @@ func (context *VMHooksImpl) MBufferFinish(sourceHandle int32) int32 { managedType := context.GetManagedTypesContext() output := context.GetOutputContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() metering.StartGasTracing(mBufferFinishName) gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferFinish err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } sourceBytes, err := managedType.GetBytes(sourceHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.PersistPerByte, uint64(len(sourceBytes))) err = metering.UseGasBounded(gasToUse) if err != nil { - _ = context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) + context.FailExecution(err) return 1 } @@ -739,11 +871,10 @@ func (context *VMHooksImpl) MBufferFinish(sourceHandle int32) int32 { // @autogenerate(VMHooks) func (context *VMHooksImpl) MBufferSetRandom(destinationHandle int32, length int32) int32 { managedType := context.GetManagedTypesContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() if length < 1 { - _ = context.WithFault(vmhost.ErrLengthOfBufferNotCorrect, runtime.ManagedBufferAPIErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrLengthOfBufferNotCorrect) return -1 } @@ -751,14 +882,16 @@ func (context *VMHooksImpl) MBufferSetRandom(destinationHandle int32, length int lengthDependentGasToUse := math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(length)) gasToUse := math.AddUint64(baseGasToUse, lengthDependentGasToUse) err := metering.UseGasBoundedAndAddTracedGas(mBufferSetRandomName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } randomizer := managedType.GetRandReader() buffer := make([]byte, length) _, err = randomizer.Read(buffer) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } diff --git a/vmhost/vmhooks/manMapOps.go b/vmhost/vmhooks/manMapOps.go index db5c3076d..0b85de66c 100644 --- a/vmhost/vmhooks/manMapOps.go +++ b/vmhost/vmhooks/manMapOps.go @@ -16,7 +16,8 @@ func (context *VMHooksImpl) ManagedMapNew() int32 { gasToUse := metering.GasSchedule().ManagedMapAPICost.ManagedMapNew err := metering.UseGasBoundedAndAddTracedGas(managedMapNewName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -28,16 +29,17 @@ func (context *VMHooksImpl) ManagedMapNew() int32 { func (context *VMHooksImpl) ManagedMapPut(mMapHandle int32, keyHandle int32, valueHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().ManagedMapAPICost.ManagedMapPut err := metering.UseGasBoundedAndAddTracedGas(managedMapPutName, gasToUse) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ManagedMapPut(mMapHandle, keyHandle, valueHandle) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -49,16 +51,17 @@ func (context *VMHooksImpl) ManagedMapPut(mMapHandle int32, keyHandle int32, val func (context *VMHooksImpl) ManagedMapGet(mMapHandle int32, keyHandle int32, outValueHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().ManagedMapAPICost.ManagedMapGet err := metering.UseGasBoundedAndAddTracedGas(managedMapGetName, gasToUse) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ManagedMapGet(mMapHandle, keyHandle, outValueHandle) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -70,16 +73,17 @@ func (context *VMHooksImpl) ManagedMapGet(mMapHandle int32, keyHandle int32, out func (context *VMHooksImpl) ManagedMapRemove(mMapHandle int32, keyHandle int32, outValueHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().ManagedMapAPICost.ManagedMapRemove err := metering.UseGasBoundedAndAddTracedGas(managedMapRemoveName, gasToUse) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } err = managedType.ManagedMapRemove(mMapHandle, keyHandle, outValueHandle) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } @@ -91,16 +95,17 @@ func (context *VMHooksImpl) ManagedMapRemove(mMapHandle int32, keyHandle int32, func (context *VMHooksImpl) ManagedMapContains(mMapHandle int32, keyHandle int32) int32 { managedType := context.GetManagedTypesContext() metering := context.GetMeteringContext() - runtime := context.GetRuntimeContext() gasToUse := metering.GasSchedule().ManagedMapAPICost.ManagedMapContains err := metering.UseGasBoundedAndAddTracedGas(managedMapContainsName, gasToUse) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 2 } foundValue, err := managedType.ManagedMapContains(mMapHandle, keyHandle) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 2 } diff --git a/vmhost/vmhooks/managedei.go b/vmhost/vmhooks/managedei.go index 5543bd876..699b0f9d2 100644 --- a/vmhost/vmhooks/managedei.go +++ b/vmhost/vmhooks/managedei.go @@ -57,7 +57,8 @@ func (context *VMHooksImpl) ManagedSCAddress(destinationHandle int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetSCAddress err := metering.UseGasBoundedAndAddTracedGas(managedSCAddressName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -71,17 +72,18 @@ func (context *VMHooksImpl) ManagedSCAddress(destinationHandle int32) { func (context *VMHooksImpl) ManagedOwnerAddress(destinationHandle int32) { managedType := context.GetManagedTypesContext() blockchain := context.GetBlockchainContext() - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetOwnerAddress err := metering.UseGasBoundedAndAddTracedGas(managedOwnerAddressName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } owner, err := blockchain.GetOwnerAddress() - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -97,7 +99,8 @@ func (context *VMHooksImpl) ManagedCaller(destinationHandle int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCaller err := metering.UseGasBoundedAndAddTracedGas(managedCallerName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -114,7 +117,8 @@ func (context *VMHooksImpl) ManagedGetOriginalCallerAddr(destinationHandle int32 gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCaller err := metering.UseGasBoundedAndAddTracedGas(managedCallerName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -131,7 +135,8 @@ func (context *VMHooksImpl) ManagedGetRelayerAddr(destinationHandle int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCaller err := metering.UseGasBoundedAndAddTracedGas(managedCallerName, gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -149,23 +154,27 @@ func (context *VMHooksImpl) ManagedSignalError(errHandle int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.SignalError err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return } errBytes, err := managedType.GetBytes(errHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBytes(errBytes) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return } gasToUse = metering.GasSchedule().BaseOperationCost.PersistPerByte * uint64(len(errBytes)) err = metering.UseGasBounded(gasToUse) - if err != nil && context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return } @@ -185,17 +194,20 @@ func (context *VMHooksImpl) ManagedWriteLog( metering.StartGasTracing(managedWriteLogName) topics, sumOfTopicByteLengths, err := managedType.ReadManagedVecOfManagedBuffers(topicsHandle) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } dataBytes, err := managedType.GetBytes(dataHandle) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } err = managedType.ConsumeGasForBytes(dataBytes) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -207,7 +219,8 @@ func (context *VMHooksImpl) ManagedWriteLog( sumOfTopicByteLengths+dataByteLen) gasToUse = math.AddUint64(gasToUse, gasForData) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -223,7 +236,8 @@ func (context *VMHooksImpl) ManagedGetOriginalTxHash(resultHandle int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetOriginalTxHash err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -239,7 +253,8 @@ func (context *VMHooksImpl) ManagedGetStateRootHash(resultHandle int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetStateRootHash err := metering.UseGasBoundedAndAddTracedGas(managedGetStateRootHashName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -255,7 +270,8 @@ func (context *VMHooksImpl) ManagedGetBlockRandomSeed(resultHandle int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockRandomSeed err := metering.UseGasBoundedAndAddTracedGas(managedGetBlockRandomSeedName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -271,7 +287,8 @@ func (context *VMHooksImpl) ManagedGetPrevBlockRandomSeed(resultHandle int32) { gasToUse := metering.GasSchedule().BaseOpsAPICost.GetBlockRandomSeed err := metering.UseGasBoundedAndAddTracedGas(managedGetPrevBlockRandomSeedName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -281,20 +298,20 @@ func (context *VMHooksImpl) ManagedGetPrevBlockRandomSeed(resultHandle int32) { // ManagedGetReturnData VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) ManagedGetReturnData(resultID int32, resultHandle int32) { - runtime := context.GetRuntimeContext() output := context.GetOutputContext() metering := context.GetMeteringContext() managedType := context.GetManagedTypesContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetReturnData err := metering.UseGasBoundedAndAddTracedGas(managedGetReturnDataName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } returnData := output.ReturnData() if resultID >= int32(len(returnData)) || resultID < 0 { - _ = context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return } @@ -310,14 +327,16 @@ func (context *VMHooksImpl) ManagedGetMultiESDTCallValue(multiCallValueHandle in gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(managedGetMultiESDTCallValueName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } esdtTransfers := runtime.GetVMInput().ESDTTransfers multiCallBytes := writeESDTTransfersToBytes(managedType, esdtTransfers) err = managedType.ConsumeGasForBytes(multiCallBytes) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -332,14 +351,16 @@ func (context *VMHooksImpl) ManagedGetBackTransfers(esdtTransfersValueHandle int gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallValue err := metering.UseGasBoundedAndAddTracedGas(managedGetMultiESDTCallValueName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } esdtTransfers, transferValue := managedType.GetBackTransfers() multiCallBytes := writeESDTTransfersToBytes(managedType, esdtTransfers) err = managedType.ConsumeGasForBytes(multiCallBytes) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -351,31 +372,31 @@ func (context *VMHooksImpl) ManagedGetBackTransfers(esdtTransfersValueHandle int // ManagedGetESDTBalance VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) ManagedGetESDTBalance(addressHandle int32, tokenIDHandle int32, nonce int64, valueHandle int32) { - runtime := context.GetRuntimeContext() metering := context.GetMeteringContext() blockchain := context.GetBlockchainContext() managedType := context.GetManagedTypesContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetExternalBalance err := metering.UseGasBoundedAndAddTracedGas(managedGetESDTBalanceName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } address, err := managedType.GetBytes(addressHandle) if err != nil { - _ = context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return } tokenID, err := managedType.GetBytes(tokenIDHandle) if err != nil { - _ = context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return } esdtToken, err := blockchain.GetESDTToken(address, tokenID, uint64(nonce)) if err != nil { - _ = context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return } @@ -406,7 +427,6 @@ func ManagedGetESDTTokenDataWithHost( tokenIDHandle int32, nonce int64, valueHandle, propertiesHandle, hashHandle, nameHandle, attributesHandle, creatorHandle, royaltiesHandle, urisHandle int32) { - runtime := host.Runtime() metering := host.Metering() blockchain := host.Blockchain() managedType := host.ManagedTypes() @@ -414,24 +434,25 @@ func ManagedGetESDTTokenDataWithHost( gasToUse := metering.GasSchedule().BaseOpsAPICost.GetExternalBalance err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } address, err := managedType.GetBytes(addressHandle) if err != nil { - _ = WithFaultAndHost(host, vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrArgOutOfRange) return } tokenID, err := managedType.GetBytes(tokenIDHandle) if err != nil { - _ = WithFaultAndHost(host, vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrArgOutOfRange) return } esdtToken, err := blockchain.GetESDTToken(address, tokenID, uint64(nonce)) if err != nil { - _ = WithFaultAndHost(host, vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrArgOutOfRange) return } @@ -442,29 +463,34 @@ func ManagedGetESDTTokenDataWithHost( if esdtToken.TokenMetaData != nil { managedType.SetBytes(hashHandle, esdtToken.TokenMetaData.Hash) err = managedType.ConsumeGasForBytes(esdtToken.TokenMetaData.Hash) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } managedType.SetBytes(nameHandle, esdtToken.TokenMetaData.Name) err = managedType.ConsumeGasForBytes(esdtToken.TokenMetaData.Name) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } managedType.SetBytes(attributesHandle, esdtToken.TokenMetaData.Attributes) err = managedType.ConsumeGasForBytes(esdtToken.TokenMetaData.Attributes) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } managedType.SetBytes(creatorHandle, esdtToken.TokenMetaData.Creator) err = managedType.ConsumeGasForBytes(esdtToken.TokenMetaData.Creator) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } royalties := managedType.GetBigIntOrCreate(royaltiesHandle) royalties.SetUint64(uint64(esdtToken.TokenMetaData.Royalties)) err = managedType.WriteManagedVecOfManagedBuffers(esdtToken.TokenMetaData.URIs, urisHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } } @@ -502,12 +528,14 @@ func ManagedAsyncCallWithHost( gasSchedule := metering.GasSchedule() gasToUse := gasSchedule.BaseOpsAPICost.AsyncCallStep err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } vmInput, err := readDestinationFunctionArguments(host, destHandle, functionHandle, argumentsHandle) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -515,13 +543,14 @@ func ManagedAsyncCallWithHost( value, err := managedType.GetBigInt(valueHandle) if err != nil { - _ = WithFaultAndHost(host, vmhost.ErrArgOutOfRange, host.Runtime().BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrArgOutOfRange) return } gasToUse = math.MulUint64(gasSchedule.BaseOperationCost.DataCopyPerByte, uint64(len(data))) err = metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } @@ -530,7 +559,8 @@ func ManagedAsyncCallWithHost( runtime.SetRuntimeBreakpointValue(vmhost.BreakpointOutOfGas) return } - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } } @@ -552,11 +582,11 @@ func (context *VMHooksImpl) ManagedCreateAsyncCall( ) int32 { host := context.GetVMHost() - runtime := host.Runtime() managedType := host.ManagedTypes() vmInput, err := readDestinationFunctionArguments(host, destHandle, functionHandle, argumentsHandle) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -564,22 +594,25 @@ func (context *VMHooksImpl) ManagedCreateAsyncCall( value, err := managedType.GetBigInt(valueHandle) if err != nil { - _ = context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return 1 } successFunc, err := context.MemLoad(successOffset, successLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } errorFunc, err := context.MemLoad(errorOffset, errorLength) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } callbackClosure, err := managedType.GetBytes(callbackClosureHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -607,7 +640,6 @@ func GetCallbackClosureWithHost( host vmhost.VMHost, callbackClosureHandle int32, ) { - runtime := host.Runtime() async := host.Async() metering := host.Metering() managedTypes := host.ManagedTypes() @@ -616,12 +648,14 @@ func GetCallbackClosureWithHost( gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCallbackClosure err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.ManagedBufferAPIErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } callbackClosure, err := async.GetCallbackClosure() - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -647,22 +681,26 @@ func (context *VMHooksImpl) ManagedUpgradeFromSourceContract( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return } vmInput, err := readDestinationValueArguments(host, destHandle, valueHandle, argumentsHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } sourceContractAddress, err := managedType.GetBytes(addressHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } codeMetadata, err := managedType.GetBytes(codeMetadataHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -678,7 +716,8 @@ func (context *VMHooksImpl) ManagedUpgradeFromSourceContract( codeMetadata, ) err = setReturnDataIfExists(host, lenReturnData, resultHandle) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } } @@ -702,26 +741,31 @@ func (context *VMHooksImpl) ManagedUpgradeContract( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return } vmInput, err := readDestinationValueArguments(host, destHandle, valueHandle, argumentsHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } codeMetadata, err := managedType.GetBytes(codeMetadataHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } code, err := managedType.GetBytes(codeHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -729,7 +773,8 @@ func (context *VMHooksImpl) ManagedUpgradeContract( upgradeContract(host, vmInput.destination, code, codeMetadata, vmInput.value.Bytes(), vmInput.arguments, gas) err = setReturnDataIfExists(host, lenReturnData, resultHandle) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } } @@ -763,17 +808,20 @@ func ManagedDeleteContractWithHost( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return } calledSCAddress, err := managedType.GetBytes(destHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } data, _, err := managedType.ReadManagedVecOfManagedBuffers(argumentsHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } @@ -804,17 +852,20 @@ func (context *VMHooksImpl) ManagedDeployFromSourceContract( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return -1 } vmInput, err := readDestinationValueArguments(host, addressHandle, valueHandle, argumentsHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } codeMetadata, err := managedType.GetBytes(codeMetadataHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } @@ -828,13 +879,15 @@ func (context *VMHooksImpl) ManagedDeployFromSourceContract( vmInput.arguments, gas, ) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } managedType.SetBytes(resultAddressHandle, newAddress) err = setReturnDataIfExists(host, lenReturnData, resultHandle) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -860,46 +913,54 @@ func (context *VMHooksImpl) ManagedCreateContract( gasToUse := metering.GasSchedule().BaseOpsAPICost.CreateContract err := metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return -1 } sender := runtime.GetContextAddress() value, err := managedType.GetBigInt(valueHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } data, actualLen, err := managedType.ReadManagedVecOfManagedBuffers(argumentsHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, actualLen) err = metering.UseGasBounded(gasToUse) - if context.WithFault(err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + context.FailExecution(err) return -1 } codeMetadata, err := managedType.GetBytes(codeMetadataHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } code, err := managedType.GetBytes(codeHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } lenReturnData := len(host.Output().ReturnData()) newAddress, err := createContract(sender, data, value, gas, code, codeMetadata, host, CreateContract) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return 1 } managedType.SetBytes(resultAddressHandle, newAddress) err = setReturnDataIfExists(host, lenReturnData, resultHandle) - if WithFaultAndHost(host, err, runtime.UseGasBoundedShouldFailExecution()) { + if err != nil && runtime.UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return 1 } @@ -934,7 +995,8 @@ func (context *VMHooksImpl) ManagedExecuteReadOnly( metering.StartGasTracing(managedExecuteReadOnlyName) vmInput, err := readDestinationFunctionArguments(host, addressHandle, functionHandle, argumentsHandle) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -947,7 +1009,8 @@ func (context *VMHooksImpl) ManagedExecuteReadOnly( vmInput.arguments, ) err = setReturnDataIfExists(host, lenReturnData, resultHandle) - if WithFaultAndHost(host, err, host.Runtime().UseGasBoundedShouldFailExecution()) { + if err != nil && host.Runtime().UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return -1 } @@ -969,7 +1032,8 @@ func (context *VMHooksImpl) ManagedExecuteOnSameContext( metering.StartGasTracing(managedExecuteOnSameContextName) vmInput, err := readDestinationValueFunctionArguments(host, addressHandle, valueHandle, functionHandle, argumentsHandle) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -983,7 +1047,8 @@ func (context *VMHooksImpl) ManagedExecuteOnSameContext( vmInput.arguments, ) err = setReturnDataIfExists(host, lenReturnData, resultHandle) - if WithFaultAndHost(host, err, host.Runtime().UseGasBoundedShouldFailExecution()) { + if err != nil && host.Runtime().UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return -1 } @@ -1005,7 +1070,8 @@ func (context *VMHooksImpl) ManagedExecuteOnDestContext( metering.StartGasTracing(managedExecuteOnDestContextName) vmInput, err := readDestinationValueFunctionArguments(host, addressHandle, valueHandle, functionHandle, argumentsHandle) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1019,7 +1085,8 @@ func (context *VMHooksImpl) ManagedExecuteOnDestContext( vmInput.arguments, ) err = setReturnDataIfExists(host, lenReturnData, resultHandle) - if WithFaultAndHost(host, err, host.Runtime().UseGasBoundedShouldFailExecution()) { + if err != nil && host.Runtime().UseGasBoundedShouldFailExecution() { + FailExecution(host, err) return -1 } @@ -1042,12 +1109,14 @@ func (context *VMHooksImpl) ManagedMultiTransferESDTNFTExecute( metering.StartGasTracing(managedMultiTransferESDTNFTExecuteName) vmInput, err := readDestinationFunctionArguments(host, dstHandle, functionHandle, argumentsHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } transfers, err := readESDTTransfers(managedType, runtime, tokenTransfersHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1078,22 +1147,25 @@ func (context *VMHooksImpl) ManagedMultiTransferESDTNFTExecuteByUser( metering.StartGasTracing(managedMultiTransferESDTNFTExecuteByUser) if !host.IsAllowedToExecute(managedMultiTransferESDTNFTExecuteByUser) { - _ = WithFaultAndHost(host, vmhost.ErrOpcodeIsNotAllowed, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, vmhost.ErrOpcodeIsNotAllowed) return -1 } user, err := managedType.GetBytes(userHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } vmInput, err := readDestinationFunctionArguments(host, dstHandle, functionHandle, argumentsHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } transfers, err := readESDTTransfers(managedType, runtime, tokenTransfersHandle) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1122,7 +1194,8 @@ func (context *VMHooksImpl) ManagedTransferValueExecute( metering.StartGasTracing(managedTransferValueExecuteName) vmInput, err := readDestinationValueFunctionArguments(host, dstHandle, valueHandle, functionHandle, argumentsHandle) - if WithFaultAndHost(host, err, host.Runtime().BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } @@ -1151,31 +1224,31 @@ func ManagedIsESDTFrozenWithHost( addressHandle int32, tokenIDHandle int32, nonce int64) int32 { - runtime := host.Runtime() metering := host.Metering() blockchain := host.Blockchain() managedType := host.ManagedTypes() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetExternalBalance err := metering.UseGasBoundedAndAddTracedGas(managedIsESDTFrozenName, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } address, err := managedType.GetBytes(addressHandle) if err != nil { - _ = WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return -1 } tokenID, err := managedType.GetBytes(tokenIDHandle) if err != nil { - _ = WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return -1 } esdtToken, err := blockchain.GetESDTToken(address, tokenID, uint64(nonce)) if err != nil { - _ = WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return -1 } @@ -1194,20 +1267,20 @@ func (context *VMHooksImpl) ManagedIsESDTLimitedTransfer(tokenIDHandle int32) in } func ManagedIsESDTLimitedTransferWithHost(host vmhost.VMHost, tokenIDHandle int32) int32 { - runtime := host.Runtime() metering := host.Metering() blockchain := host.Blockchain() managedType := host.ManagedTypes() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetExternalBalance err := metering.UseGasBoundedAndAddTracedGas(managedIsESDTLimitedTransferName, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } tokenID, err := managedType.GetBytes(tokenIDHandle) if err != nil { - _ = WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return -1 } @@ -1226,20 +1299,20 @@ func (context *VMHooksImpl) ManagedIsESDTPaused(tokenIDHandle int32) int32 { } func ManagedIsESDTPausedWithHost(host vmhost.VMHost, tokenIDHandle int32) int32 { - runtime := host.Runtime() metering := host.Metering() blockchain := host.Blockchain() managedType := host.ManagedTypes() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetExternalBalance err := metering.UseGasBoundedAndAddTracedGas(managedIsESDTPausedName, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } tokenID, err := managedType.GetBytes(tokenIDHandle) if err != nil { - _ = WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return -1 } @@ -1258,19 +1331,19 @@ func (context *VMHooksImpl) ManagedBufferToHex(sourceHandle int32, destHandle in } func ManagedBufferToHexWithHost(host vmhost.VMHost, sourceHandle int32, destHandle int32) { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() gasToUse := metering.GasSchedule().ManagedBufferAPICost.MBufferSetBytes err := metering.UseGasBoundedAndAddTracedGas(managedBufferToHexName, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } mBuff, err := managedType.GetBytes(sourceHandle) if err != nil { - WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return } @@ -1286,31 +1359,32 @@ func (context *VMHooksImpl) ManagedGetCodeMetadata(addressHandle int32, response } func ManagedGetCodeMetadataWithHost(host vmhost.VMHost, addressHandle int32, responseHandle int32) { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() gasToUse := metering.GasSchedule().BaseOpsAPICost.GetCodeMetadata err := metering.UseGasBoundedAndAddTracedGas(managedGetCodeMetadataName, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } gasToUse = metering.GasSchedule().ManagedBufferAPICost.MBufferSetBytes err = metering.UseGasBoundedAndAddTracedGas(managedGetCodeMetadataName, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return } mBuffAddress, err := managedType.GetBytes(addressHandle) if err != nil { - WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return } contract, err := host.Blockchain().GetUserAccount(mBuffAddress) if err != nil || check.IfNil(contract) { - WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return } @@ -1327,19 +1401,19 @@ func (context *VMHooksImpl) ManagedIsBuiltinFunction(functionNameHandle int32) i } func ManagedIsBuiltinFunctionWithHost(host vmhost.VMHost, functionNameHandle int32) int32 { - runtime := host.Runtime() metering := host.Metering() managedType := host.ManagedTypes() gasToUse := metering.GasSchedule().BaseOpsAPICost.IsBuiltinFunction err := metering.UseGasBoundedAndAddTracedGas(managedIsBuiltinFunction, gasToUse) - if WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + FailExecution(host, err) return -1 } mBuffFunctionName, err := managedType.GetBytes(functionNameHandle) if err != nil { - WithFaultAndHost(host, err, runtime.BaseOpsErrorShouldFailExecution()) + FailExecution(host, err) return -1 } diff --git a/vmhost/vmhooks/smallIntOps.go b/vmhost/vmhooks/smallIntOps.go index 0fa179457..8b6be7949 100644 --- a/vmhost/vmhooks/smallIntOps.go +++ b/vmhost/vmhooks/smallIntOps.go @@ -31,20 +31,21 @@ func (context *VMHooksImpl) SmallIntGetUnsignedArgument(id int32) int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.Int64GetArgument err := metering.UseGasBoundedAndAddTracedGas(smallIntGetUnsignedArgumentName, gasToUse) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } args := runtime.Arguments() if id < 0 || id >= int32(len(args)) { - _ = context.WithFault(vmhost.ErrArgIndexOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgIndexOutOfRange) return 0 } arg := args[id] argBigInt := big.NewInt(0).SetBytes(arg) if !argBigInt.IsUint64() { - _ = context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return 0 } return int64(argBigInt.Uint64()) @@ -58,20 +59,21 @@ func (context *VMHooksImpl) SmallIntGetSignedArgument(id int32) int64 { gasToUse := metering.GasSchedule().BaseOpsAPICost.Int64GetArgument err := metering.UseGasBoundedAndAddTracedGas(smallIntGetSignedArgumentName, gasToUse) - if context.WithFault(err, runtime.ManagedMapAPIErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 1 } args := runtime.Arguments() if id < 0 || id >= int32(len(args)) { - _ = context.WithFault(vmhost.ErrArgIndexOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgIndexOutOfRange) return 0 } arg := args[id] argBigInt := twos.SetBytes(big.NewInt(0), arg) if !argBigInt.IsInt64() { - _ = context.WithFault(vmhost.ErrArgOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrArgOutOfRange) return 0 } return argBigInt.Int64() @@ -85,7 +87,8 @@ func (context *VMHooksImpl) SmallIntFinishUnsigned(value int64) { gasToUse := metering.GasSchedule().BaseOpsAPICost.Int64Finish err := metering.UseGasBoundedAndAddTracedGas(smallIntFinishUnsignedName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -101,7 +104,8 @@ func (context *VMHooksImpl) SmallIntFinishSigned(value int64) { gasToUse := metering.GasSchedule().BaseOpsAPICost.Int64Finish err := metering.UseGasBoundedAndAddTracedGas(smallIntFinishSignedName, gasToUse) - if context.WithFault(err, context.GetRuntimeContext().BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return } @@ -112,24 +116,26 @@ func (context *VMHooksImpl) SmallIntFinishSigned(value int64) { // SmallIntStorageStoreUnsigned VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) SmallIntStorageStoreUnsigned(keyOffset executor.MemPtr, keyLength executor.MemLength, value int64) int32 { - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.Int64StorageStore err := metering.UseGasBoundedAndAddTracedGas(smallIntStorageStoreSignedName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } valueBytes := big.NewInt(0).SetUint64(uint64(value)).Bytes() storageStatus, err := storage.SetStorage(key, valueBytes) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -139,24 +145,26 @@ func (context *VMHooksImpl) SmallIntStorageStoreUnsigned(keyOffset executor.MemP // SmallIntStorageStoreSigned VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) SmallIntStorageStoreSigned(keyOffset executor.MemPtr, keyLength executor.MemLength, value int64) int32 { - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() gasToUse := metering.GasSchedule().BaseOpsAPICost.Int64StorageStore err := metering.UseGasBoundedAndAddTracedGas(smallIntStorageStoreSignedName, gasToUse) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } valueBytes := twos.ToBytes(big.NewInt(value)) storageStatus, err := storage.SetStorage(key, valueBytes) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } @@ -166,17 +174,18 @@ func (context *VMHooksImpl) SmallIntStorageStoreSigned(keyOffset executor.MemPtr // SmallIntStorageLoadUnsigned VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) SmallIntStorageLoadUnsigned(keyOffset executor.MemPtr, keyLength executor.MemLength) int64 { - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } data, trieDepth, usedCache, err := storage.GetStorage(key) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } @@ -185,13 +194,14 @@ func (context *VMHooksImpl) SmallIntStorageLoadUnsigned(keyOffset executor.MemPt int64(trieDepth), metering.GasSchedule().BaseOpsAPICost.Int64StorageLoad, usedCache) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } valueBigInt := big.NewInt(0).SetBytes(data) if !valueBigInt.IsUint64() { - _ = context.WithFault(vmhost.ErrStorageValueOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrStorageValueOutOfRange) return 0 } @@ -201,17 +211,18 @@ func (context *VMHooksImpl) SmallIntStorageLoadUnsigned(keyOffset executor.MemPt // SmallIntStorageLoadSigned VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) SmallIntStorageLoadSigned(keyOffset executor.MemPtr, keyLength executor.MemLength) int64 { - runtime := context.GetRuntimeContext() storage := context.GetStorageContext() metering := context.GetMeteringContext() key, err := context.MemLoad(keyOffset, keyLength) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } data, trieDepth, usedCache, err := storage.GetStorage(key) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return 0 } @@ -220,13 +231,14 @@ func (context *VMHooksImpl) SmallIntStorageLoadSigned(keyOffset executor.MemPtr, int64(trieDepth), metering.GasSchedule().BaseOpsAPICost.Int64StorageLoad, usedCache) - if context.WithFault(err, runtime.BaseOpsErrorShouldFailExecution()) { + if err != nil { + context.FailExecution(err) return -1 } valueBigInt := twos.SetBytes(big.NewInt(0), data) if !valueBigInt.IsInt64() { - _ = context.WithFault(vmhost.ErrStorageValueOutOfRange, runtime.BaseOpsErrorShouldFailExecution()) + context.FailExecution(vmhost.ErrStorageValueOutOfRange) return 0 } diff --git a/vmhost/vmhooks/vmHooksImpl.go b/vmhost/vmhooks/vmHooksImpl.go index 2466eb2f1..5324caa16 100644 --- a/vmhost/vmhooks/vmHooksImpl.go +++ b/vmhost/vmhooks/vmHooksImpl.go @@ -92,22 +92,19 @@ func (context *VMHooksImpl) GetStorageContext() vmhost.StorageContext { return context.host.Storage() } -// WithFault handles an error, taking into account whether it should completely -// fail the execution of a contract or not. -func (context *VMHooksImpl) WithFault(err error, failExecution bool) bool { - return WithFaultAndHost(context.host, err, failExecution) +// FailExecution fails the execution with the provided error +func (context *VMHooksImpl) FailExecution(err error) { + FailExecution(context.host, err) } -// WithFaultAndHost fails the execution with the provided error -func WithFaultAndHost(host vmhost.VMHost, err error, failExecution bool) bool { - if err == nil || !failExecution { - return false +// FailExecution fails the execution with the provided error +func FailExecution(host vmhost.VMHost, err error) { + if err == nil { + return } runtime := host.Runtime() metering := host.Metering() _ = metering.UseGasBounded(metering.GasLeft()) runtime.FailExecution(err) - - return true } diff --git a/vmhost/vmhookstest/manMaps_test.go b/vmhost/vmhookstest/manMaps_test.go index c3de78c46..6e76734ec 100644 --- a/vmhost/vmhookstest/manMaps_test.go +++ b/vmhost/vmhookstest/manMaps_test.go @@ -28,7 +28,7 @@ func TestManagedMap(t *testing.T) { valueBuff := managedType.NewManagedBufferFromBytes(value) err := managedType.ManagedMapPut(mMap, keyBuff, valueBuff) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) return instance } @@ -36,19 +36,19 @@ func TestManagedMap(t *testing.T) { make([]byte, len(value))) err = managedType.ManagedMapGet(mMap, keyBuff, outValueBuf) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) return instance } outValueBytes, err := managedType.GetBytes(outValueBuf) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) return instance } host.Output().Finish(outValueBytes) contains, err := managedType.ManagedMapContains(mMap, keyBuff) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) return instance } if contains { @@ -61,14 +61,14 @@ func TestManagedMap(t *testing.T) { make([]byte, len(value))) err = managedType.ManagedMapRemove(mMap, keyBuff, outValueBuf) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) return instance } host.Output().Finish(outValueBytes) containsAfterRemove, err := managedType.ManagedMapContains(mMap, keyBuff) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) return instance } if containsAfterRemove { @@ -81,12 +81,12 @@ func TestManagedMap(t *testing.T) { make([]byte, len(value))) err = managedType.ManagedMapGet(mMap, keyBuff, outValueBuf) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) return instance } outValueBytes, err = managedType.GetBytes(outValueBuf) if err != nil { - vmhooks.WithFaultAndHost(host, err, true) + vmhooks.FailExecution(host, err) return instance } host.Output().Finish(outValueBytes) diff --git a/wasmer/bridge.go b/wasmer/bridge.go deleted file mode 100644 index b00918dff..000000000 --- a/wasmer/bridge.go +++ /dev/null @@ -1,382 +0,0 @@ -package wasmer - -// #cgo LDFLAGS: -Wl,-rpath,${SRCDIR} -L${SRCDIR} -// #cgo linux,amd64 LDFLAGS:-lwasmer_linux_amd64 -// #cgo linux,arm64 LDFLAGS:-lwasmer_linux_arm64_shim -// #cgo darwin,amd64 LDFLAGS:-lwasmer_darwin_amd64 -// #cgo darwin,arm64 LDFLAGS:-lwasmer_darwin_arm64_shim -// #include "./wasmer.h" -// -import "C" -import ( - "unsafe" -) - -type cBool C.bool -type cChar C.char -type cInt C.int -type cUchar C.uchar -type cUint C.uint -type cUint32T C.uint32_t -type cUint8T C.uint8_t -type cWasmerByteArray C.wasmer_byte_array -type cWasmerExportFuncT C.wasmer_export_func_t -type cWasmerExportT C.wasmer_export_t -type cWasmerExportsT C.wasmer_exports_t -type cWasmerImportExportKind C.wasmer_import_export_kind -type cWasmerImportExportValue C.wasmer_import_export_value -type cWasmerImportFuncT C.wasmer_import_func_t -type cWasmerImportT C.wasmer_import_t -type cWasmerInstanceContextT C.wasmer_instance_context_t -type cWasmerInstanceT C.wasmer_instance_t -type cWasmerMemoryT C.wasmer_memory_t -type cWasmerResultT C.wasmer_result_t -type cWasmerValueT C.wasmer_value_t -type cWasmerValueTag C.wasmer_value_tag -type cWasmerCompilationOptions C.wasmer_compilation_options_t - -const cWasmFunction = C.WASM_FUNCTION -const cWasmGlobal = C.WASM_GLOBAL -const cWasmI32 = C.WASM_I32 -const cWasmI64 = C.WASM_I64 -const cWasmMemory = C.WASM_MEMORY -const cWasmTable = C.WASM_TABLE -const cWasmerOk = C.WASMER_OK - -func cNewWasmerImportT(moduleName string, importName string, function *cWasmerImportFuncT) cWasmerImportT { - var importedFunction C.wasmer_import_t - importedFunction.module_name = (C.wasmer_byte_array)(cGoStringToWasmerByteArray(moduleName)) - importedFunction.import_name = (C.wasmer_byte_array)(cGoStringToWasmerByteArray(importName)) - importedFunction.tag = cWasmFunction - - var pointer = (**C.wasmer_import_func_t)(unsafe.Pointer(&importedFunction.value)) - *pointer = (*C.wasmer_import_func_t)(function) - - return (cWasmerImportT)(importedFunction) -} - -func cWasmerInstanceGetPointsUsed(instance *cWasmerInstanceT) uint64 { - return uint64(C.wasmer_instance_get_points_used( - (*C.wasmer_instance_t)(instance), - )) -} - -func cWasmerInstanceSetPointsUsed(instance *cWasmerInstanceT, points uint64) { - C.wasmer_instance_set_points_used( - (*C.wasmer_instance_t)(instance), - (C.uint64_t)(points), - ) -} - -func cWasmerInstanceSetGasLimit(instance *cWasmerInstanceT, gasLimit uint64) { - C.wasmer_instance_set_points_limit( - (*C.wasmer_instance_t)(instance), - (C.uint64_t)(gasLimit), - ) -} - -func cWasmerInstanceSetBreakpointValue(instance *cWasmerInstanceT, value uint64) { - C.wasmer_instance_set_runtime_breakpoint_value( - (*C.wasmer_instance_t)(instance), - (C.uint64_t)(value), - ) -} - -func cWasmerInstanceGetBreakpointValue(instance *cWasmerInstanceT) uint64 { - return uint64(C.wasmer_instance_get_runtime_breakpoint_value( - (*C.wasmer_instance_t)(instance), - )) -} - -func cWasmerInstanceIsFunctionImported(instance *cWasmerInstanceT, name string) bool { - var functionName = cCString(name) - return bool(C.wasmer_instance_is_function_imported( - (*C.wasmer_instance_t)(instance), - (*C.char)(unsafe.Pointer(functionName)), - )) -} - -func cWasmerInstanceEnableRkyv() { - C.wasmer_instance_enable_rkyv() -} - -func cWasmerInstanceDisableRkyv() { - C.wasmer_instance_disable_rkyv() -} - -func cWasmerSetSIGSEGVPassthrough() { - C.wasmer_set_sigsegv_passthrough() -} - -func cWasmerForceInstallSighandlers() { - C.wasmer_force_install_sighandlers() -} - -func cWasmerInstanceCache( - instance *cWasmerInstanceT, - cacheBytes **cUchar, - cacheLen *cUint32T, -) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_instance_cache( - (*C.wasmer_instance_t)(instance), - (**C.uchar)(unsafe.Pointer(cacheBytes)), - (*C.uint32_t)(cacheLen), - )) -} - -func cWasmerInstanceFromCache( - instance **cWasmerInstanceT, - cacheBytes *cUchar, - cacheLen cUint32T, - options *cWasmerCompilationOptions, -) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_instance_from_cache( - (**C.wasmer_instance_t)(unsafe.Pointer(instance)), - (*C.uchar)(cacheBytes), - (C.uint32_t)(cacheLen), - (*C.wasmer_compilation_options_t)(options), - )) -} - -func cWasmerCacheImportObjectFromImports( - imports *cWasmerImportT, - importsLength cInt, -) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_import_object_cache_from_imports( - (*C.wasmer_import_t)(imports), - (C.uint32_t)(importsLength), - )) -} - -func cWasmerSetOpcodeCosts(opcodeCostArray *[opcodeCount]uint32) { - C.wasmer_set_opcode_costs( - (*C.uint32_t)(unsafe.Pointer(opcodeCostArray)), - ) -} - -func cWasmerExportFuncParams(function *cWasmerExportFuncT, parameters *cWasmerValueTag, parametersLength cUint32T) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_export_func_params( - (*C.wasmer_export_func_t)(function), - (*C.wasmer_value_tag)(parameters), - (C.uint32_t)(parametersLength), - )) -} - -func cWasmerExportFuncParamsArity(function *cWasmerExportFuncT, result *cUint32T) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_export_func_params_arity( - (*C.wasmer_export_func_t)(function), - (*C.uint32_t)(result), - )) -} - -func cWasmerExportFuncResultsArity(function *cWasmerExportFuncT, result *cUint32T) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_export_func_returns_arity( - (*C.wasmer_export_func_t)(function), - (*C.uint32_t)(result), - )) -} - -func cWasmerExportKind(export *cWasmerExportT) cWasmerImportExportKind { - return (cWasmerImportExportKind)(C.wasmer_export_kind( - (*C.wasmer_export_t)(export), - )) -} - -func cWasmerExportName(export *cWasmerExportT) cWasmerByteArray { - return (cWasmerByteArray)(C.wasmer_export_name( - (*C.wasmer_export_t)(export), - )) -} - -func cWasmerExportToFunc(export *cWasmerExportT) *cWasmerExportFuncT { - return (*cWasmerExportFuncT)(C.wasmer_export_to_func( - (*C.wasmer_export_t)(export), - )) -} - -func cWasmerExportToMemory(export *cWasmerExportT, memory **cWasmerMemoryT) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_export_to_memory( - (*C.wasmer_export_t)(export), - (**C.wasmer_memory_t)(unsafe.Pointer(memory)), - )) -} - -func cWasmerExportsDestroy(exports *cWasmerExportsT) { - C.wasmer_exports_destroy( - (*C.wasmer_exports_t)(exports), - ) -} - -func cWasmerExportsGet(exports *cWasmerExportsT, index cInt) *cWasmerExportT { - return (*cWasmerExportT)(C.wasmer_exports_get( - (*C.wasmer_exports_t)(exports), - (C.int)(index), - )) -} - -func cWasmerExportsLen(exports *cWasmerExportsT) cInt { - return (cInt)(C.wasmer_exports_len( - (*C.wasmer_exports_t)(exports), - )) -} - -func cWasmerImportFuncDestroy(function *cWasmerImportFuncT) { - C.wasmer_import_func_destroy( - (*C.wasmer_import_func_t)(function), - ) -} - -func cWasmerImportFuncNew( - function unsafe.Pointer, - parametersSignature *cWasmerValueTag, - parametersLength cUint, - resultsSignature *cWasmerValueTag, - resultsLength cUint, -) *cWasmerImportFuncT { - return (*cWasmerImportFuncT)(C.wasmer_import_func_new( - (*[0]byte)(function), - (*C.wasmer_value_tag)(parametersSignature), - (C.uint)(parametersLength), - (*C.wasmer_value_tag)(resultsSignature), - (C.uint)(resultsLength), - )) -} - -func cWasmerInstanceCall( - instance *cWasmerInstanceT, - name *cChar, - parameters *cWasmerValueT, - parametersLength cUint32T, - results *cWasmerValueT, - resultsLength cUint32T, -) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_instance_call( - (*C.wasmer_instance_t)(instance), - (*C.char)(name), - (*C.wasmer_value_t)(parameters), - (C.uint32_t)(parametersLength), - (*C.wasmer_value_t)(results), - (C.uint32_t)(resultsLength), - )) -} - -func cWasmerInstanceContextGet(instance *cWasmerInstanceT) *cWasmerInstanceContextT { - return (*cWasmerInstanceContextT)(C.wasmer_instance_context_get( - (*C.wasmer_instance_t)(instance), - )) -} - -func cWasmerInstanceContextDataGet(instanceContext *cWasmerInstanceContextT) unsafe.Pointer { - return unsafe.Pointer(C.wasmer_instance_context_data_get( - (*C.wasmer_instance_context_t)(instanceContext), - )) -} - -func cWasmerInstanceContextDataSet(instance *cWasmerInstanceT, dataPointer unsafe.Pointer) { - C.wasmer_instance_context_data_set( - (*C.wasmer_instance_t)(instance), - dataPointer, - ) -} - -func cWasmerInstanceContextMemory(instanceContext *cWasmerInstanceContextT) *cWasmerMemoryT { - return (*cWasmerMemoryT)(C.wasmer_instance_context_memory( - (*C.wasmer_instance_context_t)(instanceContext), - 0, - )) -} - -func cWasmerInstanceReset(instance *cWasmerInstanceT) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_instance_reset( - (*C.wasmer_instance_t)(instance), - )) -} - -func cWasmerInstanceDestroy(instance *cWasmerInstanceT) { - C.wasmer_instance_destroy( - (*C.wasmer_instance_t)(instance), - ) -} - -func cWasmerInstanceExports(instance *cWasmerInstanceT, exports **cWasmerExportsT) { - C.wasmer_instance_exports( - (*C.wasmer_instance_t)(instance), - (**C.wasmer_exports_t)(unsafe.Pointer(exports)), - ) -} - -func cWasmerInstantiateWithOptions( - instance **cWasmerInstanceT, - wasmBytes *cUchar, - wasmBytesLength cUint, - options *cWasmerCompilationOptions, -) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_instantiate_with_options( - (**C.wasmer_instance_t)(unsafe.Pointer(instance)), - (*C.uchar)(wasmBytes), - (C.uint)(wasmBytesLength), - (*C.wasmer_compilation_options_t)(options), - )) -} - -func cWasmerLastErrorLength() cInt { - return (cInt)(C.wasmer_last_error_length()) -} - -func cWasmerLastErrorMessage(buffer *cChar, length cInt) cInt { - return (cInt)(C.wasmer_last_error_message( - (*C.char)(buffer), - (C.int)(length), - )) -} - -func cWasmerMemoryData(memory *cWasmerMemoryT) *cUint8T { - return (*cUint8T)(C.wasmer_memory_data( - (*C.wasmer_memory_t)(memory), - )) -} - -func cWasmerMemoryDataLength(memory *cWasmerMemoryT) cUint32T { - return (cUint32T)(C.wasmer_memory_data_length( - (*C.wasmer_memory_t)(memory), - )) -} - -func cWasmerMemoryGrow(memory *cWasmerMemoryT, numberOfPages cUint32T) cWasmerResultT { - return (cWasmerResultT)(C.wasmer_memory_grow( - (*C.wasmer_memory_t)(memory), - (C.uint32_t)(numberOfPages), - )) -} - -func cWasmerMemoryDestroy(memory *cWasmerMemoryT) { - C.wasmer_memory_destroy( - (*C.wasmer_memory_t)(memory), - ) -} - -func cCString(string string) *cChar { - return (*cChar)(C.CString(string)) -} - -func cFree(pointer unsafe.Pointer) { - C.free(pointer) -} - -func cGoString(string *cChar) string { - return C.GoString((*C.char)(string)) -} - -func cGoStringN(string *cChar, length cInt) string { - return C.GoStringN((*C.char)(string), (C.int)(length)) -} - -func cGoStringToWasmerByteArray(string string) cWasmerByteArray { - var cString = cCString(string) - - var byteArray cWasmerByteArray - byteArray.bytes = (*C.uchar)(unsafe.Pointer(cString)) - byteArray.bytes_len = (C.uint)(len(string)) - - return byteArray -} diff --git a/wasmer/error.go b/wasmer/error.go deleted file mode 100644 index 10db0e336..000000000 --- a/wasmer/error.go +++ /dev/null @@ -1,38 +0,0 @@ -package wasmer - -import ( - "errors" - "unsafe" -) - -// ErrFailedInstantiation indicates that a Wasmer instance could not be created -var ErrFailedInstantiation = errors.New("could not create wasmer instance") - -// ErrFailedCacheImports indicates that the imports could not be cached -var ErrFailedCacheImports = errors.New("could not cache imports") - -// ErrInvalidBytecode indicates that the bytecode is invalid -var ErrInvalidBytecode = errors.New("invalid bytecode") - -// ErrCachingFailed indicates that creating the precompilation cache of an instance has failed -var ErrCachingFailed = errors.New("instance caching failed") - -// GetLastError returns the last error message if any, otherwise returns an error. -func GetLastError() (string, error) { - var errorLength = cWasmerLastErrorLength() - - if errorLength == 0 { - return "", nil - } - - var errorMessage = make([]cChar, errorLength) - var errorMessagePointer = (*cChar)(unsafe.Pointer(&errorMessage[0])) - - var errorResult = cWasmerLastErrorMessage(errorMessagePointer, errorLength) - - if -1 == errorResult { - return "", errors.New("cannot read last error") - } - - return cGoString(errorMessagePointer), nil -} diff --git a/wasmer/function_wrapper_helpers.go b/wasmer/function_wrapper_helpers.go deleted file mode 100644 index 8d6c7c502..000000000 --- a/wasmer/function_wrapper_helpers.go +++ /dev/null @@ -1,194 +0,0 @@ -package wasmer - -import ( - "fmt" - "unsafe" -) - -func getExportedFunctionSignature( - wasmFunction *cWasmerExportFuncT, - exportedFunctionName string, -) ([]cWasmerValueTag, cUint32T, error) { - var wasmFunctionInputsArity cUint32T - if cWasmerExportFuncParamsArity(wasmFunction, &wasmFunctionInputsArity) != cWasmerOk { - return nil, 0, NewExportedFunctionError(exportedFunctionName, "Failed to read the input arity of the `%s` exported function.") - } - - var wasmFunctionInputSignatures = make([]cWasmerValueTag, int(wasmFunctionInputsArity)) - - if wasmFunctionInputsArity > 0 { - var wasmFunctionInputSignaturesCPointer = (*cWasmerValueTag)(unsafe.Pointer(&wasmFunctionInputSignatures[0])) - - if cWasmerExportFuncParams(wasmFunction, wasmFunctionInputSignaturesCPointer, wasmFunctionInputsArity) != cWasmerOk { - return nil, 0, NewExportedFunctionError(exportedFunctionName, "Failed to read the signature of the `%s` exported function.") - } - } - - return wasmFunctionInputSignatures, wasmFunctionInputsArity, nil -} - -func getExportedFunctionOutputArity( - wasmFunction *cWasmerExportFuncT, - exportedFunctionName string, -) (cUint32T, error) { - var wasmFunctionOutputsArity cUint32T - if cWasmerExportFuncResultsArity(wasmFunction, &wasmFunctionOutputsArity) != cWasmerOk { - return cUint32T(0), NewExportedFunctionError(exportedFunctionName, "Failed to read the output arity of the `%s` exported function.") - } - return wasmFunctionOutputsArity, nil -} - -func validateGivenArguments( - exportedFunctionName string, - arguments []interface{}, - wasmFunctionInputsArity cUint32T, -) error { - var numberOfGivenArguments = len(arguments) - var diff = int(wasmFunctionInputsArity) - numberOfGivenArguments - - if diff > 0 { - return NewExportedFunctionError(exportedFunctionName, fmt.Sprintf("Missing %d argument(s) when calling the `%%s` exported function; Expect %d argument(s), given %d.", diff, int(wasmFunctionInputsArity), numberOfGivenArguments)) - } else if diff < 0 { - return NewExportedFunctionError(exportedFunctionName, fmt.Sprintf("Given %d extra argument(s) when calling the `%%s` exported function; Expect %d argument(s), given %d.", -diff, int(wasmFunctionInputsArity), numberOfGivenArguments)) - } - return nil -} - -func callWasmFunction( - cInstance *cWasmerInstanceT, - exportedFunctionName string, - wasmFunctionInputsArity cUint32T, - wasmFunctionOutputsArity cUint32T, - wasmInputs []cWasmerValueT, -) ([]cWasmerValueT, cWasmerResultT) { - var wasmFunctionName = cCString(exportedFunctionName) - defer cFree(unsafe.Pointer(wasmFunctionName)) - - var wasmInputsCPointer *cWasmerValueT - if wasmFunctionInputsArity > 0 { - wasmInputsCPointer = (*cWasmerValueT)(unsafe.Pointer(&wasmInputs[0])) - } else { - wasmInputsCPointer = (*cWasmerValueT)(unsafe.Pointer(&wasmInputs)) - } - - var wasmOutputs = make([]cWasmerValueT, wasmFunctionOutputsArity) - var wasmOutputsCPointer *cWasmerValueT - if wasmFunctionOutputsArity > 0 { - wasmOutputsCPointer = (*cWasmerValueT)(unsafe.Pointer(&wasmOutputs[0])) - } else { - wasmOutputsCPointer = (*cWasmerValueT)(unsafe.Pointer(&wasmOutputs)) - } - - var callResult = cWasmerInstanceCall( - cInstance, - wasmFunctionName, - wasmInputsCPointer, - wasmFunctionInputsArity, - wasmOutputsCPointer, - wasmFunctionOutputsArity, - ) - - return wasmOutputs, callResult -} - -func createWasmInputsFromArguments( - arguments []interface{}, - wasmFunctionInputsArity cUint32T, - wasmFunctionInputSignatures []cWasmerValueTag, - exportedFunctionName string, -) ([]cWasmerValueT, error) { - var err error - var wasmInputs = make([]cWasmerValueT, wasmFunctionInputsArity) - for index, value := range arguments { - var wasmInputType = wasmFunctionInputSignatures[index] - - switch wasmInputType { - case cWasmI32: - err = writeInt32ToWasmInputs(wasmInputs, index, value, exportedFunctionName) - if err != nil { - return nil, err - } - case cWasmI64: - err = writeInt64ToWasmInputs(wasmInputs, index, value, exportedFunctionName) - if err != nil { - return nil, err - } - default: - return nil, NewExportedFunctionError(exportedFunctionName, "Invalid arguments type when calling the `%s` exported function.") - } - } - - return wasmInputs, nil -} - -func writeInt32ToWasmInputs(wasmInputs []cWasmerValueT, index int, value interface{}, exportedFunctionName string) error { - wasmInputs[index].tag = cWasmI32 - var pointer = (*int32)(unsafe.Pointer(&wasmInputs[index].value)) - - switch typedValue := value.(type) { - case int8: - *pointer = int32(typedValue) - case uint8: - *pointer = int32(typedValue) - case int16: - *pointer = int32(typedValue) - case uint16: - *pointer = int32(typedValue) - case int32: - *pointer = typedValue - case int: - *pointer = int32(typedValue) - case uint: - *pointer = int32(typedValue) - case Value: - var val = value.(Value) - - if val.GetType() != TypeI32 { - return NewExportedFunctionError(exportedFunctionName, fmt.Sprintf("Argument #%d of the `%%s` exported function must be of type `i32`, cannot cast given value to this type.", index+1)) - } - - *pointer = val.ToI32() - default: - return NewExportedFunctionError(exportedFunctionName, fmt.Sprintf("Argument #%d of the `%%s` exported function must be of type `i32`, cannot cast given value to this type.", index+1)) - } - - return nil -} - -func writeInt64ToWasmInputs(wasmInputs []cWasmerValueT, index int, value interface{}, exportedFunctionName string) error { - wasmInputs[index].tag = cWasmI64 - var pointer = (*int64)(unsafe.Pointer(&wasmInputs[index].value)) - - switch typedValue := value.(type) { - case int8: - *pointer = int64(typedValue) - case uint8: - *pointer = int64(typedValue) - case int16: - *pointer = int64(typedValue) - case uint16: - *pointer = int64(typedValue) - case int32: - *pointer = int64(typedValue) - case uint32: - *pointer = int64(typedValue) - case int64: - *pointer = typedValue - case int: - *pointer = int64(typedValue) - case uint: - *pointer = int64(typedValue) - case Value: - var val = value.(Value) - - if val.GetType() != TypeI64 { - return NewExportedFunctionError(exportedFunctionName, fmt.Sprintf("Argument #%d of the `%%s` exported function must be of type `i64`, cannot cast given value to this type.", index+1)) - } - - *pointer = val.ToI64() - default: - return NewExportedFunctionError(exportedFunctionName, fmt.Sprintf("Argument #%d of the `%%s` exported function must be of type `i64`, cannot cast given value to this type.", index+1)) - } - - return nil -} diff --git a/wasmer/libwasmer_darwin_amd64.dylib b/wasmer/libwasmer_darwin_amd64.dylib deleted file mode 100755 index 6c89493cc..000000000 Binary files a/wasmer/libwasmer_darwin_amd64.dylib and /dev/null differ diff --git a/wasmer/libwasmer_darwin_arm64_shim.dylib b/wasmer/libwasmer_darwin_arm64_shim.dylib deleted file mode 100644 index 3adf25f49..000000000 Binary files a/wasmer/libwasmer_darwin_arm64_shim.dylib and /dev/null differ diff --git a/wasmer/libwasmer_linux_amd64.so b/wasmer/libwasmer_linux_amd64.so deleted file mode 100644 index 6aa7463d4..000000000 Binary files a/wasmer/libwasmer_linux_amd64.so and /dev/null differ diff --git a/wasmer/libwasmer_linux_arm64_shim.so b/wasmer/libwasmer_linux_arm64_shim.so deleted file mode 100644 index 79842a313..000000000 Binary files a/wasmer/libwasmer_linux_arm64_shim.so and /dev/null differ diff --git a/wasmer/memory.go b/wasmer/memory.go deleted file mode 100644 index 02ce5b270..000000000 --- a/wasmer/memory.go +++ /dev/null @@ -1,101 +0,0 @@ -package wasmer - -import ( - "fmt" - "reflect" - "unsafe" -) - -// MemoryError represents any kind of errors related to a WebAssembly memory. It -// is returned by `Memory` functions only. -type MemoryError struct { - // Error message. - message string -} - -// NewMemoryError constructs a new `MemoryError`. -func NewMemoryError(message string) *MemoryError { - return &MemoryError{message} -} - -// `MemoryError` is an actual error. The `Error` function returns -// the error message. -func (error *MemoryError) Error() string { - return error.message -} - -// Memory represents an exported memory of a WebAssembly instance. To read -// and write data, please see the `Data` function. -type Memory struct { - memory *cWasmerMemoryT -} - -// Instantiates a new WebAssembly exported memory. -func newMemory(memory *cWasmerMemoryT) Memory { - return Memory{memory} -} - -// Length calculates the memory length (in bytes). -func (memory *Memory) Length() uint32 { - if nil == memory.memory { - return 0 - } - - return uint32(cWasmerMemoryDataLength(memory.memory)) -} - -// Data returns a slice of bytes over the WebAssembly memory. -//nolint:all -func (memory *Memory) Data() []byte { - if nil == memory.memory { - return make([]byte, 0) - } - - var length = memory.Length() - var data = (*uint8)(cWasmerMemoryData(memory.memory)) - - var header reflect.SliceHeader - header = *(*reflect.SliceHeader)(unsafe.Pointer(&header)) - - header.Data = uintptr(unsafe.Pointer(data)) - header.Len = int(length) - header.Cap = int(length) - - return *(*[]byte)(unsafe.Pointer(&header)) -} - -// Grow the memory by a number of pages (65kb each). -func (memory *Memory) Grow(numberOfPages uint32) error { - if nil == memory.memory { - return nil - } - - var growResult = cWasmerMemoryGrow(memory.memory, cUint32T(numberOfPages)) - - if growResult != cWasmerOk { - var lastError, err = GetLastError() - var errorMessage = "Failed to grow the memory:\n %s" - - if err != nil { - errorMessage = fmt.Sprintf(errorMessage, "(unknown details)") - } else { - errorMessage = fmt.Sprintf(errorMessage, lastError) - } - - return NewMemoryError(errorMessage) - } - - return nil -} - -// Destroy destroys inner memory -func (memory *Memory) Destroy() { - if memory.memory != nil { - cWasmerMemoryDestroy(memory.memory) - } -} - -// IsInterfaceNil returns true if underlying object is nil -func (memory *Memory) IsInterfaceNil() bool { - return memory == nil -} diff --git a/wasmer/value.go b/wasmer/value.go deleted file mode 100644 index fd53b4e31..000000000 --- a/wasmer/value.go +++ /dev/null @@ -1,97 +0,0 @@ -package wasmer - -import ( - "fmt" -) - -// ValueType represents the `Value` type. -type ValueType int - -const ( - // TypeI32 represents the WebAssembly `i32` type. - TypeI32 ValueType = iota - - // TypeI64 represents the WebAssembly `i64` type. - TypeI64 - - // TypeVoid represents nothing. - // WebAssembly doesn't have “void” type, but it is introduced - // here to represent the returned value of a WebAssembly exported - // function that returns nothing. - TypeVoid -) - -// Value represents a WebAssembly value of a particular type. -type Value struct { - // The WebAssembly value (as bits). - value uint64 - - // The WebAssembly value type. - ty ValueType -} - -// I32 constructs a WebAssembly value of type `i32`. -func I32(value int32) Value { - return Value{ - value: uint64(value), - ty: TypeI32, - } -} - -// I64 constructs a WebAssembly value of type `i64`. -func I64(value int64) Value { - return Value{ - value: uint64(value), - ty: TypeI64, - } -} - -// Void constructs an empty WebAssembly value. -func Void() Value { - return Value{ - value: 0, - ty: TypeVoid, - } -} - -// GetType gets the type of the WebAssembly value. -func (value Value) GetType() ValueType { - return value.ty -} - -// ToI32 reads the WebAssembly value bits as an `int32`. The WebAssembly -// value type is ignored. -func (value Value) ToI32() int32 { - return int32(value.value) -} - -// ToI64 reads the WebAssembly value bits as an `int64`. The WebAssembly -// value type is ignored. -func (value Value) ToI64() int64 { - return int64(value.value) -} - -// ToVoid reads the WebAssembly value bits as a `nil`. The WebAssembly -// value type is ignored. -func (value Value) ToVoid() interface{} { - return nil -} - -// String formats the WebAssembly value as a Go string. -func (value Value) String() string { - switch value.ty { - case TypeI32: - return fmt.Sprintf("%d", value.ToI32()) - case TypeI64: - return fmt.Sprintf("%d", value.ToI64()) - case TypeVoid: - return "void" - default: - return "" - } -} - -// IsVoid returns true if the type is void -func (value Value) IsVoid() bool { - return value.ty == TypeVoid -} diff --git a/wasmer/wasmer.go b/wasmer/wasmer.go deleted file mode 100644 index b5461c601..000000000 --- a/wasmer/wasmer.go +++ /dev/null @@ -1,6 +0,0 @@ -// Package wasmer is a Go library to run WebAssembly binaries. -package wasmer - -import logger "github.com/multiversx/mx-chain-logger-go" - -var logWasmer = logger.GetOrCreate("vm/wasmer") diff --git a/wasmer/wasmer.h b/wasmer/wasmer.h deleted file mode 100644 index e3d92cfdf..000000000 --- a/wasmer/wasmer.h +++ /dev/null @@ -1,1602 +0,0 @@ - -#if !defined(WASMER_H_MACROS) - -#define WASMER_H_MACROS - -// Define the `ARCH_X86_X64` constant. -#if defined(MSVC) && defined(_M_AMD64) -# define ARCH_X86_64 -#elif (defined(GCC) || defined(__GNUC__) || defined(__clang__)) && defined(__x86_64__) -# define ARCH_X86_64 -#endif - -// Compatibility with non-Clang compilers. -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif - -// Compatibility with non-Clang compilers. -#if !defined(__has_declspec_attribute) -# define __has_declspec_attribute(x) 0 -#endif - -// Define the `DEPRECATED` macro. -#if defined(GCC) || defined(__GNUC__) || __has_attribute(deprecated) -# define DEPRECATED(message) __attribute__((deprecated(message))) -#elif defined(MSVC) || __has_declspec_attribute(deprecated) -# define DEPRECATED(message) __declspec(deprecated(message)) -#endif - -#endif // WASMER_H_MACROS - - -#ifndef WASMER_H -#define WASMER_H - -#include -#include -#include -#include - -#define OPCODE_COUNT 448 - -#if defined(WASMER_WASI_ENABLED) -enum Version { - /** - * Version cannot be detected or is unknown. - */ - Unknown = 0, - /** - * Latest version. See `wasmer_wasi::WasiVersion::Latest` to - * learn more. - */ - Latest = 1, - /** - * `wasi_unstable`. - */ - Snapshot0 = 2, - /** - * `wasi_snapshot_preview1`. - */ - Snapshot1 = 3, -}; -typedef uint8_t Version; -#endif - -/** - * List of export/import kinds. - */ -enum wasmer_import_export_kind { - /** - * The export/import is a function. - */ - WASM_FUNCTION = 0, - /** - * The export/import is a global. - */ - WASM_GLOBAL = 1, - /** - * The export/import is a memory. - */ - WASM_MEMORY = 2, - /** - * The export/import is a table. - */ - WASM_TABLE = 3, -}; -typedef uint32_t wasmer_import_export_kind; - -/** - * The `wasmer_result_t` enum is a type that represents either a - * success, or a failure. - */ -typedef enum { - /** - * Represents a success. - */ - WASMER_OK = 1, - /** - * Represents a failure. - */ - WASMER_ERROR = 2, -} wasmer_result_t; - -/** - * Represents all possibles WebAssembly value types. - * - * See `wasmer_value_t` to get a complete example. - */ -enum wasmer_value_tag { - /** - * Represents the `i32` WebAssembly type. - */ - WASM_I32, - /** - * Represents the `i64` WebAssembly type. - */ - WASM_I64, - /** - * Represents the `f32` WebAssembly type. - */ - WASM_F32, - /** - * Represents the `f64` WebAssembly type. - */ - WASM_F64, -}; -typedef uint32_t wasmer_value_tag; - -typedef struct { - -} wasmer_module_t; - -/** - * Opaque pointer to a `wasmer_runtime::Instance` value in Rust. - * - * A `wasmer_runtime::Instance` represents a WebAssembly instance. It - * is generally generated by the `wasmer_instantiate()` function, or by - * the `wasmer_module_instantiate()` function for the most common paths. - */ -typedef struct { - -} wasmer_instance_t; - -typedef struct { - const uint8_t *bytes; - uint32_t bytes_len; -} wasmer_byte_array; - -#if defined(WASMER_EMSCRIPTEN_ENABLED) -/** - * Type used to construct an import_object_t with Emscripten imports. - */ -typedef struct { - -} wasmer_emscripten_globals_t; -#endif - -typedef struct { - -} wasmer_import_object_t; - -/** - * Opaque pointer to `NamedExportDescriptor`. - */ -typedef struct { - -} wasmer_export_descriptor_t; - -/** - * Opaque pointer to `NamedExportDescriptors`. - */ -typedef struct { - -} wasmer_export_descriptors_t; - -/** - * Opaque pointer to `wasmer_export_t`. - */ -typedef struct { - -} wasmer_export_func_t; - -/** - * Represents a WebAssembly value. - * - * This is a [Rust union][rust-union], which is equivalent to the C - * union. See `wasmer_value_t` to get a complete example. - * - * [rust-union]: https://doc.rust-lang.org/reference/items/unions.html - */ -typedef union { - int32_t I32; - int64_t I64; - float F32; - double F64; -} wasmer_value; - -/** - * Represents a WebAssembly type and value pair, - * i.e. `wasmer_value_tag` and `wasmer_value`. Since the latter is an - * union, it's the safe way to read or write a WebAssembly value in - * C. - * - * Example: - * - * ```c - * // Create a WebAssembly value. - * wasmer_value_t wasm_value = { - * .tag = WASM_I32, - * .value.I32 = 42, - * }; - * - * // Read a WebAssembly value. - * if (wasm_value.tag == WASM_I32) { - * int32_t x = wasm_value.value.I32; - * // … - * } - * ``` - */ -typedef struct { - /** - * The value type. - */ - wasmer_value_tag tag; - /** - * The value. - */ - wasmer_value value; -} wasmer_value_t; - -/** - * Opaque pointer to `NamedExport`. - */ -typedef struct { - -} wasmer_export_t; - -/** - * Opaque pointer to a `wasmer_runtime::Memory` value in Rust. - * - * A `wasmer_runtime::Memory` represents a WebAssembly memory. It is - * possible to create one with `wasmer_memory_new()` and pass it as - * imports of an instance, or to read it from exports of an instance - * with `wasmer_export_to_memory()`. - */ -typedef struct { - -} wasmer_memory_t; - -/** - * Opaque pointer to the opaque structure `crate::NamedExports`, - * which is a wrapper around a vector of the opaque structure - * `crate::NamedExport`. - * - * Check the `wasmer_instance_exports()` function to learn more. - */ -typedef struct { - -} wasmer_exports_t; - -typedef struct { - -} wasmer_global_t; - -typedef struct { - bool mutable_; - wasmer_value_tag kind; -} wasmer_global_descriptor_t; - -typedef struct { - -} wasmer_import_descriptor_t; - -typedef struct { - -} wasmer_import_descriptors_t; - -typedef struct { - -} wasmer_import_func_t; - -typedef struct { - -} wasmer_table_t; - -/** - * Union of import/export value. - */ -typedef union { - const wasmer_import_func_t *func; - const wasmer_table_t *table; - const wasmer_memory_t *memory; - const wasmer_global_t *global; -} wasmer_import_export_value; - -typedef struct { - wasmer_byte_array module_name; - wasmer_byte_array import_name; - wasmer_import_export_kind tag; - wasmer_import_export_value value; -} wasmer_import_t; - -typedef struct { - -} wasmer_import_object_iter_t; - -/** - * Opaque pointer to a `wasmer_runtime::Ctx` value in Rust. - * - * An instance context is passed to any host function (aka imported - * function) as the first argument. It is necessary to read the - * instance data or the memory, respectively with the - * `wasmer_instance_context_data_get()` function, and the - * `wasmer_instance_context_memory()` function. - * - * It is also possible to get the instance context outside a host - * function by using the `wasmer_instance_context_get()` - * function. See also `wasmer_instance_context_data_set()` to set the - * instance context data. - * - * Example: - * - * ```c - * // A host function that prints data from the WebAssembly memory to - * // the standard output. - * void print(wasmer_instance_context_t *context, int32_t pointer, int32_t length) { - * // Use `wasmer_instance_context` to get back the first instance memory. - * const wasmer_memory_t *memory = wasmer_instance_context_memory(context, 0); - * - * // Continue… - * } - * ``` - */ -typedef struct { - -} wasmer_instance_context_t; - -typedef struct { - -} wasmer_compilation_options_t; - -/** - * The `wasmer_limit_option_t` struct represents an optional limit - * for `wasmer_limits_t`. - */ -typedef struct { - /** - * Whether the limit is set. - */ - bool has_some; - /** - * The limit value. - */ - uint32_t some; -} wasmer_limit_option_t; - -/** - * The `wasmer_limits_t` struct is a type that describes a memory - * options. See the `wasmer_memory_t` struct or the - * `wasmer_memory_new()` function to get more information. - */ -typedef struct { - /** - * The minimum number of allowed pages. - */ - uint32_t min; - /** - * The maximum number of allowed pages. - */ - wasmer_limit_option_t max; -} wasmer_limits_t; - -typedef struct { - -} wasmer_serialized_module_t; - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -typedef struct { - -} wasmer_trampoline_buffer_builder_t; -#endif - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -typedef struct { - -} wasmer_trampoline_callable_t; -#endif - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -typedef struct { - -} wasmer_trampoline_buffer_t; -#endif - -#if defined(WASMER_WASI_ENABLED) -/** - * Opens a directory that's visible to the WASI module as `alias` but - * is backed by the host file at `host_file_path` - */ -typedef struct { - /** - * What the WASI module will see in its virtual root - */ - wasmer_byte_array alias; - /** - * The backing file that the WASI module will interact with via the alias - */ - wasmer_byte_array host_file_path; -} wasmer_wasi_map_dir_entry_t; -#endif - -/** - * Creates a new Module from the given wasm bytes. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_compile(wasmer_module_t **module, - uint8_t *wasm_bytes, - uint32_t wasm_bytes_len); - -/** - * Creates a new Module with gas limit from the given wasm bytes. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_compile_with_gas_metering(wasmer_module_t **module, - uint8_t *wasm_bytes, - uint32_t wasm_bytes_len); - -wasmer_result_t wasmer_compile_with_gas_metering(wasmer_module_t **module, - uint8_t *wasm_bytes, - uint32_t wasm_bytes_len); - -#if defined(WASMER_EMSCRIPTEN_ENABLED) -/** - * Convenience function for setting up arguments and calling the Emscripten - * main function. - * - * WARNING: - * - * Do not call this function on untrusted code when operating without - * additional sandboxing in place. - * Emscripten has access to many host system calls and therefore may do very - * bad things. - */ -wasmer_result_t wasmer_emscripten_call_main(wasmer_instance_t *instance, - const wasmer_byte_array *args, - unsigned int args_len); -#endif - -#if defined(WASMER_EMSCRIPTEN_ENABLED) -/** - * Destroy `wasmer_emscrpten_globals_t` created by - * `wasmer_emscripten_get_emscripten_globals`. - */ -void wasmer_emscripten_destroy_globals(wasmer_emscripten_globals_t *globals); -#endif - -#if defined(WASMER_EMSCRIPTEN_ENABLED) -/** - * Create a `wasmer_import_object_t` with Emscripten imports, use - * `wasmer_emscripten_get_emscripten_globals` to get a - * `wasmer_emscripten_globals_t` from a `wasmer_module_t`. - * - * WARNING: - * - * This `import_object_t` contains thin-wrappers around host system calls. - * Do not use this to execute untrusted code without additional sandboxing. - */ -wasmer_import_object_t *wasmer_emscripten_generate_import_object(wasmer_emscripten_globals_t *globals); -#endif - -#if defined(WASMER_EMSCRIPTEN_ENABLED) -/** - * Create a `wasmer_emscripten_globals_t` from a Wasm module. - */ -wasmer_emscripten_globals_t *wasmer_emscripten_get_globals(const wasmer_module_t *module); -#endif - -#if defined(WASMER_EMSCRIPTEN_ENABLED) -/** - * Execute global constructors (required if the module is compiled from C++) - * and sets up the internal environment. - * - * This function sets the data pointer in the same way that - * [`wasmer_instance_context_data_set`] does. - */ -wasmer_result_t wasmer_emscripten_set_up(wasmer_instance_t *instance, - wasmer_emscripten_globals_t *globals); -#endif - -/** - * Gets export descriptor kind - */ -wasmer_import_export_kind wasmer_export_descriptor_kind(wasmer_export_descriptor_t *export_); - -/** - * Gets name for the export descriptor - */ -wasmer_byte_array wasmer_export_descriptor_name(wasmer_export_descriptor_t *export_descriptor); - -/** - * Gets export descriptors for the given module - * - * The caller owns the object and should call `wasmer_export_descriptors_destroy` to free it. - */ -void wasmer_export_descriptors(const wasmer_module_t *module, - wasmer_export_descriptors_t **export_descriptors); - -/** - * Frees the memory for the given export descriptors - */ -void wasmer_export_descriptors_destroy(wasmer_export_descriptors_t *export_descriptors); - -/** - * Gets export descriptor by index - */ -wasmer_export_descriptor_t *wasmer_export_descriptors_get(wasmer_export_descriptors_t *export_descriptors, - int idx); - -/** - * Gets the length of the export descriptors - */ -int wasmer_export_descriptors_len(wasmer_export_descriptors_t *exports); - -/** - * Calls a `func` with the provided parameters. - * Results are set using the provided `results` pointer. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_export_func_call(const wasmer_export_func_t *func, - const wasmer_value_t *params, - unsigned int params_len, - wasmer_value_t *results, - unsigned int results_len); - -/** - * Sets the params buffer to the parameter types of the given wasmer_export_func_t - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_export_func_params(const wasmer_export_func_t *func, - wasmer_value_tag *params, - uint32_t params_len); - -/** - * Sets the result parameter to the arity of the params of the wasmer_export_func_t - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_export_func_params_arity(const wasmer_export_func_t *func, uint32_t *result); - -/** - * Sets the returns buffer to the parameter types of the given wasmer_export_func_t - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_export_func_returns(const wasmer_export_func_t *func, - wasmer_value_tag *returns, - uint32_t returns_len); - -/** - * Sets the result parameter to the arity of the returns of the wasmer_export_func_t - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_export_func_returns_arity(const wasmer_export_func_t *func, - uint32_t *result); - -/** - * Gets wasmer_export kind - */ -wasmer_import_export_kind wasmer_export_kind(wasmer_export_t *export_); - -/** - * Gets name from wasmer_export - */ -wasmer_byte_array wasmer_export_name(wasmer_export_t *export_); - -/** - * Gets export func from export - */ -const wasmer_export_func_t *wasmer_export_to_func(const wasmer_export_t *export_); - -/** - * Gets a memory pointer from an export pointer. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_export_to_memory(const wasmer_export_t *export_, wasmer_memory_t **memory); - -/** - * Frees the memory for the given exports. - * - * Check the `wasmer_instance_exports()` function to get a complete - * example. - * - * If `exports` is a null pointer, this function does nothing. - * - * Example: - * - * ```c - * // Get some exports. - * wasmer_exports_t *exports = NULL; - * wasmer_instance_exports(instance, &exports); - * - * // Destroy the exports. - * wasmer_exports_destroy(exports); - * ``` - */ -void wasmer_exports_destroy(wasmer_exports_t *exports); - -/** - * Gets wasmer_export by index - */ -wasmer_export_t *wasmer_exports_get(wasmer_exports_t *exports, int idx); - -/** - * Gets the length of the exports - */ -int wasmer_exports_len(wasmer_exports_t *exports); - -void wasmer_force_install_sighandlers(void); - -/** - * Frees memory for the given Global - */ -void wasmer_global_destroy(wasmer_global_t *global); - -/** - * Gets the value stored by the given Global - */ -wasmer_value_t wasmer_global_get(wasmer_global_t *global); - -/** - * Returns a descriptor (type, mutability) of the given Global - */ -wasmer_global_descriptor_t wasmer_global_get_descriptor(wasmer_global_t *global); - -/** - * Creates a new Global and returns a pointer to it. - * The caller owns the object and should call `wasmer_global_destroy` to free it. - */ -wasmer_global_t *wasmer_global_new(wasmer_value_t value, bool mutable_); - -/** - * Sets the value stored by the given Global - */ -void wasmer_global_set(wasmer_global_t *global, wasmer_value_t value); - -/** - * Gets export descriptor kind - */ -wasmer_import_export_kind wasmer_import_descriptor_kind(wasmer_import_descriptor_t *export_); - -/** - * Gets module name for the import descriptor - */ -wasmer_byte_array wasmer_import_descriptor_module_name(wasmer_import_descriptor_t *import_descriptor); - -/** - * Gets name for the import descriptor - */ -wasmer_byte_array wasmer_import_descriptor_name(wasmer_import_descriptor_t *import_descriptor); - -/** - * Gets import descriptors for the given module - * - * The caller owns the object and should call `wasmer_import_descriptors_destroy` to free it. - */ -void wasmer_import_descriptors(const wasmer_module_t *module, - wasmer_import_descriptors_t **import_descriptors); - -/** - * Frees the memory for the given import descriptors - */ -void wasmer_import_descriptors_destroy(wasmer_import_descriptors_t *import_descriptors); - -/** - * Gets import descriptor by index - */ -wasmer_import_descriptor_t *wasmer_import_descriptors_get(wasmer_import_descriptors_t *import_descriptors, - unsigned int idx); - -/** - * Gets the length of the import descriptors - */ -unsigned int wasmer_import_descriptors_len(wasmer_import_descriptors_t *exports); - -/** - * Frees memory for the given Func - */ -void wasmer_import_func_destroy(wasmer_import_func_t *func); - -/** - * Creates new host function, aka imported function. `func` is a - * function pointer, where the first argument is the famous `vm::Ctx` - * (in Rust), or `wasmer_instance_context_t` (in C). All arguments - * must be typed with compatible WebAssembly native types: - * - * | WebAssembly type | C/C++ type | - * | ---------------- | ---------- | - * | `i32` | `int32_t` | - * | `i64` | `int64_t` | - * | `f32` | `float` | - * | `f64` | `double` | - * - * The function pointer must have a lifetime greater than the - * WebAssembly instance lifetime. - * - * The caller owns the object and should call - * `wasmer_import_func_destroy` to free it. - */ -wasmer_import_func_t *wasmer_import_func_new(void (*func)(void *data), - const wasmer_value_tag *params, - unsigned int params_len, - const wasmer_value_tag *returns, - unsigned int returns_len); - -/** - * Sets the params buffer to the parameter types of the given wasmer_import_func_t - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_import_func_params(const wasmer_import_func_t *func, - wasmer_value_tag *params, - unsigned int params_len); - -/** - * Sets the result parameter to the arity of the params of the wasmer_import_func_t - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_import_func_params_arity(const wasmer_import_func_t *func, uint32_t *result); - -/** - * Sets the returns buffer to the parameter types of the given wasmer_import_func_t - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_import_func_returns(const wasmer_import_func_t *func, - wasmer_value_tag *returns, - unsigned int returns_len); - -/** - * Sets the result parameter to the arity of the returns of the wasmer_import_func_t - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_import_func_returns_arity(const wasmer_import_func_t *func, - uint32_t *result); - -wasmer_result_t wasmer_import_object_cache_from_imports(wasmer_import_t *imports, - unsigned int imports_len); - -/** - * Frees memory of the given ImportObject - */ -void wasmer_import_object_destroy(wasmer_import_object_t *import_object); - -/** - * Extends an existing import object with new imports - */ -wasmer_result_t wasmer_import_object_extend(wasmer_import_object_t *import_object, - const wasmer_import_t *imports, - unsigned int imports_len); - -/** - * Gets an entry from an ImportObject at the name and namespace. - * Stores `name`, `namespace`, and `import_export_value` in `import`. - * Thus these must remain valid for the lifetime of `import`. - * - * The caller owns all data involved. - * `import_export_value` will be written to based on `tag`. - */ -wasmer_result_t wasmer_import_object_get_import(const wasmer_import_object_t *import_object, - wasmer_byte_array namespace_, - wasmer_byte_array name, - wasmer_import_t *import, - wasmer_import_export_value *import_export_value, - uint32_t tag); - -/** - * Frees the memory allocated in `wasmer_import_object_iter_next` - * - * This function does not free the memory in `wasmer_import_object_t`; - * it only frees memory allocated while querying a `wasmer_import_object_t`. - */ -void wasmer_import_object_imports_destroy(wasmer_import_t *imports, uint32_t imports_len); - -/** - * Returns true if further calls to `wasmer_import_object_iter_next` will - * not return any new data - */ -bool wasmer_import_object_iter_at_end(wasmer_import_object_iter_t *import_object_iter); - -/** - * Frees the memory allocated by `wasmer_import_object_iterate_functions` - */ -void wasmer_import_object_iter_destroy(wasmer_import_object_iter_t *import_object_iter); - -/** - * Writes the next value to `import`. `WASMER_ERROR` is returned if there - * was an error or there's nothing left to return. - * - * To free the memory allocated here, pass the import to `wasmer_import_object_imports_destroy`. - * To check if the iterator is done, use `wasmer_import_object_iter_at_end`. - */ -wasmer_result_t wasmer_import_object_iter_next(wasmer_import_object_iter_t *import_object_iter, - wasmer_import_t *import); - -/** - * Create an iterator over the functions in the import object. - * Get the next import with `wasmer_import_object_iter_next` - * Free the iterator with `wasmer_import_object_iter_destroy` - */ -wasmer_import_object_iter_t *wasmer_import_object_iterate_functions(const wasmer_import_object_t *import_object); - -/** - * Creates a new empty import object. - * See also `wasmer_import_object_append` - */ -wasmer_import_object_t *wasmer_import_object_new(void); - -wasmer_result_t wasmer_instance_cache(wasmer_instance_t *instance, - const uint8_t **cache_bytes, - uint32_t *cache_len); - -/** - * Calls an exported function of a WebAssembly instance by `name` - * with the provided parameters. The exported function results are - * stored on the provided `results` pointer. - * - * This function returns `wasmer_result_t::WASMER_OK` upon success, - * `wasmer_result_t::WASMER_ERROR` otherwise. You can use - * `wasmer_last_error_message()` to get the generated error message. - * - * Potential errors are the following: - * - * * `instance` is a null pointer, - * * `name` is a null pointer, - * * `params` is a null pointer. - * - * Example of calling an exported function that needs two parameters, and returns one value: - * - * ```c - * // First argument. - * wasmer_value_t argument_one = { - * .tag = WASM_I32, - * .value.I32 = 3, - * }; - * - * // Second argument. - * wasmer_value_t argument_two = { - * .tag = WASM_I32, - * .value.I32 = 4, - * }; - * - * // First result. - * wasmer_value_t result_one; - * - * // All arguments and results. - * wasmer_value_t arguments[] = {argument_one, argument_two}; - * wasmer_value_t results[] = {result_one}; - * - * wasmer_result_t call_result = wasmer_instance_call( - * instance, // instance pointer - * "sum", // the exported function name - * arguments, // the arguments - * 2, // the number of arguments - * results, // the results - * 1 // the number of results - * ); - * - * if (call_result == WASMER_OK) { - * printf("Result is: %d\n", results[0].value.I32); - * } - * ``` - */ -wasmer_result_t wasmer_instance_call(wasmer_instance_t *instance, - const char *name, - const wasmer_value_t *params, - uint32_t params_len, - wasmer_value_t *results, - uint32_t results_len); - -/** - * Gets the data that can be hold by an instance. - * - * This function is complementary of - * `wasmer_instance_context_data_set()`. Please read its - * documentation. You can also read the documentation of - * `wasmer_instance_context_t` to get other examples. - * - * This function returns nothing if `ctx` is a null pointer. - */ -void *wasmer_instance_context_data_get(const wasmer_instance_context_t *ctx); - -/** - * Sets the data that can be hold by an instance context. - * - * An instance context (represented by the opaque - * `wasmer_instance_context_t` structure) can hold user-defined - * data. This function sets the data. This function is complementary - * of `wasmer_instance_context_data_get()`. - * - * This function does nothing if `instance` is a null pointer. - * - * Example: - * - * ```c - * // Define your own data. - * typedef struct { - * // … - * } my_data; - * - * // Allocate them and set them on the given instance. - * my_data *data = malloc(sizeof(my_data)); - * data->… = …; - * wasmer_instance_context_data_set(instance, (void*) my_data); - * - * // You can read your data. - * { - * my_data *data = (my_data*) wasmer_instance_context_data_get(wasmer_instance_context_get(instance)); - * // … - * } - * ``` - */ -void wasmer_instance_context_data_set(wasmer_instance_t *instance, - void *data_ptr); - -/** - * Returns the instance context. Learn more by looking at the - * `wasmer_instance_context_t` struct. - * - * This function returns `null` if `instance` is a null pointer. - * - * Example: - * - * ```c - * const wasmer_instance_context_get *context = wasmer_instance_context_get(instance); - * my_data *data = (my_data *) wasmer_instance_context_data_get(context); - * // Do something with `my_data`. - * ``` - * - * It is often useful with `wasmer_instance_context_data_set()`. - */ -const wasmer_instance_context_t *wasmer_instance_context_get(wasmer_instance_t *instance); - -/** - * Gets the `memory_idx`th memory of the instance. - * - * Note that the index is always `0` until multiple memories are supported. - * - * This function is mostly used inside host functions (aka imported - * functions) to read the instance memory. - * - * Example of a _host function_ that reads and prints a string based on a pointer and a length: - * - * ```c - * void print_string(const wasmer_instance_context_t *context, int32_t pointer, int32_t length) { - * // Get the 0th memory. - * const wasmer_memory_t *memory = wasmer_instance_context_memory(context, 0); - * - * // Get the memory data as a pointer. - * uint8_t *memory_bytes = wasmer_memory_data(memory); - * - * // Print what we assumed to be a string! - * printf("%.*s", length, memory_bytes + pointer); - * } - * ``` - */ -const wasmer_memory_t *wasmer_instance_context_memory(const wasmer_instance_context_t *ctx, - uint32_t _memory_idx); - -/** - * Frees memory for the given `wasmer_instance_t`. - * - * Check the `wasmer_instantiate()` function to get a complete - * example. - * - * If `instance` is a null pointer, this function does nothing. - * - * Example: - * - * ```c - * // Get an instance. - * wasmer_instance_t *instance = NULL; - * wasmer_instantiate(&instance, bytes, bytes_length, imports, 0); - * - * // Destroy the instance. - * wasmer_instance_destroy(instance); - * ``` - */ -void wasmer_instance_destroy(wasmer_instance_t *instance); - -void wasmer_instance_disable_rkyv(void); - -void wasmer_instance_enable_rkyv(void); - -/** - * Gets all the exports of the given WebAssembly instance. - * - * This function stores a Rust vector of exports into `exports` as an - * opaque pointer of kind `wasmer_exports_t`. - * - * As is, you can do anything with `exports` except using the - * companion functions, like `wasmer_exports_len()`, - * `wasmer_exports_get()` or `wasmer_export_kind()`. See the example below. - * - * **Warning**: The caller owns the object and should call - * `wasmer_exports_destroy()` to free it. - * - * Example: - * - * ```c - * // Get the exports. - * wasmer_exports_t *exports = NULL; - * wasmer_instance_exports(instance, &exports); - * - * // Get the number of exports. - * int exports_length = wasmer_exports_len(exports); - * printf("Number of exports: %d\n", exports_length); - * - * // Read the first export. - * wasmer_export_t *export = wasmer_exports_get(exports, 0); - * - * // Get the kind of the export. - * wasmer_import_export_kind export_kind = wasmer_export_kind(export); - * - * // Assert it is a function (why not). - * assert(export_kind == WASM_FUNCTION); - * - * // Read the export name. - * wasmer_byte_array name_bytes = wasmer_export_name(export); - * - * assert(name_bytes.bytes_len == sizeof("sum") - 1); - * assert(memcmp(name_bytes.bytes, "sum", sizeof("sum") - 1) == 0); - * - * // Destroy the exports. - * wasmer_exports_destroy(exports); - * ``` - */ -void wasmer_instance_exports(wasmer_instance_t *instance, wasmer_exports_t **exports); - -wasmer_result_t wasmer_instance_from_cache(wasmer_instance_t **instance, - uint8_t *cache_bytes, - uint32_t cache_len, - const wasmer_compilation_options_t *options); - -uint64_t wasmer_instance_get_points_used(wasmer_instance_t *instance); - -uint64_t wasmer_instance_get_runtime_breakpoint_value(wasmer_instance_t *instance); - -/** - * Verifies whether the specified function name is imported by the given instance. - */ -bool wasmer_instance_is_function_imported(wasmer_instance_t *instance, const char *name); - -/** - * Reset an WebAssembly instance, cleaning memories and globals - */ -wasmer_result_t wasmer_instance_reset(wasmer_instance_t *instance); - -void wasmer_instance_set_points_limit(wasmer_instance_t *instance, uint64_t limit); - -void wasmer_instance_set_points_used(wasmer_instance_t *instance, uint64_t new_gas); - -void wasmer_instance_set_runtime_breakpoint_value(wasmer_instance_t *instance, uint64_t value); - -/** - * Creates a new WebAssembly instance from the given bytes and imports. - * - * The result is stored in the first argument `instance` if - * successful, i.e. when the function returns - * `wasmer_result_t::WASMER_OK`. Otherwise - * `wasmer_result_t::WASMER_ERROR` is returned, and - * `wasmer_last_error_length()` with `wasmer_last_error_message()` must - * be used to read the error message. - * - * The caller is responsible to free the instance with - * `wasmer_instance_destroy()`. - * - * Example: - * - * ```c - * // 1. Read a WebAssembly module from a file. - * FILE *file = fopen("sum.wasm", "r"); - * fseek(file, 0, SEEK_END); - * long bytes_length = ftell(file); - * uint8_t *bytes = malloc(bytes_length); - * fseek(file, 0, SEEK_SET); - * fread(bytes, 1, bytes_length, file); - * fclose(file); - * - * // 2. Declare the imports (here, none). - * wasmer_import_t imports[] = {}; - * - * // 3. Instantiate the WebAssembly module. - * wasmer_instance_t *instance = NULL; - * wasmer_result_t result = wasmer_instantiate(&instance, bytes, bytes_length, imports, 0); - * - * // 4. Check for errors. - * if (result != WASMER_OK) { - * int error_length = wasmer_last_error_length(); - * char *error = malloc(error_length); - * wasmer_last_error_message(error, error_length); - * // Do something with `error`… - * } - * - * // 5. Free the memory! - * wasmer_instance_destroy(instance); - * ``` - */ -wasmer_result_t wasmer_instantiate(wasmer_instance_t **instance, - uint8_t *wasm_bytes, - uint32_t wasm_bytes_len, - wasmer_import_t *imports, - int imports_len); - -wasmer_result_t wasmer_instantiate_with_options(wasmer_instance_t **instance, - uint8_t *wasm_bytes, - uint32_t wasm_bytes_len, - const wasmer_compilation_options_t *options); - -/** - * Gets the length in bytes of the last error if any. - * - * This can be used to dynamically allocate a buffer with the correct number of - * bytes needed to store a message. - * - * See `wasmer_last_error_message()` to get a full example. - */ -int wasmer_last_error_length(void); - -/** - * Gets the last error message if any into the provided buffer - * `buffer` up to the given `length`. - * - * The `length` parameter must be large enough to store the last - * error message. Ideally, the value should come from - * `wasmer_last_error_length()`. - * - * The function returns the length of the string in bytes, `-1` if an - * error occurs. Potential errors are: - * - * * The buffer is a null pointer, - * * The buffer is too smal to hold the error message. - * - * Note: The error message always has a trailing null character. - * - * Example: - * - * ```c - * int error_length = wasmer_last_error_length(); - * - * if (error_length > 0) { - * char *error_message = malloc(error_length); - * wasmer_last_error_message(error_message, error_length); - * printf("Error message: `%s`\n", error_message); - * } else { - * printf("No error message\n"); - * } - * ``` - */ -int wasmer_last_error_message(char *buffer, int length); - -/** - * Gets a pointer to the beginning of the contiguous memory data - * bytes. - * - * The function returns `NULL` if `memory` is a null pointer. - * - * Note that when the memory grows, it can be reallocated, and thus - * the returned pointer can be invalidated. - * - * Example: - * - * ```c - * uint8_t *memory_data = wasmer_memory_data(memory); - * char *str = (char*) malloc(sizeof(char) * 7); - * - * for (uint32_t nth = 0; nth < 7; ++nth) { - * str[nth] = (char) memory_data[nth]; - * } - * ``` - */ -uint8_t *wasmer_memory_data(const wasmer_memory_t *memory); - -/** - * Gets the size in bytes of the memory data. - * - * This function returns 0 if `memory` is a null pointer. - * - * Example: - * - * ```c - * uint32_t memory_data_length = wasmer_memory_data_length(memory); - * ``` - */ -uint32_t wasmer_memory_data_length(wasmer_memory_t *memory); - -/** - * Frees memory for the given `wasmer_memory_t`. - * - * Check the `wasmer_memory_new()` function to get a complete - * example. - * - * If `memory` is a null pointer, this function does nothing. - * - * Example: - * - * ```c - * // Get a memory. - * wasmer_memory_t *memory = NULL; - * wasmer_result_t result = wasmer_memory_new(&memory, memory_descriptor); - * - * // Destroy the memory. - * wasmer_memory_destroy(memory); - * ``` - */ -void wasmer_memory_destroy(wasmer_memory_t *memory); - -/** - * Grows a memory by the given number of pages (of 65Kb each). - * - * The functions return `wasmer_result_t::WASMER_OK` upon success, - * `wasmer_result_t::WASMER_ERROR` otherwise. Use - * `wasmer_last_error_length()` with `wasmer_last_error_message()` to - * read the error message. - * - * Example: - * - * ```c - * wasmer_result_t result = wasmer_memory_grow(memory, 10); - * - * if (result != WASMER_OK) { - * // … - * } - * ``` - */ -wasmer_result_t wasmer_memory_grow(wasmer_memory_t *memory, uint32_t delta); - -/** - * Reads the current length (in pages) of the given memory. - * - * The function returns zero if `memory` is a null pointer. - * - * Example: - * - * ```c - * uint32_t memory_length = wasmer_memory_length(memory); - * - * printf("Memory pages length: %d\n", memory_length); - * ``` - */ -uint32_t wasmer_memory_length(const wasmer_memory_t *memory); - -/** - * Creates a new empty WebAssembly memory for the given descriptor. - * - * The result is stored in the first argument `memory` if successful, - * i.e. when the function returns - * `wasmer_result_t::WASMER_OK`. Otherwise, - * `wasmer_result_t::WASMER_ERROR` is returned, and - * `wasmer_last_error_length()` with `wasmer_last_error_message()` - * must be used to read the error message. - * - * The caller owns the memory and is responsible to free it with - * `wasmer_memory_destroy()`. - * - * Example: - * - * ```c - * // 1. The memory object. - * wasmer_memory_t *memory = NULL; - * - * // 2. The memory descriptor. - * wasmer_limits_t memory_descriptor = { - * .min = 10, - * .max = { - * .has_some = true, - * .some = 15, - * }, - * }; - * - * // 3. Initialize the memory. - * wasmer_result_t result = wasmer_memory_new(&memory, memory_descriptor); - * - * if (result != WASMER_OK) { - * int error_length = wasmer_last_error_length(); - * char *error = malloc(error_length); - * wasmer_last_error_message(error, error_length); - * // Do something with `error`… - * } - * - * // 4. Free the memory! - * wasmer_memory_destroy(memory); - * ``` - */ -wasmer_result_t wasmer_memory_new(wasmer_memory_t **memory, wasmer_limits_t limits); - -/** - * Deserialize the given serialized module. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_module_deserialize(wasmer_module_t **module, - const wasmer_serialized_module_t *serialized_module); - -/** - * Frees memory for the given Module - */ -void wasmer_module_destroy(wasmer_module_t *module); - -/** - * Given: - * * A prepared `wasmer` import-object - * * A compiled wasmer module - * - * Instantiates a wasmer instance - */ -wasmer_result_t wasmer_module_import_instantiate(wasmer_instance_t **instance, - const wasmer_module_t *module, - const wasmer_import_object_t *import_object); - -/** - * Creates a new Instance from the given module and imports. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_module_instantiate(const wasmer_module_t *module, - wasmer_instance_t **instance, - wasmer_import_t *imports, - int imports_len); - -/** - * Serialize the given Module. - * - * The caller owns the object and should call `wasmer_serialized_module_destroy` to free it. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_module_serialize(wasmer_serialized_module_t **serialized_module, - const wasmer_module_t *module); - -/** - * Get bytes of the serialized module. - */ -wasmer_byte_array wasmer_serialized_module_bytes(const wasmer_serialized_module_t *serialized_module); - -/** - * Frees memory for the given serialized Module. - */ -void wasmer_serialized_module_destroy(wasmer_serialized_module_t *serialized_module); - -/** - * Transform a sequence of bytes into a serialized module. - * - * The caller owns the object and should call `wasmer_serialized_module_destroy` to free it. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_serialized_module_from_bytes(wasmer_serialized_module_t **serialized_module, - const uint8_t *serialized_module_bytes, - uint32_t serialized_module_bytes_length); - -void wasmer_set_opcode_costs(const uint32_t *opcode_costs_pointer); - -void wasmer_set_sigsegv_passthrough(void); - -/** - * Frees memory for the given Table - */ -void wasmer_table_destroy(wasmer_table_t *table); - -/** - * Grows a Table by the given number of elements. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_table_grow(wasmer_table_t *table, uint32_t delta); - -/** - * Returns the current length of the given Table - */ -uint32_t wasmer_table_length(wasmer_table_t *table); - -/** - * Creates a new Table for the given descriptor and initializes the given - * pointer to pointer to a pointer to the new Table. - * - * The caller owns the object and should call `wasmer_table_destroy` to free it. - * - * Returns `wasmer_result_t::WASMER_OK` upon success. - * - * Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length` - * and `wasmer_last_error_message` to get an error message. - */ -wasmer_result_t wasmer_table_new(wasmer_table_t **table, wasmer_limits_t limits); - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -/** - * Adds a callinfo trampoline to the builder. - */ -uintptr_t wasmer_trampoline_buffer_builder_add_callinfo_trampoline(wasmer_trampoline_buffer_builder_t *builder, - const wasmer_trampoline_callable_t *func, - const void *ctx, - uint32_t num_params); -#endif - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -/** - * Adds a context trampoline to the builder. - */ -uintptr_t wasmer_trampoline_buffer_builder_add_context_trampoline(wasmer_trampoline_buffer_builder_t *builder, - const wasmer_trampoline_callable_t *func, - const void *ctx); -#endif - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -/** - * Finalizes the trampoline builder into an executable buffer. - */ -wasmer_trampoline_buffer_t *wasmer_trampoline_buffer_builder_build(wasmer_trampoline_buffer_builder_t *builder); -#endif - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -/** - * Creates a new trampoline builder. - */ -wasmer_trampoline_buffer_builder_t *wasmer_trampoline_buffer_builder_new(void); -#endif - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -/** - * Destroys the trampoline buffer if not null. - */ -void wasmer_trampoline_buffer_destroy(wasmer_trampoline_buffer_t *buffer); -#endif - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -/** - * Returns the callable pointer for the trampoline with index `idx`. - */ -const wasmer_trampoline_callable_t *wasmer_trampoline_buffer_get_trampoline(const wasmer_trampoline_buffer_t *buffer, - uintptr_t idx); -#endif - -#if (!defined(_WIN32) && defined(ARCH_X86_64)) -/** - * Returns the context added by `add_context_trampoline`, from within the callee function. - */ -void *wasmer_trampoline_get_context(void); -#endif - -/** - * Stop the execution of a host function, aka imported function. The - * function must be used _only_ inside a host function. - * - * The pointer to `wasmer_instance_context_t` is received by the host - * function as its first argument. Just passing it to `ctx` is fine. - * - * The error message must have a greater lifetime than the host - * function itself since the error is read outside the host function - * with `wasmer_last_error_message`. - * - * This function returns `wasmer_result_t::WASMER_ERROR` if `ctx` or - * `error_message` are null. - * - * This function never returns otherwise. - */ -wasmer_result_t wasmer_trap(const wasmer_instance_context_t *ctx, const char *error_message); - -/** - * Validates a sequence of bytes hoping it represents a valid WebAssembly module. - * - * The function returns true if the bytes are valid, false otherwise. - * - * Example: - * - * ```c - * bool result = wasmer_validate(bytes, bytes_length); - * - * if (false == result) { - * // Do something… - * } - * ``` - */ -bool wasmer_validate(const uint8_t *wasm_bytes, uint32_t wasm_bytes_len); - -#if defined(WASMER_WASI_ENABLED) -/** - * Convenience function that creates a WASI import object with no arguments, - * environment variables, preopened files, or mapped directories. - * - * This function is the same as calling [`wasmer_wasi_generate_import_object`] with all - * empty values. - */ -wasmer_import_object_t *wasmer_wasi_generate_default_import_object(void); -#endif - -#if defined(WASMER_WASI_ENABLED) -/** - * Creates a WASI import object. - * - * This function treats null pointers as empty collections. - * For example, passing null for a string in `args`, will lead to a zero - * length argument in that position. - */ -wasmer_import_object_t *wasmer_wasi_generate_import_object(const wasmer_byte_array *args, - unsigned int args_len, - const wasmer_byte_array *envs, - unsigned int envs_len, - const wasmer_byte_array *preopened_files, - unsigned int preopened_files_len, - const wasmer_wasi_map_dir_entry_t *mapped_dirs, - unsigned int mapped_dirs_len); -#endif - -#if defined(WASMER_WASI_ENABLED) -/** - * Creates a WASI import object for a specific version. - * - * This function is similar to `wasmer_wasi_generate_import_object` - * except that the first argument describes the WASI version. - * - * The version is expected to be of kind `Version`. - */ -wasmer_import_object_t *wasmer_wasi_generate_import_object_for_version(unsigned char version, - const wasmer_byte_array *args, - unsigned int args_len, - const wasmer_byte_array *envs, - unsigned int envs_len, - const wasmer_byte_array *preopened_files, - unsigned int preopened_files_len, - const wasmer_wasi_map_dir_entry_t *mapped_dirs, - unsigned int mapped_dirs_len); -#endif - -#if defined(WASMER_WASI_ENABLED) -/** - * Find the version of WASI used by the module. - * - * In case of error, the returned version is `Version::Unknown`. - */ -Version wasmer_wasi_get_version(const wasmer_module_t *module); -#endif - -#endif /* WASMER_H */ diff --git a/wasmer/wasmerExecutor.go b/wasmer/wasmerExecutor.go deleted file mode 100644 index f8ac13c32..000000000 --- a/wasmer/wasmerExecutor.go +++ /dev/null @@ -1,79 +0,0 @@ -package wasmer - -import ( - "unsafe" - - vmcommon "github.com/multiversx/mx-chain-vm-common-go" - "github.com/multiversx/mx-chain-vm-go/executor" -) - -var _ executor.Executor = (*WasmerExecutor)(nil) - -// WasmerExecutor oversees the creation of Wasmer instances and execution. -type WasmerExecutor struct { - eiFunctionNames vmcommon.FunctionNames - vmHooks executor.VMHooks - vmHooksPtr uintptr -} - -// CreateExecutor creates a new wasmer executor. -func CreateExecutor() (*WasmerExecutor, error) { - functionNames, err := injectCgoFunctionPointers() - if err != nil { - return nil, err - } - - ForceInstallSighandlers() - - return &WasmerExecutor{ - eiFunctionNames: functionNames, - }, nil -} - -// SetOpcodeCosts sets gas costs globally inside the Wasmer executor. -func (wasmerExecutor *WasmerExecutor) SetOpcodeCosts(opcodeCosts *executor.WASMOpcodeCost) { - SetOpcodeCosts(opcodeCosts) -} - -// FunctionNames returns the function names -func (wasmerExecutor *WasmerExecutor) FunctionNames() vmcommon.FunctionNames { - return wasmerExecutor.eiFunctionNames -} - -// NewInstanceWithOptions creates a new Wasmer instance from WASM bytecode, -// respecting the provided options -func (wasmerExecutor *WasmerExecutor) NewInstanceWithOptions( - contractCode []byte, - options executor.CompilationOptions, -) (executor.Instance, error) { - instance, err := NewInstanceWithOptions(contractCode, options) - if err == nil { - instance.SetVMHooksPtr(wasmerExecutor.vmHooksPtr) - } - - return instance, err -} - -// NewInstanceFromCompiledCodeWithOptions creates a new Wasmer instance from -// precompiled machine code, respecting the provided options -func (wasmerExecutor *WasmerExecutor) NewInstanceFromCompiledCodeWithOptions( - compiledCode []byte, - options executor.CompilationOptions, -) (executor.Instance, error) { - instance, err := NewInstanceFromCompiledCodeWithOptions(compiledCode, options) - if err == nil { - instance.SetVMHooksPtr(wasmerExecutor.vmHooksPtr) - } - return instance, err -} - -// initVMHooks inits the VM hooks -func (wasmerExecutor *WasmerExecutor) initVMHooks(vmHooks executor.VMHooks) { - wasmerExecutor.vmHooks = vmHooks - wasmerExecutor.vmHooksPtr = uintptr(unsafe.Pointer(&wasmerExecutor.vmHooks)) -} - -// IsInterfaceNil returns true if there is no value under the interface -func (wasmerExecutor *WasmerExecutor) IsInterfaceNil() bool { - return wasmerExecutor == nil -} diff --git a/wasmer/wasmerExecutorFactory.go b/wasmer/wasmerExecutorFactory.go deleted file mode 100644 index 70a92dc0c..000000000 --- a/wasmer/wasmerExecutorFactory.go +++ /dev/null @@ -1,38 +0,0 @@ -package wasmer - -import ( - "github.com/multiversx/mx-chain-vm-go/executor" -) - -// WasmerExecutorFactory builds Wasmer Executors. -type WasmerExecutorFactory struct{} - -// ExecutorFactory returns the Wasmer executor factory. -func ExecutorFactory() *WasmerExecutorFactory { - return &WasmerExecutorFactory{} -} - -// CreateExecutor creates a new Executor instance. -func (wef *WasmerExecutorFactory) CreateExecutor(args executor.ExecutorFactoryArgs) (executor.Executor, error) { - if args.WasmerSIGSEGVPassthrough { - SetSIGSEGVPassthrough() - } - - exec, err := CreateExecutor() - if err != nil { - return nil, err - } - exec.initVMHooks(args.VMHooks) - if args.OpcodeCosts != nil { - // opcode costs are sometimes not initialized at this point in certain tests - exec.SetOpcodeCosts(args.OpcodeCosts) - } - - SetRkyvSerializationEnabled(args.RkyvSerializationEnabled) - return exec, nil -} - -// IsInterfaceNil returns true if there is no value under the interface -func (wef *WasmerExecutorFactory) IsInterfaceNil() bool { - return wef == nil -} diff --git a/wasmer/wasmerImport.go b/wasmer/wasmerImport.go deleted file mode 100644 index eedf177f4..000000000 --- a/wasmer/wasmerImport.go +++ /dev/null @@ -1,194 +0,0 @@ -package wasmer - -import ( - "fmt" - "reflect" - "unsafe" - - "github.com/multiversx/mx-chain-vm-go/executor" -) - -// ImportedFunctionError represents any kind of errors related to a -// WebAssembly imported function. It is returned by `Import` or `Imports` -// functions only. -type ImportedFunctionError struct { - functionName string - message string -} - -// NewImportedFunctionError constructs a new `ImportedFunctionError`, -// where `functionName` is the name of the imported function, and -// `message` is the error message. If the error message contains `%s`, -// then this parameter will be replaced by `functionName`. -func NewImportedFunctionError(functionName string, message string) *ImportedFunctionError { - return &ImportedFunctionError{functionName, message} -} - -// ImportedFunctionError is an actual error. The `Error` function -// returns the error message. -func (error *ImportedFunctionError) Error() string { - return fmt.Sprintf(error.message, error.functionName) -} - -// wasmerImport represents an WebAssembly instance imported function. -type wasmerImport struct { - // An implementation must be of type: - // `func(context unsafe.Pointer, arguments ...interface{}) interface{}`. - // It represents the real function implementation written in Go. - implementation interface{} - - // The pointer to the cgo function implementation, something - // like `C.foo`. - cgoPointer unsafe.Pointer - - // The pointer to the Wasmer imported function. - importedFunctionPointer *cWasmerImportFuncT - - // The function implementation signature as a WebAssembly signature. - wasmInputs []cWasmerValueTag - - // The function implementation signature as a WebAssembly signature. - wasmOutputs []cWasmerValueTag - - // The namespace of the imported function. - namespace string -} - -// wasmerImports represents a set of imported functions for a WebAssembly instance. -type wasmerImports struct { - // All imports. - imports map[string]map[string]wasmerImport - - // Current namespace where to register the import. - currentNamespace string -} - -// newWasmerImports constructs a new empty `wasmerImports`. -func newWasmerImports() *wasmerImports { - var imports = make(map[string]map[string]wasmerImport) - var currentNamespace = "env" - - return &wasmerImports{imports, currentNamespace} -} - -// Count returns the number of imports -func (imports *wasmerImports) Count() int { - count := 0 - for _, namespacedImports := range imports.imports { - count += len(namespacedImports) - } - return count -} - -// Append adds a new imported function to the current set. -func (imports *wasmerImports) append(importName string, implementation interface{}, cgoPointer unsafe.Pointer) error { - var importType = reflect.TypeOf(implementation) - - if importType.Kind() != reflect.Func { - return NewImportedFunctionError(importName, fmt.Sprintf("Imported function `%%s` must be a function; given `%s`.", importType.Kind())) - } - - var importInputsArity = importType.NumIn() - - if importInputsArity < 1 { - return NewImportedFunctionError(importName, "Imported function `%s` must at least have one argument for the instance context.") - } - - if importType.In(0).Kind() != reflect.UnsafePointer { - return NewImportedFunctionError(importName, fmt.Sprintf("The instance context of the `%%s` imported function must be of kind `unsafe.Pointer`; given `%s`; is it missing?", importType.In(0).Kind())) - } - - importInputsArity-- - var importOutputsArity = importType.NumOut() - var wasmInputs = make([]cWasmerValueTag, importInputsArity) - var wasmOutputs = make([]cWasmerValueTag, importOutputsArity) - - for nth := 0; nth < importInputsArity; nth++ { - var importInput = importType.In(nth + 1) - - switch importInput.Kind() { - case reflect.Int32: - wasmInputs[nth] = cWasmI32 - case reflect.Int64: - wasmInputs[nth] = cWasmI64 - default: - return NewImportedFunctionError(importName, fmt.Sprintf("Invalid input type for the `%%s` imported function; given `%s`; only accept `int32`, `int64`, `float32`, and `float64`.", importInput.Kind())) - } - } - - if importOutputsArity > 1 { - return NewImportedFunctionError(importName, "The `%s` imported function must have at most one output value.") - } else if importOutputsArity == 1 { - switch importType.Out(0).Kind() { - case reflect.Int32: - wasmOutputs[0] = cWasmI32 - case reflect.Int64: - wasmOutputs[0] = cWasmI64 - default: - return NewImportedFunctionError(importName, fmt.Sprintf("Invalid output type for the `%%s` imported function; given `%s`; only accept `int32`, `int64`, `float32`, and `float64`.", importType.Out(0).Kind())) - } - } - - var importedFunctionPointer *cWasmerImportFuncT - var namespace = imports.currentNamespace - - if imports.imports[namespace] == nil { - imports.imports[namespace] = make(map[string]wasmerImport) - } - - imports.imports[namespace][importName] = wasmerImport{ - implementation, - cgoPointer, - importedFunctionPointer, - wasmInputs, - wasmOutputs, - namespace, - } - - return nil -} - -// Close closes/frees all imported functions that have been registered by Wasmer. -func (imports *wasmerImports) Close() { - for _, namespacedImports := range imports.imports { - for _, importFunction := range namespacedImports { - if nil != importFunction.importedFunctionPointer { - cWasmerImportFuncDestroy(importFunction.importedFunctionPointer) - } - } - } -} - -// InstanceContext represents a way to access instance API from within -// an imported context. -type InstanceContext struct { - context *cWasmerInstanceContextT - memory executor.Memory -} - -// IntoInstanceContext casts the first `context unsafe.Pointer` -// argument of an imported function into an `InstanceContext`. -func IntoInstanceContext(instanceContext unsafe.Pointer) InstanceContext { - context := (*cWasmerInstanceContextT)(instanceContext) - memory := newMemory(cWasmerInstanceContextMemory(context)) - - return InstanceContext{context, &memory} -} - -// IntoInstanceContextDirect retrieves the Wasmer instance context directly -// from the Wasmer instance. This context can be stored as long as the instance itself. -func IntoInstanceContextDirect(instanceContext *cWasmerInstanceContextT) InstanceContext { - memory := newMemory(cWasmerInstanceContextMemory(instanceContext)) - return InstanceContext{instanceContext, &memory} -} - -// Memory returns the current instance memory. -func (instanceContext *InstanceContext) Memory() executor.Memory { - return instanceContext.memory -} - -// Data returns the instance context data as an `unsafe.Pointer`. It's -// up to the user to cast it appropriately as a pointer to a data. -func (instanceContext *InstanceContext) Data() unsafe.Pointer { - return cWasmerInstanceContextDataGet(instanceContext.context) -} diff --git a/wasmer/wasmerImportsCgo.go b/wasmer/wasmerImportsCgo.go deleted file mode 100644 index 72f3ea330..000000000 --- a/wasmer/wasmerImportsCgo.go +++ /dev/null @@ -1,3170 +0,0 @@ -package wasmer - -// Code generated by vmhooks generator. DO NOT EDIT. - -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// !!!!!!!!!!!!!!!!!!!!!! AUTO-GENERATED FILE !!!!!!!!!!!!!!!!!!!!!! -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -// // Declare the function signatures (see [cgo](https://golang.org/cmd/cgo/)). -// -// #include -// typedef int int32_t; -// -// extern long long v1_5_getGasLeft(void* context); -// extern void v1_5_getSCAddress(void* context, int32_t resultOffset); -// extern void v1_5_getOwnerAddress(void* context, int32_t resultOffset); -// extern int32_t v1_5_getShardOfAddress(void* context, int32_t addressOffset); -// extern int32_t v1_5_isSmartContract(void* context, int32_t addressOffset); -// extern void v1_5_signalError(void* context, int32_t messageOffset, int32_t messageLength); -// extern void v1_5_getExternalBalance(void* context, int32_t addressOffset, int32_t resultOffset); -// extern int32_t v1_5_getBlockHash(void* context, long long nonce, int32_t resultOffset); -// extern int32_t v1_5_getESDTBalance(void* context, int32_t addressOffset, int32_t tokenIDOffset, int32_t tokenIDLen, long long nonce, int32_t resultOffset); -// extern int32_t v1_5_getESDTNFTNameLength(void* context, int32_t addressOffset, int32_t tokenIDOffset, int32_t tokenIDLen, long long nonce); -// extern int32_t v1_5_getESDTNFTAttributeLength(void* context, int32_t addressOffset, int32_t tokenIDOffset, int32_t tokenIDLen, long long nonce); -// extern int32_t v1_5_getESDTNFTURILength(void* context, int32_t addressOffset, int32_t tokenIDOffset, int32_t tokenIDLen, long long nonce); -// extern int32_t v1_5_getESDTTokenData(void* context, int32_t addressOffset, int32_t tokenIDOffset, int32_t tokenIDLen, long long nonce, int32_t valueHandle, int32_t propertiesOffset, int32_t hashOffset, int32_t nameOffset, int32_t attributesOffset, int32_t creatorOffset, int32_t royaltiesHandle, int32_t urisOffset); -// extern long long v1_5_getESDTLocalRoles(void* context, int32_t tokenIdHandle); -// extern int32_t v1_5_validateTokenIdentifier(void* context, int32_t tokenIdHandle); -// extern int32_t v1_5_transferValue(void* context, int32_t destOffset, int32_t valueOffset, int32_t dataOffset, int32_t length); -// extern int32_t v1_5_transferValueExecute(void* context, int32_t destOffset, int32_t valueOffset, long long gasLimit, int32_t functionOffset, int32_t functionLength, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_transferESDTExecute(void* context, int32_t destOffset, int32_t tokenIDOffset, int32_t tokenIDLen, int32_t valueOffset, long long gasLimit, int32_t functionOffset, int32_t functionLength, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_transferESDTNFTExecute(void* context, int32_t destOffset, int32_t tokenIDOffset, int32_t tokenIDLen, int32_t valueOffset, long long nonce, long long gasLimit, int32_t functionOffset, int32_t functionLength, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_multiTransferESDTNFTExecute(void* context, int32_t destOffset, int32_t numTokenTransfers, int32_t tokenTransfersArgsLengthOffset, int32_t tokenTransferDataOffset, long long gasLimit, int32_t functionOffset, int32_t functionLength, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_createAsyncCall(void* context, int32_t destOffset, int32_t valueOffset, int32_t dataOffset, int32_t dataLength, int32_t successOffset, int32_t successLength, int32_t errorOffset, int32_t errorLength, long long gas, long long extraGasForCallback); -// extern int32_t v1_5_setAsyncContextCallback(void* context, int32_t callback, int32_t callbackLength, int32_t data, int32_t dataLength, long long gas); -// extern void v1_5_upgradeContract(void* context, int32_t destOffset, long long gasLimit, int32_t valueOffset, int32_t codeOffset, int32_t codeMetadataOffset, int32_t length, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern void v1_5_upgradeFromSourceContract(void* context, int32_t destOffset, long long gasLimit, int32_t valueOffset, int32_t sourceContractAddressOffset, int32_t codeMetadataOffset, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern void v1_5_deleteContract(void* context, int32_t destOffset, long long gasLimit, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern void v1_5_asyncCall(void* context, int32_t destOffset, int32_t valueOffset, int32_t dataOffset, int32_t length); -// extern int32_t v1_5_getArgumentLength(void* context, int32_t id); -// extern int32_t v1_5_getArgument(void* context, int32_t id, int32_t argOffset); -// extern int32_t v1_5_getFunction(void* context, int32_t functionOffset); -// extern int32_t v1_5_getNumArguments(void* context); -// extern int32_t v1_5_storageStore(void* context, int32_t keyOffset, int32_t keyLength, int32_t dataOffset, int32_t dataLength); -// extern int32_t v1_5_storageLoadLength(void* context, int32_t keyOffset, int32_t keyLength); -// extern int32_t v1_5_storageLoadFromAddress(void* context, int32_t addressOffset, int32_t keyOffset, int32_t keyLength, int32_t dataOffset); -// extern int32_t v1_5_storageLoad(void* context, int32_t keyOffset, int32_t keyLength, int32_t dataOffset); -// extern int32_t v1_5_setStorageLock(void* context, int32_t keyOffset, int32_t keyLength, long long lockTimestamp); -// extern long long v1_5_getStorageLock(void* context, int32_t keyOffset, int32_t keyLength); -// extern int32_t v1_5_isStorageLocked(void* context, int32_t keyOffset, int32_t keyLength); -// extern int32_t v1_5_clearStorageLock(void* context, int32_t keyOffset, int32_t keyLength); -// extern void v1_5_getCaller(void* context, int32_t resultOffset); -// extern void v1_5_checkNoPayment(void* context); -// extern int32_t v1_5_getCallValue(void* context, int32_t resultOffset); -// extern int32_t v1_5_getESDTValue(void* context, int32_t resultOffset); -// extern int32_t v1_5_getESDTValueByIndex(void* context, int32_t resultOffset, int32_t index); -// extern int32_t v1_5_getESDTTokenName(void* context, int32_t resultOffset); -// extern int32_t v1_5_getESDTTokenNameByIndex(void* context, int32_t resultOffset, int32_t index); -// extern long long v1_5_getESDTTokenNonce(void* context); -// extern long long v1_5_getESDTTokenNonceByIndex(void* context, int32_t index); -// extern long long v1_5_getCurrentESDTNFTNonce(void* context, int32_t addressOffset, int32_t tokenIDOffset, int32_t tokenIDLen); -// extern int32_t v1_5_getESDTTokenType(void* context); -// extern int32_t v1_5_getESDTTokenTypeByIndex(void* context, int32_t index); -// extern int32_t v1_5_getNumESDTTransfers(void* context); -// extern int32_t v1_5_getCallValueTokenName(void* context, int32_t callValueOffset, int32_t tokenNameOffset); -// extern int32_t v1_5_getCallValueTokenNameByIndex(void* context, int32_t callValueOffset, int32_t tokenNameOffset, int32_t index); -// extern int32_t v1_5_isReservedFunctionName(void* context, int32_t nameHandle); -// extern void v1_5_writeLog(void* context, int32_t dataPointer, int32_t dataLength, int32_t topicPtr, int32_t numTopics); -// extern void v1_5_writeEventLog(void* context, int32_t numTopics, int32_t topicLengthsOffset, int32_t topicOffset, int32_t dataOffset, int32_t dataLength); -// extern long long v1_5_getBlockTimestamp(void* context); -// extern long long v1_5_getBlockNonce(void* context); -// extern long long v1_5_getBlockRound(void* context); -// extern long long v1_5_getBlockEpoch(void* context); -// extern void v1_5_getBlockRandomSeed(void* context, int32_t pointer); -// extern void v1_5_getStateRootHash(void* context, int32_t pointer); -// extern long long v1_5_getPrevBlockTimestamp(void* context); -// extern long long v1_5_getPrevBlockNonce(void* context); -// extern long long v1_5_getPrevBlockRound(void* context); -// extern long long v1_5_getPrevBlockEpoch(void* context); -// extern void v1_5_getPrevBlockRandomSeed(void* context, int32_t pointer); -// extern void v1_5_finish(void* context, int32_t pointer, int32_t length); -// extern int32_t v1_5_executeOnSameContext(void* context, long long gasLimit, int32_t addressOffset, int32_t valueOffset, int32_t functionOffset, int32_t functionLength, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_executeOnDestContext(void* context, long long gasLimit, int32_t addressOffset, int32_t valueOffset, int32_t functionOffset, int32_t functionLength, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_executeReadOnly(void* context, long long gasLimit, int32_t addressOffset, int32_t functionOffset, int32_t functionLength, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_createContract(void* context, long long gasLimit, int32_t valueOffset, int32_t codeOffset, int32_t codeMetadataOffset, int32_t length, int32_t resultOffset, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_deployFromSourceContract(void* context, long long gasLimit, int32_t valueOffset, int32_t sourceContractAddressOffset, int32_t codeMetadataOffset, int32_t resultAddressOffset, int32_t numArguments, int32_t argumentsLengthOffset, int32_t dataOffset); -// extern int32_t v1_5_getNumReturnData(void* context); -// extern int32_t v1_5_getReturnDataSize(void* context, int32_t resultID); -// extern int32_t v1_5_getReturnData(void* context, int32_t resultID, int32_t dataOffset); -// extern void v1_5_cleanReturnData(void* context); -// extern void v1_5_deleteFromReturnData(void* context, int32_t resultID); -// extern void v1_5_getOriginalTxHash(void* context, int32_t dataOffset); -// extern void v1_5_getCurrentTxHash(void* context, int32_t dataOffset); -// extern void v1_5_getPrevTxHash(void* context, int32_t dataOffset); -// extern void v1_5_managedSCAddress(void* context, int32_t destinationHandle); -// extern void v1_5_managedOwnerAddress(void* context, int32_t destinationHandle); -// extern void v1_5_managedCaller(void* context, int32_t destinationHandle); -// extern void v1_5_managedGetOriginalCallerAddr(void* context, int32_t destinationHandle); -// extern void v1_5_managedGetRelayerAddr(void* context, int32_t destinationHandle); -// extern void v1_5_managedSignalError(void* context, int32_t errHandle); -// extern void v1_5_managedWriteLog(void* context, int32_t topicsHandle, int32_t dataHandle); -// extern void v1_5_managedGetOriginalTxHash(void* context, int32_t resultHandle); -// extern void v1_5_managedGetStateRootHash(void* context, int32_t resultHandle); -// extern void v1_5_managedGetBlockRandomSeed(void* context, int32_t resultHandle); -// extern void v1_5_managedGetPrevBlockRandomSeed(void* context, int32_t resultHandle); -// extern void v1_5_managedGetReturnData(void* context, int32_t resultID, int32_t resultHandle); -// extern void v1_5_managedGetMultiESDTCallValue(void* context, int32_t multiCallValueHandle); -// extern void v1_5_managedGetBackTransfers(void* context, int32_t esdtTransfersValueHandle, int32_t egldValueHandle); -// extern void v1_5_managedGetESDTBalance(void* context, int32_t addressHandle, int32_t tokenIDHandle, long long nonce, int32_t valueHandle); -// extern void v1_5_managedGetESDTTokenData(void* context, int32_t addressHandle, int32_t tokenIDHandle, long long nonce, int32_t valueHandle, int32_t propertiesHandle, int32_t hashHandle, int32_t nameHandle, int32_t attributesHandle, int32_t creatorHandle, int32_t royaltiesHandle, int32_t urisHandle); -// extern void v1_5_managedAsyncCall(void* context, int32_t destHandle, int32_t valueHandle, int32_t functionHandle, int32_t argumentsHandle); -// extern int32_t v1_5_managedCreateAsyncCall(void* context, int32_t destHandle, int32_t valueHandle, int32_t functionHandle, int32_t argumentsHandle, int32_t successOffset, int32_t successLength, int32_t errorOffset, int32_t errorLength, long long gas, long long extraGasForCallback, int32_t callbackClosureHandle); -// extern void v1_5_managedGetCallbackClosure(void* context, int32_t callbackClosureHandle); -// extern void v1_5_managedUpgradeFromSourceContract(void* context, int32_t destHandle, long long gas, int32_t valueHandle, int32_t addressHandle, int32_t codeMetadataHandle, int32_t argumentsHandle, int32_t resultHandle); -// extern void v1_5_managedUpgradeContract(void* context, int32_t destHandle, long long gas, int32_t valueHandle, int32_t codeHandle, int32_t codeMetadataHandle, int32_t argumentsHandle, int32_t resultHandle); -// extern void v1_5_managedDeleteContract(void* context, int32_t destHandle, long long gasLimit, int32_t argumentsHandle); -// extern int32_t v1_5_managedDeployFromSourceContract(void* context, long long gas, int32_t valueHandle, int32_t addressHandle, int32_t codeMetadataHandle, int32_t argumentsHandle, int32_t resultAddressHandle, int32_t resultHandle); -// extern int32_t v1_5_managedCreateContract(void* context, long long gas, int32_t valueHandle, int32_t codeHandle, int32_t codeMetadataHandle, int32_t argumentsHandle, int32_t resultAddressHandle, int32_t resultHandle); -// extern int32_t v1_5_managedExecuteReadOnly(void* context, long long gas, int32_t addressHandle, int32_t functionHandle, int32_t argumentsHandle, int32_t resultHandle); -// extern int32_t v1_5_managedExecuteOnSameContext(void* context, long long gas, int32_t addressHandle, int32_t valueHandle, int32_t functionHandle, int32_t argumentsHandle, int32_t resultHandle); -// extern int32_t v1_5_managedExecuteOnDestContext(void* context, long long gas, int32_t addressHandle, int32_t valueHandle, int32_t functionHandle, int32_t argumentsHandle, int32_t resultHandle); -// extern int32_t v1_5_managedMultiTransferESDTNFTExecute(void* context, int32_t dstHandle, int32_t tokenTransfersHandle, long long gasLimit, int32_t functionHandle, int32_t argumentsHandle); -// extern int32_t v1_5_managedMultiTransferESDTNFTExecuteByUser(void* context, int32_t userHandle, int32_t dstHandle, int32_t tokenTransfersHandle, long long gasLimit, int32_t functionHandle, int32_t argumentsHandle); -// extern int32_t v1_5_managedTransferValueExecute(void* context, int32_t dstHandle, int32_t valueHandle, long long gasLimit, int32_t functionHandle, int32_t argumentsHandle); -// extern int32_t v1_5_managedIsESDTFrozen(void* context, int32_t addressHandle, int32_t tokenIDHandle, long long nonce); -// extern int32_t v1_5_managedIsESDTLimitedTransfer(void* context, int32_t tokenIDHandle); -// extern int32_t v1_5_managedIsESDTPaused(void* context, int32_t tokenIDHandle); -// extern void v1_5_managedBufferToHex(void* context, int32_t sourceHandle, int32_t destHandle); -// extern void v1_5_managedGetCodeMetadata(void* context, int32_t addressHandle, int32_t responseHandle); -// extern int32_t v1_5_managedIsBuiltinFunction(void* context, int32_t functionNameHandle); -// extern int32_t v1_5_bigFloatNewFromParts(void* context, int32_t integralPart, int32_t fractionalPart, int32_t exponent); -// extern int32_t v1_5_bigFloatNewFromFrac(void* context, long long numerator, long long denominator); -// extern int32_t v1_5_bigFloatNewFromSci(void* context, long long significand, long long exponent); -// extern void v1_5_bigFloatAdd(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigFloatSub(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigFloatMul(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigFloatDiv(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigFloatNeg(void* context, int32_t destinationHandle, int32_t opHandle); -// extern void v1_5_bigFloatClone(void* context, int32_t destinationHandle, int32_t opHandle); -// extern int32_t v1_5_bigFloatCmp(void* context, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigFloatAbs(void* context, int32_t destinationHandle, int32_t opHandle); -// extern int32_t v1_5_bigFloatSign(void* context, int32_t opHandle); -// extern void v1_5_bigFloatSqrt(void* context, int32_t destinationHandle, int32_t opHandle); -// extern void v1_5_bigFloatPow(void* context, int32_t destinationHandle, int32_t opHandle, int32_t exponent); -// extern void v1_5_bigFloatFloor(void* context, int32_t destBigIntHandle, int32_t opHandle); -// extern void v1_5_bigFloatCeil(void* context, int32_t destBigIntHandle, int32_t opHandle); -// extern void v1_5_bigFloatTruncate(void* context, int32_t destBigIntHandle, int32_t opHandle); -// extern void v1_5_bigFloatSetInt64(void* context, int32_t destinationHandle, long long value); -// extern int32_t v1_5_bigFloatIsInt(void* context, int32_t opHandle); -// extern void v1_5_bigFloatSetBigInt(void* context, int32_t destinationHandle, int32_t bigIntHandle); -// extern void v1_5_bigFloatGetConstPi(void* context, int32_t destinationHandle); -// extern void v1_5_bigFloatGetConstE(void* context, int32_t destinationHandle); -// extern void v1_5_bigIntGetUnsignedArgument(void* context, int32_t id, int32_t destinationHandle); -// extern void v1_5_bigIntGetSignedArgument(void* context, int32_t id, int32_t destinationHandle); -// extern int32_t v1_5_bigIntStorageStoreUnsigned(void* context, int32_t keyOffset, int32_t keyLength, int32_t sourceHandle); -// extern int32_t v1_5_bigIntStorageLoadUnsigned(void* context, int32_t keyOffset, int32_t keyLength, int32_t destinationHandle); -// extern void v1_5_bigIntGetCallValue(void* context, int32_t destinationHandle); -// extern void v1_5_bigIntGetESDTCallValue(void* context, int32_t destination); -// extern void v1_5_bigIntGetESDTCallValueByIndex(void* context, int32_t destinationHandle, int32_t index); -// extern void v1_5_bigIntGetExternalBalance(void* context, int32_t addressOffset, int32_t result); -// extern void v1_5_bigIntGetESDTExternalBalance(void* context, int32_t addressOffset, int32_t tokenIDOffset, int32_t tokenIDLen, long long nonce, int32_t resultHandle); -// extern int32_t v1_5_bigIntNew(void* context, long long smallValue); -// extern int32_t v1_5_bigIntUnsignedByteLength(void* context, int32_t referenceHandle); -// extern int32_t v1_5_bigIntSignedByteLength(void* context, int32_t referenceHandle); -// extern int32_t v1_5_bigIntGetUnsignedBytes(void* context, int32_t referenceHandle, int32_t byteOffset); -// extern int32_t v1_5_bigIntGetSignedBytes(void* context, int32_t referenceHandle, int32_t byteOffset); -// extern void v1_5_bigIntSetUnsignedBytes(void* context, int32_t destinationHandle, int32_t byteOffset, int32_t byteLength); -// extern void v1_5_bigIntSetSignedBytes(void* context, int32_t destinationHandle, int32_t byteOffset, int32_t byteLength); -// extern int32_t v1_5_bigIntIsInt64(void* context, int32_t destinationHandle); -// extern long long v1_5_bigIntGetInt64(void* context, int32_t destinationHandle); -// extern void v1_5_bigIntSetInt64(void* context, int32_t destinationHandle, long long value); -// extern void v1_5_bigIntAdd(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntSub(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntMul(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntTDiv(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntTMod(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntEDiv(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntEMod(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntSqrt(void* context, int32_t destinationHandle, int32_t opHandle); -// extern void v1_5_bigIntPow(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern int32_t v1_5_bigIntLog2(void* context, int32_t op1Handle); -// extern void v1_5_bigIntAbs(void* context, int32_t destinationHandle, int32_t opHandle); -// extern void v1_5_bigIntNeg(void* context, int32_t destinationHandle, int32_t opHandle); -// extern int32_t v1_5_bigIntSign(void* context, int32_t opHandle); -// extern int32_t v1_5_bigIntCmp(void* context, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntNot(void* context, int32_t destinationHandle, int32_t opHandle); -// extern void v1_5_bigIntAnd(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntOr(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntXor(void* context, int32_t destinationHandle, int32_t op1Handle, int32_t op2Handle); -// extern void v1_5_bigIntShr(void* context, int32_t destinationHandle, int32_t opHandle, int32_t bits); -// extern void v1_5_bigIntShl(void* context, int32_t destinationHandle, int32_t opHandle, int32_t bits); -// extern void v1_5_bigIntFinishUnsigned(void* context, int32_t referenceHandle); -// extern void v1_5_bigIntFinishSigned(void* context, int32_t referenceHandle); -// extern void v1_5_bigIntToString(void* context, int32_t bigIntHandle, int32_t destinationHandle); -// extern int32_t v1_5_mBufferNew(void* context); -// extern int32_t v1_5_mBufferNewFromBytes(void* context, int32_t dataOffset, int32_t dataLength); -// extern int32_t v1_5_mBufferGetLength(void* context, int32_t mBufferHandle); -// extern int32_t v1_5_mBufferGetBytes(void* context, int32_t mBufferHandle, int32_t resultOffset); -// extern int32_t v1_5_mBufferGetByteSlice(void* context, int32_t sourceHandle, int32_t startingPosition, int32_t sliceLength, int32_t resultOffset); -// extern int32_t v1_5_mBufferCopyByteSlice(void* context, int32_t sourceHandle, int32_t startingPosition, int32_t sliceLength, int32_t destinationHandle); -// extern int32_t v1_5_mBufferEq(void* context, int32_t mBufferHandle1, int32_t mBufferHandle2); -// extern int32_t v1_5_mBufferSetBytes(void* context, int32_t mBufferHandle, int32_t dataOffset, int32_t dataLength); -// extern int32_t v1_5_mBufferSetByteSlice(void* context, int32_t mBufferHandle, int32_t startingPosition, int32_t dataLength, int32_t dataOffset); -// extern int32_t v1_5_mBufferAppend(void* context, int32_t accumulatorHandle, int32_t dataHandle); -// extern int32_t v1_5_mBufferAppendBytes(void* context, int32_t accumulatorHandle, int32_t dataOffset, int32_t dataLength); -// extern int32_t v1_5_mBufferToBigIntUnsigned(void* context, int32_t mBufferHandle, int32_t bigIntHandle); -// extern int32_t v1_5_mBufferToBigIntSigned(void* context, int32_t mBufferHandle, int32_t bigIntHandle); -// extern int32_t v1_5_mBufferFromBigIntUnsigned(void* context, int32_t mBufferHandle, int32_t bigIntHandle); -// extern int32_t v1_5_mBufferFromBigIntSigned(void* context, int32_t mBufferHandle, int32_t bigIntHandle); -// extern int32_t v1_5_mBufferToBigFloat(void* context, int32_t mBufferHandle, int32_t bigFloatHandle); -// extern int32_t v1_5_mBufferFromBigFloat(void* context, int32_t mBufferHandle, int32_t bigFloatHandle); -// extern int32_t v1_5_mBufferStorageStore(void* context, int32_t keyHandle, int32_t sourceHandle); -// extern int32_t v1_5_mBufferStorageLoad(void* context, int32_t keyHandle, int32_t destinationHandle); -// extern void v1_5_mBufferStorageLoadFromAddress(void* context, int32_t addressHandle, int32_t keyHandle, int32_t destinationHandle); -// extern int32_t v1_5_mBufferGetArgument(void* context, int32_t id, int32_t destinationHandle); -// extern int32_t v1_5_mBufferFinish(void* context, int32_t sourceHandle); -// extern int32_t v1_5_mBufferSetRandom(void* context, int32_t destinationHandle, int32_t length); -// extern int32_t v1_5_managedMapNew(void* context); -// extern int32_t v1_5_managedMapPut(void* context, int32_t mMapHandle, int32_t keyHandle, int32_t valueHandle); -// extern int32_t v1_5_managedMapGet(void* context, int32_t mMapHandle, int32_t keyHandle, int32_t outValueHandle); -// extern int32_t v1_5_managedMapRemove(void* context, int32_t mMapHandle, int32_t keyHandle, int32_t outValueHandle); -// extern int32_t v1_5_managedMapContains(void* context, int32_t mMapHandle, int32_t keyHandle); -// extern long long v1_5_smallIntGetUnsignedArgument(void* context, int32_t id); -// extern long long v1_5_smallIntGetSignedArgument(void* context, int32_t id); -// extern void v1_5_smallIntFinishUnsigned(void* context, long long value); -// extern void v1_5_smallIntFinishSigned(void* context, long long value); -// extern int32_t v1_5_smallIntStorageStoreUnsigned(void* context, int32_t keyOffset, int32_t keyLength, long long value); -// extern int32_t v1_5_smallIntStorageStoreSigned(void* context, int32_t keyOffset, int32_t keyLength, long long value); -// extern long long v1_5_smallIntStorageLoadUnsigned(void* context, int32_t keyOffset, int32_t keyLength); -// extern long long v1_5_smallIntStorageLoadSigned(void* context, int32_t keyOffset, int32_t keyLength); -// extern long long v1_5_int64getArgument(void* context, int32_t id); -// extern void v1_5_int64finish(void* context, long long value); -// extern int32_t v1_5_int64storageStore(void* context, int32_t keyOffset, int32_t keyLength, long long value); -// extern long long v1_5_int64storageLoad(void* context, int32_t keyOffset, int32_t keyLength); -// extern int32_t v1_5_sha256(void* context, int32_t dataOffset, int32_t length, int32_t resultOffset); -// extern int32_t v1_5_managedSha256(void* context, int32_t inputHandle, int32_t outputHandle); -// extern int32_t v1_5_keccak256(void* context, int32_t dataOffset, int32_t length, int32_t resultOffset); -// extern int32_t v1_5_managedKeccak256(void* context, int32_t inputHandle, int32_t outputHandle); -// extern int32_t v1_5_ripemd160(void* context, int32_t dataOffset, int32_t length, int32_t resultOffset); -// extern int32_t v1_5_managedRipemd160(void* context, int32_t inputHandle, int32_t outputHandle); -// extern int32_t v1_5_verifyBLS(void* context, int32_t keyOffset, int32_t messageOffset, int32_t messageLength, int32_t sigOffset); -// extern int32_t v1_5_managedVerifyBLS(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); -// extern int32_t v1_5_verifyEd25519(void* context, int32_t keyOffset, int32_t messageOffset, int32_t messageLength, int32_t sigOffset); -// extern int32_t v1_5_managedVerifyEd25519(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); -// extern int32_t v1_5_verifyCustomSecp256k1(void* context, int32_t keyOffset, int32_t keyLength, int32_t messageOffset, int32_t messageLength, int32_t sigOffset, int32_t hashType); -// extern int32_t v1_5_managedVerifyCustomSecp256k1(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle, int32_t hashType); -// extern int32_t v1_5_verifySecp256k1(void* context, int32_t keyOffset, int32_t keyLength, int32_t messageOffset, int32_t messageLength, int32_t sigOffset); -// extern int32_t v1_5_managedVerifySecp256k1(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); -// extern int32_t v1_5_encodeSecp256k1DerSignature(void* context, int32_t rOffset, int32_t rLength, int32_t sOffset, int32_t sLength, int32_t sigOffset); -// extern int32_t v1_5_managedEncodeSecp256k1DerSignature(void* context, int32_t rHandle, int32_t sHandle, int32_t sigHandle); -// extern void v1_5_addEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t fstPointXHandle, int32_t fstPointYHandle, int32_t sndPointXHandle, int32_t sndPointYHandle); -// extern void v1_5_doubleEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t pointXHandle, int32_t pointYHandle); -// extern int32_t v1_5_isOnCurveEC(void* context, int32_t ecHandle, int32_t pointXHandle, int32_t pointYHandle); -// extern int32_t v1_5_scalarBaseMultEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t dataOffset, int32_t length); -// extern int32_t v1_5_managedScalarBaseMultEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t dataHandle); -// extern int32_t v1_5_scalarMultEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t pointXHandle, int32_t pointYHandle, int32_t dataOffset, int32_t length); -// extern int32_t v1_5_managedScalarMultEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t pointXHandle, int32_t pointYHandle, int32_t dataHandle); -// extern int32_t v1_5_marshalEC(void* context, int32_t xPairHandle, int32_t yPairHandle, int32_t ecHandle, int32_t resultOffset); -// extern int32_t v1_5_managedMarshalEC(void* context, int32_t xPairHandle, int32_t yPairHandle, int32_t ecHandle, int32_t resultHandle); -// extern int32_t v1_5_marshalCompressedEC(void* context, int32_t xPairHandle, int32_t yPairHandle, int32_t ecHandle, int32_t resultOffset); -// extern int32_t v1_5_managedMarshalCompressedEC(void* context, int32_t xPairHandle, int32_t yPairHandle, int32_t ecHandle, int32_t resultHandle); -// extern int32_t v1_5_unmarshalEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t dataOffset, int32_t length); -// extern int32_t v1_5_managedUnmarshalEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t dataHandle); -// extern int32_t v1_5_unmarshalCompressedEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t dataOffset, int32_t length); -// extern int32_t v1_5_managedUnmarshalCompressedEC(void* context, int32_t xResultHandle, int32_t yResultHandle, int32_t ecHandle, int32_t dataHandle); -// extern int32_t v1_5_generateKeyEC(void* context, int32_t xPubKeyHandle, int32_t yPubKeyHandle, int32_t ecHandle, int32_t resultOffset); -// extern int32_t v1_5_managedGenerateKeyEC(void* context, int32_t xPubKeyHandle, int32_t yPubKeyHandle, int32_t ecHandle, int32_t resultHandle); -// extern int32_t v1_5_createEC(void* context, int32_t dataOffset, int32_t dataLength); -// extern int32_t v1_5_managedCreateEC(void* context, int32_t dataHandle); -// extern int32_t v1_5_getCurveLengthEC(void* context, int32_t ecHandle); -// extern int32_t v1_5_getPrivKeyByteLengthEC(void* context, int32_t ecHandle); -// extern int32_t v1_5_ellipticCurveGetValues(void* context, int32_t ecHandle, int32_t fieldOrderHandle, int32_t basePointOrderHandle, int32_t eqConstantHandle, int32_t xBasePointHandle, int32_t yBasePointHandle); -// extern int32_t v1_5_managedVerifySecp256r1(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); -// extern int32_t v1_5_managedVerifyBLSSignatureShare(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); -// extern int32_t v1_5_managedVerifyBLSAggregatedSignature(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); -import "C" - -import ( - "unsafe" - - "github.com/multiversx/mx-chain-vm-go/executor" -) - -// populateWasmerImports populates imports with the BaseOpsAPI API methods -func populateWasmerImports(imports *wasmerImports) error { - var err error - err = imports.append("getGasLeft", v1_5_getGasLeft, C.v1_5_getGasLeft) - if err != nil { - return err - } - - err = imports.append("getSCAddress", v1_5_getSCAddress, C.v1_5_getSCAddress) - if err != nil { - return err - } - - err = imports.append("getOwnerAddress", v1_5_getOwnerAddress, C.v1_5_getOwnerAddress) - if err != nil { - return err - } - - err = imports.append("getShardOfAddress", v1_5_getShardOfAddress, C.v1_5_getShardOfAddress) - if err != nil { - return err - } - - err = imports.append("isSmartContract", v1_5_isSmartContract, C.v1_5_isSmartContract) - if err != nil { - return err - } - - err = imports.append("signalError", v1_5_signalError, C.v1_5_signalError) - if err != nil { - return err - } - - err = imports.append("getExternalBalance", v1_5_getExternalBalance, C.v1_5_getExternalBalance) - if err != nil { - return err - } - - err = imports.append("getBlockHash", v1_5_getBlockHash, C.v1_5_getBlockHash) - if err != nil { - return err - } - - err = imports.append("getESDTBalance", v1_5_getESDTBalance, C.v1_5_getESDTBalance) - if err != nil { - return err - } - - err = imports.append("getESDTNFTNameLength", v1_5_getESDTNFTNameLength, C.v1_5_getESDTNFTNameLength) - if err != nil { - return err - } - - err = imports.append("getESDTNFTAttributeLength", v1_5_getESDTNFTAttributeLength, C.v1_5_getESDTNFTAttributeLength) - if err != nil { - return err - } - - err = imports.append("getESDTNFTURILength", v1_5_getESDTNFTURILength, C.v1_5_getESDTNFTURILength) - if err != nil { - return err - } - - err = imports.append("getESDTTokenData", v1_5_getESDTTokenData, C.v1_5_getESDTTokenData) - if err != nil { - return err - } - - err = imports.append("getESDTLocalRoles", v1_5_getESDTLocalRoles, C.v1_5_getESDTLocalRoles) - if err != nil { - return err - } - - err = imports.append("validateTokenIdentifier", v1_5_validateTokenIdentifier, C.v1_5_validateTokenIdentifier) - if err != nil { - return err - } - - err = imports.append("transferValue", v1_5_transferValue, C.v1_5_transferValue) - if err != nil { - return err - } - - err = imports.append("transferValueExecute", v1_5_transferValueExecute, C.v1_5_transferValueExecute) - if err != nil { - return err - } - - err = imports.append("transferESDTExecute", v1_5_transferESDTExecute, C.v1_5_transferESDTExecute) - if err != nil { - return err - } - - err = imports.append("transferESDTNFTExecute", v1_5_transferESDTNFTExecute, C.v1_5_transferESDTNFTExecute) - if err != nil { - return err - } - - err = imports.append("multiTransferESDTNFTExecute", v1_5_multiTransferESDTNFTExecute, C.v1_5_multiTransferESDTNFTExecute) - if err != nil { - return err - } - - err = imports.append("createAsyncCall", v1_5_createAsyncCall, C.v1_5_createAsyncCall) - if err != nil { - return err - } - - err = imports.append("setAsyncContextCallback", v1_5_setAsyncContextCallback, C.v1_5_setAsyncContextCallback) - if err != nil { - return err - } - - err = imports.append("upgradeContract", v1_5_upgradeContract, C.v1_5_upgradeContract) - if err != nil { - return err - } - - err = imports.append("upgradeFromSourceContract", v1_5_upgradeFromSourceContract, C.v1_5_upgradeFromSourceContract) - if err != nil { - return err - } - - err = imports.append("deleteContract", v1_5_deleteContract, C.v1_5_deleteContract) - if err != nil { - return err - } - - err = imports.append("asyncCall", v1_5_asyncCall, C.v1_5_asyncCall) - if err != nil { - return err - } - - err = imports.append("getArgumentLength", v1_5_getArgumentLength, C.v1_5_getArgumentLength) - if err != nil { - return err - } - - err = imports.append("getArgument", v1_5_getArgument, C.v1_5_getArgument) - if err != nil { - return err - } - - err = imports.append("getFunction", v1_5_getFunction, C.v1_5_getFunction) - if err != nil { - return err - } - - err = imports.append("getNumArguments", v1_5_getNumArguments, C.v1_5_getNumArguments) - if err != nil { - return err - } - - err = imports.append("storageStore", v1_5_storageStore, C.v1_5_storageStore) - if err != nil { - return err - } - - err = imports.append("storageLoadLength", v1_5_storageLoadLength, C.v1_5_storageLoadLength) - if err != nil { - return err - } - - err = imports.append("storageLoadFromAddress", v1_5_storageLoadFromAddress, C.v1_5_storageLoadFromAddress) - if err != nil { - return err - } - - err = imports.append("storageLoad", v1_5_storageLoad, C.v1_5_storageLoad) - if err != nil { - return err - } - - err = imports.append("setStorageLock", v1_5_setStorageLock, C.v1_5_setStorageLock) - if err != nil { - return err - } - - err = imports.append("getStorageLock", v1_5_getStorageLock, C.v1_5_getStorageLock) - if err != nil { - return err - } - - err = imports.append("isStorageLocked", v1_5_isStorageLocked, C.v1_5_isStorageLocked) - if err != nil { - return err - } - - err = imports.append("clearStorageLock", v1_5_clearStorageLock, C.v1_5_clearStorageLock) - if err != nil { - return err - } - - err = imports.append("getCaller", v1_5_getCaller, C.v1_5_getCaller) - if err != nil { - return err - } - - err = imports.append("checkNoPayment", v1_5_checkNoPayment, C.v1_5_checkNoPayment) - if err != nil { - return err - } - - err = imports.append("getCallValue", v1_5_getCallValue, C.v1_5_getCallValue) - if err != nil { - return err - } - - err = imports.append("getESDTValue", v1_5_getESDTValue, C.v1_5_getESDTValue) - if err != nil { - return err - } - - err = imports.append("getESDTValueByIndex", v1_5_getESDTValueByIndex, C.v1_5_getESDTValueByIndex) - if err != nil { - return err - } - - err = imports.append("getESDTTokenName", v1_5_getESDTTokenName, C.v1_5_getESDTTokenName) - if err != nil { - return err - } - - err = imports.append("getESDTTokenNameByIndex", v1_5_getESDTTokenNameByIndex, C.v1_5_getESDTTokenNameByIndex) - if err != nil { - return err - } - - err = imports.append("getESDTTokenNonce", v1_5_getESDTTokenNonce, C.v1_5_getESDTTokenNonce) - if err != nil { - return err - } - - err = imports.append("getESDTTokenNonceByIndex", v1_5_getESDTTokenNonceByIndex, C.v1_5_getESDTTokenNonceByIndex) - if err != nil { - return err - } - - err = imports.append("getCurrentESDTNFTNonce", v1_5_getCurrentESDTNFTNonce, C.v1_5_getCurrentESDTNFTNonce) - if err != nil { - return err - } - - err = imports.append("getESDTTokenType", v1_5_getESDTTokenType, C.v1_5_getESDTTokenType) - if err != nil { - return err - } - - err = imports.append("getESDTTokenTypeByIndex", v1_5_getESDTTokenTypeByIndex, C.v1_5_getESDTTokenTypeByIndex) - if err != nil { - return err - } - - err = imports.append("getNumESDTTransfers", v1_5_getNumESDTTransfers, C.v1_5_getNumESDTTransfers) - if err != nil { - return err - } - - err = imports.append("getCallValueTokenName", v1_5_getCallValueTokenName, C.v1_5_getCallValueTokenName) - if err != nil { - return err - } - - err = imports.append("getCallValueTokenNameByIndex", v1_5_getCallValueTokenNameByIndex, C.v1_5_getCallValueTokenNameByIndex) - if err != nil { - return err - } - - err = imports.append("isReservedFunctionName", v1_5_isReservedFunctionName, C.v1_5_isReservedFunctionName) - if err != nil { - return err - } - - err = imports.append("writeLog", v1_5_writeLog, C.v1_5_writeLog) - if err != nil { - return err - } - - err = imports.append("writeEventLog", v1_5_writeEventLog, C.v1_5_writeEventLog) - if err != nil { - return err - } - - err = imports.append("getBlockTimestamp", v1_5_getBlockTimestamp, C.v1_5_getBlockTimestamp) - if err != nil { - return err - } - - err = imports.append("getBlockNonce", v1_5_getBlockNonce, C.v1_5_getBlockNonce) - if err != nil { - return err - } - - err = imports.append("getBlockRound", v1_5_getBlockRound, C.v1_5_getBlockRound) - if err != nil { - return err - } - - err = imports.append("getBlockEpoch", v1_5_getBlockEpoch, C.v1_5_getBlockEpoch) - if err != nil { - return err - } - - err = imports.append("getBlockRandomSeed", v1_5_getBlockRandomSeed, C.v1_5_getBlockRandomSeed) - if err != nil { - return err - } - - err = imports.append("getStateRootHash", v1_5_getStateRootHash, C.v1_5_getStateRootHash) - if err != nil { - return err - } - - err = imports.append("getPrevBlockTimestamp", v1_5_getPrevBlockTimestamp, C.v1_5_getPrevBlockTimestamp) - if err != nil { - return err - } - - err = imports.append("getPrevBlockNonce", v1_5_getPrevBlockNonce, C.v1_5_getPrevBlockNonce) - if err != nil { - return err - } - - err = imports.append("getPrevBlockRound", v1_5_getPrevBlockRound, C.v1_5_getPrevBlockRound) - if err != nil { - return err - } - - err = imports.append("getPrevBlockEpoch", v1_5_getPrevBlockEpoch, C.v1_5_getPrevBlockEpoch) - if err != nil { - return err - } - - err = imports.append("getPrevBlockRandomSeed", v1_5_getPrevBlockRandomSeed, C.v1_5_getPrevBlockRandomSeed) - if err != nil { - return err - } - - err = imports.append("finish", v1_5_finish, C.v1_5_finish) - if err != nil { - return err - } - - err = imports.append("executeOnSameContext", v1_5_executeOnSameContext, C.v1_5_executeOnSameContext) - if err != nil { - return err - } - - err = imports.append("executeOnDestContext", v1_5_executeOnDestContext, C.v1_5_executeOnDestContext) - if err != nil { - return err - } - - err = imports.append("executeReadOnly", v1_5_executeReadOnly, C.v1_5_executeReadOnly) - if err != nil { - return err - } - - err = imports.append("createContract", v1_5_createContract, C.v1_5_createContract) - if err != nil { - return err - } - - err = imports.append("deployFromSourceContract", v1_5_deployFromSourceContract, C.v1_5_deployFromSourceContract) - if err != nil { - return err - } - - err = imports.append("getNumReturnData", v1_5_getNumReturnData, C.v1_5_getNumReturnData) - if err != nil { - return err - } - - err = imports.append("getReturnDataSize", v1_5_getReturnDataSize, C.v1_5_getReturnDataSize) - if err != nil { - return err - } - - err = imports.append("getReturnData", v1_5_getReturnData, C.v1_5_getReturnData) - if err != nil { - return err - } - - err = imports.append("cleanReturnData", v1_5_cleanReturnData, C.v1_5_cleanReturnData) - if err != nil { - return err - } - - err = imports.append("deleteFromReturnData", v1_5_deleteFromReturnData, C.v1_5_deleteFromReturnData) - if err != nil { - return err - } - - err = imports.append("getOriginalTxHash", v1_5_getOriginalTxHash, C.v1_5_getOriginalTxHash) - if err != nil { - return err - } - - err = imports.append("getCurrentTxHash", v1_5_getCurrentTxHash, C.v1_5_getCurrentTxHash) - if err != nil { - return err - } - - err = imports.append("getPrevTxHash", v1_5_getPrevTxHash, C.v1_5_getPrevTxHash) - if err != nil { - return err - } - - err = imports.append("managedSCAddress", v1_5_managedSCAddress, C.v1_5_managedSCAddress) - if err != nil { - return err - } - - err = imports.append("managedOwnerAddress", v1_5_managedOwnerAddress, C.v1_5_managedOwnerAddress) - if err != nil { - return err - } - - err = imports.append("managedCaller", v1_5_managedCaller, C.v1_5_managedCaller) - if err != nil { - return err - } - - err = imports.append("managedGetOriginalCallerAddr", v1_5_managedGetOriginalCallerAddr, C.v1_5_managedGetOriginalCallerAddr) - if err != nil { - return err - } - - err = imports.append("managedGetRelayerAddr", v1_5_managedGetRelayerAddr, C.v1_5_managedGetRelayerAddr) - if err != nil { - return err - } - - err = imports.append("managedSignalError", v1_5_managedSignalError, C.v1_5_managedSignalError) - if err != nil { - return err - } - - err = imports.append("managedWriteLog", v1_5_managedWriteLog, C.v1_5_managedWriteLog) - if err != nil { - return err - } - - err = imports.append("managedGetOriginalTxHash", v1_5_managedGetOriginalTxHash, C.v1_5_managedGetOriginalTxHash) - if err != nil { - return err - } - - err = imports.append("managedGetStateRootHash", v1_5_managedGetStateRootHash, C.v1_5_managedGetStateRootHash) - if err != nil { - return err - } - - err = imports.append("managedGetBlockRandomSeed", v1_5_managedGetBlockRandomSeed, C.v1_5_managedGetBlockRandomSeed) - if err != nil { - return err - } - - err = imports.append("managedGetPrevBlockRandomSeed", v1_5_managedGetPrevBlockRandomSeed, C.v1_5_managedGetPrevBlockRandomSeed) - if err != nil { - return err - } - - err = imports.append("managedGetReturnData", v1_5_managedGetReturnData, C.v1_5_managedGetReturnData) - if err != nil { - return err - } - - err = imports.append("managedGetMultiESDTCallValue", v1_5_managedGetMultiESDTCallValue, C.v1_5_managedGetMultiESDTCallValue) - if err != nil { - return err - } - - err = imports.append("managedGetBackTransfers", v1_5_managedGetBackTransfers, C.v1_5_managedGetBackTransfers) - if err != nil { - return err - } - - err = imports.append("managedGetESDTBalance", v1_5_managedGetESDTBalance, C.v1_5_managedGetESDTBalance) - if err != nil { - return err - } - - err = imports.append("managedGetESDTTokenData", v1_5_managedGetESDTTokenData, C.v1_5_managedGetESDTTokenData) - if err != nil { - return err - } - - err = imports.append("managedAsyncCall", v1_5_managedAsyncCall, C.v1_5_managedAsyncCall) - if err != nil { - return err - } - - err = imports.append("managedCreateAsyncCall", v1_5_managedCreateAsyncCall, C.v1_5_managedCreateAsyncCall) - if err != nil { - return err - } - - err = imports.append("managedGetCallbackClosure", v1_5_managedGetCallbackClosure, C.v1_5_managedGetCallbackClosure) - if err != nil { - return err - } - - err = imports.append("managedUpgradeFromSourceContract", v1_5_managedUpgradeFromSourceContract, C.v1_5_managedUpgradeFromSourceContract) - if err != nil { - return err - } - - err = imports.append("managedUpgradeContract", v1_5_managedUpgradeContract, C.v1_5_managedUpgradeContract) - if err != nil { - return err - } - - err = imports.append("managedDeleteContract", v1_5_managedDeleteContract, C.v1_5_managedDeleteContract) - if err != nil { - return err - } - - err = imports.append("managedDeployFromSourceContract", v1_5_managedDeployFromSourceContract, C.v1_5_managedDeployFromSourceContract) - if err != nil { - return err - } - - err = imports.append("managedCreateContract", v1_5_managedCreateContract, C.v1_5_managedCreateContract) - if err != nil { - return err - } - - err = imports.append("managedExecuteReadOnly", v1_5_managedExecuteReadOnly, C.v1_5_managedExecuteReadOnly) - if err != nil { - return err - } - - err = imports.append("managedExecuteOnSameContext", v1_5_managedExecuteOnSameContext, C.v1_5_managedExecuteOnSameContext) - if err != nil { - return err - } - - err = imports.append("managedExecuteOnDestContext", v1_5_managedExecuteOnDestContext, C.v1_5_managedExecuteOnDestContext) - if err != nil { - return err - } - - err = imports.append("managedMultiTransferESDTNFTExecute", v1_5_managedMultiTransferESDTNFTExecute, C.v1_5_managedMultiTransferESDTNFTExecute) - if err != nil { - return err - } - - err = imports.append("managedMultiTransferESDTNFTExecuteByUser", v1_5_managedMultiTransferESDTNFTExecuteByUser, C.v1_5_managedMultiTransferESDTNFTExecuteByUser) - if err != nil { - return err - } - - err = imports.append("managedTransferValueExecute", v1_5_managedTransferValueExecute, C.v1_5_managedTransferValueExecute) - if err != nil { - return err - } - - err = imports.append("managedIsESDTFrozen", v1_5_managedIsESDTFrozen, C.v1_5_managedIsESDTFrozen) - if err != nil { - return err - } - - err = imports.append("managedIsESDTLimitedTransfer", v1_5_managedIsESDTLimitedTransfer, C.v1_5_managedIsESDTLimitedTransfer) - if err != nil { - return err - } - - err = imports.append("managedIsESDTPaused", v1_5_managedIsESDTPaused, C.v1_5_managedIsESDTPaused) - if err != nil { - return err - } - - err = imports.append("managedBufferToHex", v1_5_managedBufferToHex, C.v1_5_managedBufferToHex) - if err != nil { - return err - } - - err = imports.append("managedGetCodeMetadata", v1_5_managedGetCodeMetadata, C.v1_5_managedGetCodeMetadata) - if err != nil { - return err - } - - err = imports.append("managedIsBuiltinFunction", v1_5_managedIsBuiltinFunction, C.v1_5_managedIsBuiltinFunction) - if err != nil { - return err - } - - err = imports.append("bigFloatNewFromParts", v1_5_bigFloatNewFromParts, C.v1_5_bigFloatNewFromParts) - if err != nil { - return err - } - - err = imports.append("bigFloatNewFromFrac", v1_5_bigFloatNewFromFrac, C.v1_5_bigFloatNewFromFrac) - if err != nil { - return err - } - - err = imports.append("bigFloatNewFromSci", v1_5_bigFloatNewFromSci, C.v1_5_bigFloatNewFromSci) - if err != nil { - return err - } - - err = imports.append("bigFloatAdd", v1_5_bigFloatAdd, C.v1_5_bigFloatAdd) - if err != nil { - return err - } - - err = imports.append("bigFloatSub", v1_5_bigFloatSub, C.v1_5_bigFloatSub) - if err != nil { - return err - } - - err = imports.append("bigFloatMul", v1_5_bigFloatMul, C.v1_5_bigFloatMul) - if err != nil { - return err - } - - err = imports.append("bigFloatDiv", v1_5_bigFloatDiv, C.v1_5_bigFloatDiv) - if err != nil { - return err - } - - err = imports.append("bigFloatNeg", v1_5_bigFloatNeg, C.v1_5_bigFloatNeg) - if err != nil { - return err - } - - err = imports.append("bigFloatClone", v1_5_bigFloatClone, C.v1_5_bigFloatClone) - if err != nil { - return err - } - - err = imports.append("bigFloatCmp", v1_5_bigFloatCmp, C.v1_5_bigFloatCmp) - if err != nil { - return err - } - - err = imports.append("bigFloatAbs", v1_5_bigFloatAbs, C.v1_5_bigFloatAbs) - if err != nil { - return err - } - - err = imports.append("bigFloatSign", v1_5_bigFloatSign, C.v1_5_bigFloatSign) - if err != nil { - return err - } - - err = imports.append("bigFloatSqrt", v1_5_bigFloatSqrt, C.v1_5_bigFloatSqrt) - if err != nil { - return err - } - - err = imports.append("bigFloatPow", v1_5_bigFloatPow, C.v1_5_bigFloatPow) - if err != nil { - return err - } - - err = imports.append("bigFloatFloor", v1_5_bigFloatFloor, C.v1_5_bigFloatFloor) - if err != nil { - return err - } - - err = imports.append("bigFloatCeil", v1_5_bigFloatCeil, C.v1_5_bigFloatCeil) - if err != nil { - return err - } - - err = imports.append("bigFloatTruncate", v1_5_bigFloatTruncate, C.v1_5_bigFloatTruncate) - if err != nil { - return err - } - - err = imports.append("bigFloatSetInt64", v1_5_bigFloatSetInt64, C.v1_5_bigFloatSetInt64) - if err != nil { - return err - } - - err = imports.append("bigFloatIsInt", v1_5_bigFloatIsInt, C.v1_5_bigFloatIsInt) - if err != nil { - return err - } - - err = imports.append("bigFloatSetBigInt", v1_5_bigFloatSetBigInt, C.v1_5_bigFloatSetBigInt) - if err != nil { - return err - } - - err = imports.append("bigFloatGetConstPi", v1_5_bigFloatGetConstPi, C.v1_5_bigFloatGetConstPi) - if err != nil { - return err - } - - err = imports.append("bigFloatGetConstE", v1_5_bigFloatGetConstE, C.v1_5_bigFloatGetConstE) - if err != nil { - return err - } - - err = imports.append("bigIntGetUnsignedArgument", v1_5_bigIntGetUnsignedArgument, C.v1_5_bigIntGetUnsignedArgument) - if err != nil { - return err - } - - err = imports.append("bigIntGetSignedArgument", v1_5_bigIntGetSignedArgument, C.v1_5_bigIntGetSignedArgument) - if err != nil { - return err - } - - err = imports.append("bigIntStorageStoreUnsigned", v1_5_bigIntStorageStoreUnsigned, C.v1_5_bigIntStorageStoreUnsigned) - if err != nil { - return err - } - - err = imports.append("bigIntStorageLoadUnsigned", v1_5_bigIntStorageLoadUnsigned, C.v1_5_bigIntStorageLoadUnsigned) - if err != nil { - return err - } - - err = imports.append("bigIntGetCallValue", v1_5_bigIntGetCallValue, C.v1_5_bigIntGetCallValue) - if err != nil { - return err - } - - err = imports.append("bigIntGetESDTCallValue", v1_5_bigIntGetESDTCallValue, C.v1_5_bigIntGetESDTCallValue) - if err != nil { - return err - } - - err = imports.append("bigIntGetESDTCallValueByIndex", v1_5_bigIntGetESDTCallValueByIndex, C.v1_5_bigIntGetESDTCallValueByIndex) - if err != nil { - return err - } - - err = imports.append("bigIntGetExternalBalance", v1_5_bigIntGetExternalBalance, C.v1_5_bigIntGetExternalBalance) - if err != nil { - return err - } - - err = imports.append("bigIntGetESDTExternalBalance", v1_5_bigIntGetESDTExternalBalance, C.v1_5_bigIntGetESDTExternalBalance) - if err != nil { - return err - } - - err = imports.append("bigIntNew", v1_5_bigIntNew, C.v1_5_bigIntNew) - if err != nil { - return err - } - - err = imports.append("bigIntUnsignedByteLength", v1_5_bigIntUnsignedByteLength, C.v1_5_bigIntUnsignedByteLength) - if err != nil { - return err - } - - err = imports.append("bigIntSignedByteLength", v1_5_bigIntSignedByteLength, C.v1_5_bigIntSignedByteLength) - if err != nil { - return err - } - - err = imports.append("bigIntGetUnsignedBytes", v1_5_bigIntGetUnsignedBytes, C.v1_5_bigIntGetUnsignedBytes) - if err != nil { - return err - } - - err = imports.append("bigIntGetSignedBytes", v1_5_bigIntGetSignedBytes, C.v1_5_bigIntGetSignedBytes) - if err != nil { - return err - } - - err = imports.append("bigIntSetUnsignedBytes", v1_5_bigIntSetUnsignedBytes, C.v1_5_bigIntSetUnsignedBytes) - if err != nil { - return err - } - - err = imports.append("bigIntSetSignedBytes", v1_5_bigIntSetSignedBytes, C.v1_5_bigIntSetSignedBytes) - if err != nil { - return err - } - - err = imports.append("bigIntIsInt64", v1_5_bigIntIsInt64, C.v1_5_bigIntIsInt64) - if err != nil { - return err - } - - err = imports.append("bigIntGetInt64", v1_5_bigIntGetInt64, C.v1_5_bigIntGetInt64) - if err != nil { - return err - } - - err = imports.append("bigIntSetInt64", v1_5_bigIntSetInt64, C.v1_5_bigIntSetInt64) - if err != nil { - return err - } - - err = imports.append("bigIntAdd", v1_5_bigIntAdd, C.v1_5_bigIntAdd) - if err != nil { - return err - } - - err = imports.append("bigIntSub", v1_5_bigIntSub, C.v1_5_bigIntSub) - if err != nil { - return err - } - - err = imports.append("bigIntMul", v1_5_bigIntMul, C.v1_5_bigIntMul) - if err != nil { - return err - } - - err = imports.append("bigIntTDiv", v1_5_bigIntTDiv, C.v1_5_bigIntTDiv) - if err != nil { - return err - } - - err = imports.append("bigIntTMod", v1_5_bigIntTMod, C.v1_5_bigIntTMod) - if err != nil { - return err - } - - err = imports.append("bigIntEDiv", v1_5_bigIntEDiv, C.v1_5_bigIntEDiv) - if err != nil { - return err - } - - err = imports.append("bigIntEMod", v1_5_bigIntEMod, C.v1_5_bigIntEMod) - if err != nil { - return err - } - - err = imports.append("bigIntSqrt", v1_5_bigIntSqrt, C.v1_5_bigIntSqrt) - if err != nil { - return err - } - - err = imports.append("bigIntPow", v1_5_bigIntPow, C.v1_5_bigIntPow) - if err != nil { - return err - } - - err = imports.append("bigIntLog2", v1_5_bigIntLog2, C.v1_5_bigIntLog2) - if err != nil { - return err - } - - err = imports.append("bigIntAbs", v1_5_bigIntAbs, C.v1_5_bigIntAbs) - if err != nil { - return err - } - - err = imports.append("bigIntNeg", v1_5_bigIntNeg, C.v1_5_bigIntNeg) - if err != nil { - return err - } - - err = imports.append("bigIntSign", v1_5_bigIntSign, C.v1_5_bigIntSign) - if err != nil { - return err - } - - err = imports.append("bigIntCmp", v1_5_bigIntCmp, C.v1_5_bigIntCmp) - if err != nil { - return err - } - - err = imports.append("bigIntNot", v1_5_bigIntNot, C.v1_5_bigIntNot) - if err != nil { - return err - } - - err = imports.append("bigIntAnd", v1_5_bigIntAnd, C.v1_5_bigIntAnd) - if err != nil { - return err - } - - err = imports.append("bigIntOr", v1_5_bigIntOr, C.v1_5_bigIntOr) - if err != nil { - return err - } - - err = imports.append("bigIntXor", v1_5_bigIntXor, C.v1_5_bigIntXor) - if err != nil { - return err - } - - err = imports.append("bigIntShr", v1_5_bigIntShr, C.v1_5_bigIntShr) - if err != nil { - return err - } - - err = imports.append("bigIntShl", v1_5_bigIntShl, C.v1_5_bigIntShl) - if err != nil { - return err - } - - err = imports.append("bigIntFinishUnsigned", v1_5_bigIntFinishUnsigned, C.v1_5_bigIntFinishUnsigned) - if err != nil { - return err - } - - err = imports.append("bigIntFinishSigned", v1_5_bigIntFinishSigned, C.v1_5_bigIntFinishSigned) - if err != nil { - return err - } - - err = imports.append("bigIntToString", v1_5_bigIntToString, C.v1_5_bigIntToString) - if err != nil { - return err - } - - err = imports.append("mBufferNew", v1_5_mBufferNew, C.v1_5_mBufferNew) - if err != nil { - return err - } - - err = imports.append("mBufferNewFromBytes", v1_5_mBufferNewFromBytes, C.v1_5_mBufferNewFromBytes) - if err != nil { - return err - } - - err = imports.append("mBufferGetLength", v1_5_mBufferGetLength, C.v1_5_mBufferGetLength) - if err != nil { - return err - } - - err = imports.append("mBufferGetBytes", v1_5_mBufferGetBytes, C.v1_5_mBufferGetBytes) - if err != nil { - return err - } - - err = imports.append("mBufferGetByteSlice", v1_5_mBufferGetByteSlice, C.v1_5_mBufferGetByteSlice) - if err != nil { - return err - } - - err = imports.append("mBufferCopyByteSlice", v1_5_mBufferCopyByteSlice, C.v1_5_mBufferCopyByteSlice) - if err != nil { - return err - } - - err = imports.append("mBufferEq", v1_5_mBufferEq, C.v1_5_mBufferEq) - if err != nil { - return err - } - - err = imports.append("mBufferSetBytes", v1_5_mBufferSetBytes, C.v1_5_mBufferSetBytes) - if err != nil { - return err - } - - err = imports.append("mBufferSetByteSlice", v1_5_mBufferSetByteSlice, C.v1_5_mBufferSetByteSlice) - if err != nil { - return err - } - - err = imports.append("mBufferAppend", v1_5_mBufferAppend, C.v1_5_mBufferAppend) - if err != nil { - return err - } - - err = imports.append("mBufferAppendBytes", v1_5_mBufferAppendBytes, C.v1_5_mBufferAppendBytes) - if err != nil { - return err - } - - err = imports.append("mBufferToBigIntUnsigned", v1_5_mBufferToBigIntUnsigned, C.v1_5_mBufferToBigIntUnsigned) - if err != nil { - return err - } - - err = imports.append("mBufferToBigIntSigned", v1_5_mBufferToBigIntSigned, C.v1_5_mBufferToBigIntSigned) - if err != nil { - return err - } - - err = imports.append("mBufferFromBigIntUnsigned", v1_5_mBufferFromBigIntUnsigned, C.v1_5_mBufferFromBigIntUnsigned) - if err != nil { - return err - } - - err = imports.append("mBufferFromBigIntSigned", v1_5_mBufferFromBigIntSigned, C.v1_5_mBufferFromBigIntSigned) - if err != nil { - return err - } - - err = imports.append("mBufferToBigFloat", v1_5_mBufferToBigFloat, C.v1_5_mBufferToBigFloat) - if err != nil { - return err - } - - err = imports.append("mBufferFromBigFloat", v1_5_mBufferFromBigFloat, C.v1_5_mBufferFromBigFloat) - if err != nil { - return err - } - - err = imports.append("mBufferStorageStore", v1_5_mBufferStorageStore, C.v1_5_mBufferStorageStore) - if err != nil { - return err - } - - err = imports.append("mBufferStorageLoad", v1_5_mBufferStorageLoad, C.v1_5_mBufferStorageLoad) - if err != nil { - return err - } - - err = imports.append("mBufferStorageLoadFromAddress", v1_5_mBufferStorageLoadFromAddress, C.v1_5_mBufferStorageLoadFromAddress) - if err != nil { - return err - } - - err = imports.append("mBufferGetArgument", v1_5_mBufferGetArgument, C.v1_5_mBufferGetArgument) - if err != nil { - return err - } - - err = imports.append("mBufferFinish", v1_5_mBufferFinish, C.v1_5_mBufferFinish) - if err != nil { - return err - } - - err = imports.append("mBufferSetRandom", v1_5_mBufferSetRandom, C.v1_5_mBufferSetRandom) - if err != nil { - return err - } - - err = imports.append("managedMapNew", v1_5_managedMapNew, C.v1_5_managedMapNew) - if err != nil { - return err - } - - err = imports.append("managedMapPut", v1_5_managedMapPut, C.v1_5_managedMapPut) - if err != nil { - return err - } - - err = imports.append("managedMapGet", v1_5_managedMapGet, C.v1_5_managedMapGet) - if err != nil { - return err - } - - err = imports.append("managedMapRemove", v1_5_managedMapRemove, C.v1_5_managedMapRemove) - if err != nil { - return err - } - - err = imports.append("managedMapContains", v1_5_managedMapContains, C.v1_5_managedMapContains) - if err != nil { - return err - } - - err = imports.append("smallIntGetUnsignedArgument", v1_5_smallIntGetUnsignedArgument, C.v1_5_smallIntGetUnsignedArgument) - if err != nil { - return err - } - - err = imports.append("smallIntGetSignedArgument", v1_5_smallIntGetSignedArgument, C.v1_5_smallIntGetSignedArgument) - if err != nil { - return err - } - - err = imports.append("smallIntFinishUnsigned", v1_5_smallIntFinishUnsigned, C.v1_5_smallIntFinishUnsigned) - if err != nil { - return err - } - - err = imports.append("smallIntFinishSigned", v1_5_smallIntFinishSigned, C.v1_5_smallIntFinishSigned) - if err != nil { - return err - } - - err = imports.append("smallIntStorageStoreUnsigned", v1_5_smallIntStorageStoreUnsigned, C.v1_5_smallIntStorageStoreUnsigned) - if err != nil { - return err - } - - err = imports.append("smallIntStorageStoreSigned", v1_5_smallIntStorageStoreSigned, C.v1_5_smallIntStorageStoreSigned) - if err != nil { - return err - } - - err = imports.append("smallIntStorageLoadUnsigned", v1_5_smallIntStorageLoadUnsigned, C.v1_5_smallIntStorageLoadUnsigned) - if err != nil { - return err - } - - err = imports.append("smallIntStorageLoadSigned", v1_5_smallIntStorageLoadSigned, C.v1_5_smallIntStorageLoadSigned) - if err != nil { - return err - } - - err = imports.append("int64getArgument", v1_5_int64getArgument, C.v1_5_int64getArgument) - if err != nil { - return err - } - - err = imports.append("int64finish", v1_5_int64finish, C.v1_5_int64finish) - if err != nil { - return err - } - - err = imports.append("int64storageStore", v1_5_int64storageStore, C.v1_5_int64storageStore) - if err != nil { - return err - } - - err = imports.append("int64storageLoad", v1_5_int64storageLoad, C.v1_5_int64storageLoad) - if err != nil { - return err - } - - err = imports.append("sha256", v1_5_sha256, C.v1_5_sha256) - if err != nil { - return err - } - - err = imports.append("managedSha256", v1_5_managedSha256, C.v1_5_managedSha256) - if err != nil { - return err - } - - err = imports.append("keccak256", v1_5_keccak256, C.v1_5_keccak256) - if err != nil { - return err - } - - err = imports.append("managedKeccak256", v1_5_managedKeccak256, C.v1_5_managedKeccak256) - if err != nil { - return err - } - - err = imports.append("ripemd160", v1_5_ripemd160, C.v1_5_ripemd160) - if err != nil { - return err - } - - err = imports.append("managedRipemd160", v1_5_managedRipemd160, C.v1_5_managedRipemd160) - if err != nil { - return err - } - - err = imports.append("verifyBLS", v1_5_verifyBLS, C.v1_5_verifyBLS) - if err != nil { - return err - } - - err = imports.append("managedVerifyBLS", v1_5_managedVerifyBLS, C.v1_5_managedVerifyBLS) - if err != nil { - return err - } - - err = imports.append("verifyEd25519", v1_5_verifyEd25519, C.v1_5_verifyEd25519) - if err != nil { - return err - } - - err = imports.append("managedVerifyEd25519", v1_5_managedVerifyEd25519, C.v1_5_managedVerifyEd25519) - if err != nil { - return err - } - - err = imports.append("verifyCustomSecp256k1", v1_5_verifyCustomSecp256k1, C.v1_5_verifyCustomSecp256k1) - if err != nil { - return err - } - - err = imports.append("managedVerifyCustomSecp256k1", v1_5_managedVerifyCustomSecp256k1, C.v1_5_managedVerifyCustomSecp256k1) - if err != nil { - return err - } - - err = imports.append("verifySecp256k1", v1_5_verifySecp256k1, C.v1_5_verifySecp256k1) - if err != nil { - return err - } - - err = imports.append("managedVerifySecp256k1", v1_5_managedVerifySecp256k1, C.v1_5_managedVerifySecp256k1) - if err != nil { - return err - } - - err = imports.append("encodeSecp256k1DerSignature", v1_5_encodeSecp256k1DerSignature, C.v1_5_encodeSecp256k1DerSignature) - if err != nil { - return err - } - - err = imports.append("managedEncodeSecp256k1DerSignature", v1_5_managedEncodeSecp256k1DerSignature, C.v1_5_managedEncodeSecp256k1DerSignature) - if err != nil { - return err - } - - err = imports.append("addEC", v1_5_addEC, C.v1_5_addEC) - if err != nil { - return err - } - - err = imports.append("doubleEC", v1_5_doubleEC, C.v1_5_doubleEC) - if err != nil { - return err - } - - err = imports.append("isOnCurveEC", v1_5_isOnCurveEC, C.v1_5_isOnCurveEC) - if err != nil { - return err - } - - err = imports.append("scalarBaseMultEC", v1_5_scalarBaseMultEC, C.v1_5_scalarBaseMultEC) - if err != nil { - return err - } - - err = imports.append("managedScalarBaseMultEC", v1_5_managedScalarBaseMultEC, C.v1_5_managedScalarBaseMultEC) - if err != nil { - return err - } - - err = imports.append("scalarMultEC", v1_5_scalarMultEC, C.v1_5_scalarMultEC) - if err != nil { - return err - } - - err = imports.append("managedScalarMultEC", v1_5_managedScalarMultEC, C.v1_5_managedScalarMultEC) - if err != nil { - return err - } - - err = imports.append("marshalEC", v1_5_marshalEC, C.v1_5_marshalEC) - if err != nil { - return err - } - - err = imports.append("managedMarshalEC", v1_5_managedMarshalEC, C.v1_5_managedMarshalEC) - if err != nil { - return err - } - - err = imports.append("marshalCompressedEC", v1_5_marshalCompressedEC, C.v1_5_marshalCompressedEC) - if err != nil { - return err - } - - err = imports.append("managedMarshalCompressedEC", v1_5_managedMarshalCompressedEC, C.v1_5_managedMarshalCompressedEC) - if err != nil { - return err - } - - err = imports.append("unmarshalEC", v1_5_unmarshalEC, C.v1_5_unmarshalEC) - if err != nil { - return err - } - - err = imports.append("managedUnmarshalEC", v1_5_managedUnmarshalEC, C.v1_5_managedUnmarshalEC) - if err != nil { - return err - } - - err = imports.append("unmarshalCompressedEC", v1_5_unmarshalCompressedEC, C.v1_5_unmarshalCompressedEC) - if err != nil { - return err - } - - err = imports.append("managedUnmarshalCompressedEC", v1_5_managedUnmarshalCompressedEC, C.v1_5_managedUnmarshalCompressedEC) - if err != nil { - return err - } - - err = imports.append("generateKeyEC", v1_5_generateKeyEC, C.v1_5_generateKeyEC) - if err != nil { - return err - } - - err = imports.append("managedGenerateKeyEC", v1_5_managedGenerateKeyEC, C.v1_5_managedGenerateKeyEC) - if err != nil { - return err - } - - err = imports.append("createEC", v1_5_createEC, C.v1_5_createEC) - if err != nil { - return err - } - - err = imports.append("managedCreateEC", v1_5_managedCreateEC, C.v1_5_managedCreateEC) - if err != nil { - return err - } - - err = imports.append("getCurveLengthEC", v1_5_getCurveLengthEC, C.v1_5_getCurveLengthEC) - if err != nil { - return err - } - - err = imports.append("getPrivKeyByteLengthEC", v1_5_getPrivKeyByteLengthEC, C.v1_5_getPrivKeyByteLengthEC) - if err != nil { - return err - } - - err = imports.append("ellipticCurveGetValues", v1_5_ellipticCurveGetValues, C.v1_5_ellipticCurveGetValues) - if err != nil { - return err - } - - err = imports.append("managedVerifySecp256r1", v1_5_managedVerifySecp256r1, C.v1_5_managedVerifySecp256r1) - if err != nil { - return err - } - - err = imports.append("managedVerifyBLSSignatureShare", v1_5_managedVerifyBLSSignatureShare, C.v1_5_managedVerifyBLSSignatureShare) - if err != nil { - return err - } - - err = imports.append("managedVerifyBLSAggregatedSignature", v1_5_managedVerifyBLSAggregatedSignature, C.v1_5_managedVerifyBLSAggregatedSignature) - if err != nil { - return err - } - - return nil -} - -//export v1_5_getGasLeft -func v1_5_getGasLeft(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetGasLeft() -} - -//export v1_5_getSCAddress -func v1_5_getSCAddress(context unsafe.Pointer, resultOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetSCAddress(executor.MemPtr(resultOffset)) -} - -//export v1_5_getOwnerAddress -func v1_5_getOwnerAddress(context unsafe.Pointer, resultOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetOwnerAddress(executor.MemPtr(resultOffset)) -} - -//export v1_5_getShardOfAddress -func v1_5_getShardOfAddress(context unsafe.Pointer, addressOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetShardOfAddress(executor.MemPtr(addressOffset)) -} - -//export v1_5_isSmartContract -func v1_5_isSmartContract(context unsafe.Pointer, addressOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.IsSmartContract(executor.MemPtr(addressOffset)) -} - -//export v1_5_signalError -func v1_5_signalError(context unsafe.Pointer, messageOffset int32, messageLength int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.SignalError(executor.MemPtr(messageOffset), messageLength) -} - -//export v1_5_getExternalBalance -func v1_5_getExternalBalance(context unsafe.Pointer, addressOffset int32, resultOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetExternalBalance(executor.MemPtr(addressOffset), executor.MemPtr(resultOffset)) -} - -//export v1_5_getBlockHash -func v1_5_getBlockHash(context unsafe.Pointer, nonce int64, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetBlockHash(nonce, executor.MemPtr(resultOffset)) -} - -//export v1_5_getESDTBalance -func v1_5_getESDTBalance(context unsafe.Pointer, addressOffset int32, tokenIDOffset int32, tokenIDLen int32, nonce int64, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTBalance(executor.MemPtr(addressOffset), executor.MemPtr(tokenIDOffset), tokenIDLen, nonce, executor.MemPtr(resultOffset)) -} - -//export v1_5_getESDTNFTNameLength -func v1_5_getESDTNFTNameLength(context unsafe.Pointer, addressOffset int32, tokenIDOffset int32, tokenIDLen int32, nonce int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTNFTNameLength(executor.MemPtr(addressOffset), executor.MemPtr(tokenIDOffset), tokenIDLen, nonce) -} - -//export v1_5_getESDTNFTAttributeLength -func v1_5_getESDTNFTAttributeLength(context unsafe.Pointer, addressOffset int32, tokenIDOffset int32, tokenIDLen int32, nonce int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTNFTAttributeLength(executor.MemPtr(addressOffset), executor.MemPtr(tokenIDOffset), tokenIDLen, nonce) -} - -//export v1_5_getESDTNFTURILength -func v1_5_getESDTNFTURILength(context unsafe.Pointer, addressOffset int32, tokenIDOffset int32, tokenIDLen int32, nonce int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTNFTURILength(executor.MemPtr(addressOffset), executor.MemPtr(tokenIDOffset), tokenIDLen, nonce) -} - -//export v1_5_getESDTTokenData -func v1_5_getESDTTokenData(context unsafe.Pointer, addressOffset int32, tokenIDOffset int32, tokenIDLen int32, nonce int64, valueHandle int32, propertiesOffset int32, hashOffset int32, nameOffset int32, attributesOffset int32, creatorOffset int32, royaltiesHandle int32, urisOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTTokenData(executor.MemPtr(addressOffset), executor.MemPtr(tokenIDOffset), tokenIDLen, nonce, valueHandle, executor.MemPtr(propertiesOffset), executor.MemPtr(hashOffset), executor.MemPtr(nameOffset), executor.MemPtr(attributesOffset), executor.MemPtr(creatorOffset), royaltiesHandle, executor.MemPtr(urisOffset)) -} - -//export v1_5_getESDTLocalRoles -func v1_5_getESDTLocalRoles(context unsafe.Pointer, tokenIdHandle int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTLocalRoles(tokenIdHandle) -} - -//export v1_5_validateTokenIdentifier -func v1_5_validateTokenIdentifier(context unsafe.Pointer, tokenIdHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ValidateTokenIdentifier(tokenIdHandle) -} - -//export v1_5_transferValue -func v1_5_transferValue(context unsafe.Pointer, destOffset int32, valueOffset int32, dataOffset int32, length int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.TransferValue(executor.MemPtr(destOffset), executor.MemPtr(valueOffset), executor.MemPtr(dataOffset), length) -} - -//export v1_5_transferValueExecute -func v1_5_transferValueExecute(context unsafe.Pointer, destOffset int32, valueOffset int32, gasLimit int64, functionOffset int32, functionLength int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.TransferValueExecute(executor.MemPtr(destOffset), executor.MemPtr(valueOffset), gasLimit, executor.MemPtr(functionOffset), functionLength, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_transferESDTExecute -func v1_5_transferESDTExecute(context unsafe.Pointer, destOffset int32, tokenIDOffset int32, tokenIDLen int32, valueOffset int32, gasLimit int64, functionOffset int32, functionLength int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.TransferESDTExecute(executor.MemPtr(destOffset), executor.MemPtr(tokenIDOffset), tokenIDLen, executor.MemPtr(valueOffset), gasLimit, executor.MemPtr(functionOffset), functionLength, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_transferESDTNFTExecute -func v1_5_transferESDTNFTExecute(context unsafe.Pointer, destOffset int32, tokenIDOffset int32, tokenIDLen int32, valueOffset int32, nonce int64, gasLimit int64, functionOffset int32, functionLength int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.TransferESDTNFTExecute(executor.MemPtr(destOffset), executor.MemPtr(tokenIDOffset), tokenIDLen, executor.MemPtr(valueOffset), nonce, gasLimit, executor.MemPtr(functionOffset), functionLength, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_multiTransferESDTNFTExecute -func v1_5_multiTransferESDTNFTExecute(context unsafe.Pointer, destOffset int32, numTokenTransfers int32, tokenTransfersArgsLengthOffset int32, tokenTransferDataOffset int32, gasLimit int64, functionOffset int32, functionLength int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MultiTransferESDTNFTExecute(executor.MemPtr(destOffset), numTokenTransfers, executor.MemPtr(tokenTransfersArgsLengthOffset), executor.MemPtr(tokenTransferDataOffset), gasLimit, executor.MemPtr(functionOffset), functionLength, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_createAsyncCall -func v1_5_createAsyncCall(context unsafe.Pointer, destOffset int32, valueOffset int32, dataOffset int32, dataLength int32, successOffset int32, successLength int32, errorOffset int32, errorLength int32, gas int64, extraGasForCallback int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.CreateAsyncCall(executor.MemPtr(destOffset), executor.MemPtr(valueOffset), executor.MemPtr(dataOffset), dataLength, executor.MemPtr(successOffset), successLength, executor.MemPtr(errorOffset), errorLength, gas, extraGasForCallback) -} - -//export v1_5_setAsyncContextCallback -func v1_5_setAsyncContextCallback(context unsafe.Pointer, callback int32, callbackLength int32, data int32, dataLength int32, gas int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.SetAsyncContextCallback(executor.MemPtr(callback), callbackLength, executor.MemPtr(data), dataLength, gas) -} - -//export v1_5_upgradeContract -func v1_5_upgradeContract(context unsafe.Pointer, destOffset int32, gasLimit int64, valueOffset int32, codeOffset int32, codeMetadataOffset int32, length int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.UpgradeContract(executor.MemPtr(destOffset), gasLimit, executor.MemPtr(valueOffset), executor.MemPtr(codeOffset), executor.MemPtr(codeMetadataOffset), length, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_upgradeFromSourceContract -func v1_5_upgradeFromSourceContract(context unsafe.Pointer, destOffset int32, gasLimit int64, valueOffset int32, sourceContractAddressOffset int32, codeMetadataOffset int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.UpgradeFromSourceContract(executor.MemPtr(destOffset), gasLimit, executor.MemPtr(valueOffset), executor.MemPtr(sourceContractAddressOffset), executor.MemPtr(codeMetadataOffset), numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_deleteContract -func v1_5_deleteContract(context unsafe.Pointer, destOffset int32, gasLimit int64, numArguments int32, argumentsLengthOffset int32, dataOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.DeleteContract(executor.MemPtr(destOffset), gasLimit, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_asyncCall -func v1_5_asyncCall(context unsafe.Pointer, destOffset int32, valueOffset int32, dataOffset int32, length int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.AsyncCall(executor.MemPtr(destOffset), executor.MemPtr(valueOffset), executor.MemPtr(dataOffset), length) -} - -//export v1_5_getArgumentLength -func v1_5_getArgumentLength(context unsafe.Pointer, id int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetArgumentLength(id) -} - -//export v1_5_getArgument -func v1_5_getArgument(context unsafe.Pointer, id int32, argOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetArgument(id, executor.MemPtr(argOffset)) -} - -//export v1_5_getFunction -func v1_5_getFunction(context unsafe.Pointer, functionOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetFunction(executor.MemPtr(functionOffset)) -} - -//export v1_5_getNumArguments -func v1_5_getNumArguments(context unsafe.Pointer) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetNumArguments() -} - -//export v1_5_storageStore -func v1_5_storageStore(context unsafe.Pointer, keyOffset int32, keyLength int32, dataOffset int32, dataLength int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.StorageStore(executor.MemPtr(keyOffset), keyLength, executor.MemPtr(dataOffset), dataLength) -} - -//export v1_5_storageLoadLength -func v1_5_storageLoadLength(context unsafe.Pointer, keyOffset int32, keyLength int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.StorageLoadLength(executor.MemPtr(keyOffset), keyLength) -} - -//export v1_5_storageLoadFromAddress -func v1_5_storageLoadFromAddress(context unsafe.Pointer, addressOffset int32, keyOffset int32, keyLength int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.StorageLoadFromAddress(executor.MemPtr(addressOffset), executor.MemPtr(keyOffset), keyLength, executor.MemPtr(dataOffset)) -} - -//export v1_5_storageLoad -func v1_5_storageLoad(context unsafe.Pointer, keyOffset int32, keyLength int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.StorageLoad(executor.MemPtr(keyOffset), keyLength, executor.MemPtr(dataOffset)) -} - -//export v1_5_setStorageLock -func v1_5_setStorageLock(context unsafe.Pointer, keyOffset int32, keyLength int32, lockTimestamp int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.SetStorageLock(executor.MemPtr(keyOffset), keyLength, lockTimestamp) -} - -//export v1_5_getStorageLock -func v1_5_getStorageLock(context unsafe.Pointer, keyOffset int32, keyLength int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetStorageLock(executor.MemPtr(keyOffset), keyLength) -} - -//export v1_5_isStorageLocked -func v1_5_isStorageLocked(context unsafe.Pointer, keyOffset int32, keyLength int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.IsStorageLocked(executor.MemPtr(keyOffset), keyLength) -} - -//export v1_5_clearStorageLock -func v1_5_clearStorageLock(context unsafe.Pointer, keyOffset int32, keyLength int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ClearStorageLock(executor.MemPtr(keyOffset), keyLength) -} - -//export v1_5_getCaller -func v1_5_getCaller(context unsafe.Pointer, resultOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetCaller(executor.MemPtr(resultOffset)) -} - -//export v1_5_checkNoPayment -func v1_5_checkNoPayment(context unsafe.Pointer) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.CheckNoPayment() -} - -//export v1_5_getCallValue -func v1_5_getCallValue(context unsafe.Pointer, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetCallValue(executor.MemPtr(resultOffset)) -} - -//export v1_5_getESDTValue -func v1_5_getESDTValue(context unsafe.Pointer, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTValue(executor.MemPtr(resultOffset)) -} - -//export v1_5_getESDTValueByIndex -func v1_5_getESDTValueByIndex(context unsafe.Pointer, resultOffset int32, index int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTValueByIndex(executor.MemPtr(resultOffset), index) -} - -//export v1_5_getESDTTokenName -func v1_5_getESDTTokenName(context unsafe.Pointer, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTTokenName(executor.MemPtr(resultOffset)) -} - -//export v1_5_getESDTTokenNameByIndex -func v1_5_getESDTTokenNameByIndex(context unsafe.Pointer, resultOffset int32, index int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTTokenNameByIndex(executor.MemPtr(resultOffset), index) -} - -//export v1_5_getESDTTokenNonce -func v1_5_getESDTTokenNonce(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTTokenNonce() -} - -//export v1_5_getESDTTokenNonceByIndex -func v1_5_getESDTTokenNonceByIndex(context unsafe.Pointer, index int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTTokenNonceByIndex(index) -} - -//export v1_5_getCurrentESDTNFTNonce -func v1_5_getCurrentESDTNFTNonce(context unsafe.Pointer, addressOffset int32, tokenIDOffset int32, tokenIDLen int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetCurrentESDTNFTNonce(executor.MemPtr(addressOffset), executor.MemPtr(tokenIDOffset), tokenIDLen) -} - -//export v1_5_getESDTTokenType -func v1_5_getESDTTokenType(context unsafe.Pointer) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTTokenType() -} - -//export v1_5_getESDTTokenTypeByIndex -func v1_5_getESDTTokenTypeByIndex(context unsafe.Pointer, index int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetESDTTokenTypeByIndex(index) -} - -//export v1_5_getNumESDTTransfers -func v1_5_getNumESDTTransfers(context unsafe.Pointer) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetNumESDTTransfers() -} - -//export v1_5_getCallValueTokenName -func v1_5_getCallValueTokenName(context unsafe.Pointer, callValueOffset int32, tokenNameOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetCallValueTokenName(executor.MemPtr(callValueOffset), executor.MemPtr(tokenNameOffset)) -} - -//export v1_5_getCallValueTokenNameByIndex -func v1_5_getCallValueTokenNameByIndex(context unsafe.Pointer, callValueOffset int32, tokenNameOffset int32, index int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetCallValueTokenNameByIndex(executor.MemPtr(callValueOffset), executor.MemPtr(tokenNameOffset), index) -} - -//export v1_5_isReservedFunctionName -func v1_5_isReservedFunctionName(context unsafe.Pointer, nameHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.IsReservedFunctionName(nameHandle) -} - -//export v1_5_writeLog -func v1_5_writeLog(context unsafe.Pointer, dataPointer int32, dataLength int32, topicPtr int32, numTopics int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.WriteLog(executor.MemPtr(dataPointer), dataLength, executor.MemPtr(topicPtr), numTopics) -} - -//export v1_5_writeEventLog -func v1_5_writeEventLog(context unsafe.Pointer, numTopics int32, topicLengthsOffset int32, topicOffset int32, dataOffset int32, dataLength int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.WriteEventLog(numTopics, executor.MemPtr(topicLengthsOffset), executor.MemPtr(topicOffset), executor.MemPtr(dataOffset), dataLength) -} - -//export v1_5_getBlockTimestamp -func v1_5_getBlockTimestamp(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetBlockTimestamp() -} - -//export v1_5_getBlockNonce -func v1_5_getBlockNonce(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetBlockNonce() -} - -//export v1_5_getBlockRound -func v1_5_getBlockRound(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetBlockRound() -} - -//export v1_5_getBlockEpoch -func v1_5_getBlockEpoch(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetBlockEpoch() -} - -//export v1_5_getBlockRandomSeed -func v1_5_getBlockRandomSeed(context unsafe.Pointer, pointer int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetBlockRandomSeed(executor.MemPtr(pointer)) -} - -//export v1_5_getStateRootHash -func v1_5_getStateRootHash(context unsafe.Pointer, pointer int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetStateRootHash(executor.MemPtr(pointer)) -} - -//export v1_5_getPrevBlockTimestamp -func v1_5_getPrevBlockTimestamp(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetPrevBlockTimestamp() -} - -//export v1_5_getPrevBlockNonce -func v1_5_getPrevBlockNonce(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetPrevBlockNonce() -} - -//export v1_5_getPrevBlockRound -func v1_5_getPrevBlockRound(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetPrevBlockRound() -} - -//export v1_5_getPrevBlockEpoch -func v1_5_getPrevBlockEpoch(context unsafe.Pointer) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetPrevBlockEpoch() -} - -//export v1_5_getPrevBlockRandomSeed -func v1_5_getPrevBlockRandomSeed(context unsafe.Pointer, pointer int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetPrevBlockRandomSeed(executor.MemPtr(pointer)) -} - -//export v1_5_finish -func v1_5_finish(context unsafe.Pointer, pointer int32, length int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.Finish(executor.MemPtr(pointer), length) -} - -//export v1_5_executeOnSameContext -func v1_5_executeOnSameContext(context unsafe.Pointer, gasLimit int64, addressOffset int32, valueOffset int32, functionOffset int32, functionLength int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ExecuteOnSameContext(gasLimit, executor.MemPtr(addressOffset), executor.MemPtr(valueOffset), executor.MemPtr(functionOffset), functionLength, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_executeOnDestContext -func v1_5_executeOnDestContext(context unsafe.Pointer, gasLimit int64, addressOffset int32, valueOffset int32, functionOffset int32, functionLength int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ExecuteOnDestContext(gasLimit, executor.MemPtr(addressOffset), executor.MemPtr(valueOffset), executor.MemPtr(functionOffset), functionLength, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_executeReadOnly -func v1_5_executeReadOnly(context unsafe.Pointer, gasLimit int64, addressOffset int32, functionOffset int32, functionLength int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ExecuteReadOnly(gasLimit, executor.MemPtr(addressOffset), executor.MemPtr(functionOffset), functionLength, numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_createContract -func v1_5_createContract(context unsafe.Pointer, gasLimit int64, valueOffset int32, codeOffset int32, codeMetadataOffset int32, length int32, resultOffset int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.CreateContract(gasLimit, executor.MemPtr(valueOffset), executor.MemPtr(codeOffset), executor.MemPtr(codeMetadataOffset), length, executor.MemPtr(resultOffset), numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_deployFromSourceContract -func v1_5_deployFromSourceContract(context unsafe.Pointer, gasLimit int64, valueOffset int32, sourceContractAddressOffset int32, codeMetadataOffset int32, resultAddressOffset int32, numArguments int32, argumentsLengthOffset int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.DeployFromSourceContract(gasLimit, executor.MemPtr(valueOffset), executor.MemPtr(sourceContractAddressOffset), executor.MemPtr(codeMetadataOffset), executor.MemPtr(resultAddressOffset), numArguments, executor.MemPtr(argumentsLengthOffset), executor.MemPtr(dataOffset)) -} - -//export v1_5_getNumReturnData -func v1_5_getNumReturnData(context unsafe.Pointer) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetNumReturnData() -} - -//export v1_5_getReturnDataSize -func v1_5_getReturnDataSize(context unsafe.Pointer, resultID int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetReturnDataSize(resultID) -} - -//export v1_5_getReturnData -func v1_5_getReturnData(context unsafe.Pointer, resultID int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetReturnData(resultID, executor.MemPtr(dataOffset)) -} - -//export v1_5_cleanReturnData -func v1_5_cleanReturnData(context unsafe.Pointer) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.CleanReturnData() -} - -//export v1_5_deleteFromReturnData -func v1_5_deleteFromReturnData(context unsafe.Pointer, resultID int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.DeleteFromReturnData(resultID) -} - -//export v1_5_getOriginalTxHash -func v1_5_getOriginalTxHash(context unsafe.Pointer, dataOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetOriginalTxHash(executor.MemPtr(dataOffset)) -} - -//export v1_5_getCurrentTxHash -func v1_5_getCurrentTxHash(context unsafe.Pointer, dataOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetCurrentTxHash(executor.MemPtr(dataOffset)) -} - -//export v1_5_getPrevTxHash -func v1_5_getPrevTxHash(context unsafe.Pointer, dataOffset int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.GetPrevTxHash(executor.MemPtr(dataOffset)) -} - -//export v1_5_managedSCAddress -func v1_5_managedSCAddress(context unsafe.Pointer, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedSCAddress(destinationHandle) -} - -//export v1_5_managedOwnerAddress -func v1_5_managedOwnerAddress(context unsafe.Pointer, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedOwnerAddress(destinationHandle) -} - -//export v1_5_managedCaller -func v1_5_managedCaller(context unsafe.Pointer, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedCaller(destinationHandle) -} - -//export v1_5_managedGetOriginalCallerAddr -func v1_5_managedGetOriginalCallerAddr(context unsafe.Pointer, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetOriginalCallerAddr(destinationHandle) -} - -//export v1_5_managedGetRelayerAddr -func v1_5_managedGetRelayerAddr(context unsafe.Pointer, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetRelayerAddr(destinationHandle) -} - -//export v1_5_managedSignalError -func v1_5_managedSignalError(context unsafe.Pointer, errHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedSignalError(errHandle) -} - -//export v1_5_managedWriteLog -func v1_5_managedWriteLog(context unsafe.Pointer, topicsHandle int32, dataHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedWriteLog(topicsHandle, dataHandle) -} - -//export v1_5_managedGetOriginalTxHash -func v1_5_managedGetOriginalTxHash(context unsafe.Pointer, resultHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetOriginalTxHash(resultHandle) -} - -//export v1_5_managedGetStateRootHash -func v1_5_managedGetStateRootHash(context unsafe.Pointer, resultHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetStateRootHash(resultHandle) -} - -//export v1_5_managedGetBlockRandomSeed -func v1_5_managedGetBlockRandomSeed(context unsafe.Pointer, resultHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetBlockRandomSeed(resultHandle) -} - -//export v1_5_managedGetPrevBlockRandomSeed -func v1_5_managedGetPrevBlockRandomSeed(context unsafe.Pointer, resultHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetPrevBlockRandomSeed(resultHandle) -} - -//export v1_5_managedGetReturnData -func v1_5_managedGetReturnData(context unsafe.Pointer, resultID int32, resultHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetReturnData(resultID, resultHandle) -} - -//export v1_5_managedGetMultiESDTCallValue -func v1_5_managedGetMultiESDTCallValue(context unsafe.Pointer, multiCallValueHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetMultiESDTCallValue(multiCallValueHandle) -} - -//export v1_5_managedGetBackTransfers -func v1_5_managedGetBackTransfers(context unsafe.Pointer, esdtTransfersValueHandle int32, egldValueHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetBackTransfers(esdtTransfersValueHandle, egldValueHandle) -} - -//export v1_5_managedGetESDTBalance -func v1_5_managedGetESDTBalance(context unsafe.Pointer, addressHandle int32, tokenIDHandle int32, nonce int64, valueHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetESDTBalance(addressHandle, tokenIDHandle, nonce, valueHandle) -} - -//export v1_5_managedGetESDTTokenData -func v1_5_managedGetESDTTokenData(context unsafe.Pointer, addressHandle int32, tokenIDHandle int32, nonce int64, valueHandle int32, propertiesHandle int32, hashHandle int32, nameHandle int32, attributesHandle int32, creatorHandle int32, royaltiesHandle int32, urisHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetESDTTokenData(addressHandle, tokenIDHandle, nonce, valueHandle, propertiesHandle, hashHandle, nameHandle, attributesHandle, creatorHandle, royaltiesHandle, urisHandle) -} - -//export v1_5_managedAsyncCall -func v1_5_managedAsyncCall(context unsafe.Pointer, destHandle int32, valueHandle int32, functionHandle int32, argumentsHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedAsyncCall(destHandle, valueHandle, functionHandle, argumentsHandle) -} - -//export v1_5_managedCreateAsyncCall -func v1_5_managedCreateAsyncCall(context unsafe.Pointer, destHandle int32, valueHandle int32, functionHandle int32, argumentsHandle int32, successOffset int32, successLength int32, errorOffset int32, errorLength int32, gas int64, extraGasForCallback int64, callbackClosureHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedCreateAsyncCall(destHandle, valueHandle, functionHandle, argumentsHandle, executor.MemPtr(successOffset), successLength, executor.MemPtr(errorOffset), errorLength, gas, extraGasForCallback, callbackClosureHandle) -} - -//export v1_5_managedGetCallbackClosure -func v1_5_managedGetCallbackClosure(context unsafe.Pointer, callbackClosureHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetCallbackClosure(callbackClosureHandle) -} - -//export v1_5_managedUpgradeFromSourceContract -func v1_5_managedUpgradeFromSourceContract(context unsafe.Pointer, destHandle int32, gas int64, valueHandle int32, addressHandle int32, codeMetadataHandle int32, argumentsHandle int32, resultHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedUpgradeFromSourceContract(destHandle, gas, valueHandle, addressHandle, codeMetadataHandle, argumentsHandle, resultHandle) -} - -//export v1_5_managedUpgradeContract -func v1_5_managedUpgradeContract(context unsafe.Pointer, destHandle int32, gas int64, valueHandle int32, codeHandle int32, codeMetadataHandle int32, argumentsHandle int32, resultHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedUpgradeContract(destHandle, gas, valueHandle, codeHandle, codeMetadataHandle, argumentsHandle, resultHandle) -} - -//export v1_5_managedDeleteContract -func v1_5_managedDeleteContract(context unsafe.Pointer, destHandle int32, gasLimit int64, argumentsHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedDeleteContract(destHandle, gasLimit, argumentsHandle) -} - -//export v1_5_managedDeployFromSourceContract -func v1_5_managedDeployFromSourceContract(context unsafe.Pointer, gas int64, valueHandle int32, addressHandle int32, codeMetadataHandle int32, argumentsHandle int32, resultAddressHandle int32, resultHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedDeployFromSourceContract(gas, valueHandle, addressHandle, codeMetadataHandle, argumentsHandle, resultAddressHandle, resultHandle) -} - -//export v1_5_managedCreateContract -func v1_5_managedCreateContract(context unsafe.Pointer, gas int64, valueHandle int32, codeHandle int32, codeMetadataHandle int32, argumentsHandle int32, resultAddressHandle int32, resultHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedCreateContract(gas, valueHandle, codeHandle, codeMetadataHandle, argumentsHandle, resultAddressHandle, resultHandle) -} - -//export v1_5_managedExecuteReadOnly -func v1_5_managedExecuteReadOnly(context unsafe.Pointer, gas int64, addressHandle int32, functionHandle int32, argumentsHandle int32, resultHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedExecuteReadOnly(gas, addressHandle, functionHandle, argumentsHandle, resultHandle) -} - -//export v1_5_managedExecuteOnSameContext -func v1_5_managedExecuteOnSameContext(context unsafe.Pointer, gas int64, addressHandle int32, valueHandle int32, functionHandle int32, argumentsHandle int32, resultHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedExecuteOnSameContext(gas, addressHandle, valueHandle, functionHandle, argumentsHandle, resultHandle) -} - -//export v1_5_managedExecuteOnDestContext -func v1_5_managedExecuteOnDestContext(context unsafe.Pointer, gas int64, addressHandle int32, valueHandle int32, functionHandle int32, argumentsHandle int32, resultHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedExecuteOnDestContext(gas, addressHandle, valueHandle, functionHandle, argumentsHandle, resultHandle) -} - -//export v1_5_managedMultiTransferESDTNFTExecute -func v1_5_managedMultiTransferESDTNFTExecute(context unsafe.Pointer, dstHandle int32, tokenTransfersHandle int32, gasLimit int64, functionHandle int32, argumentsHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMultiTransferESDTNFTExecute(dstHandle, tokenTransfersHandle, gasLimit, functionHandle, argumentsHandle) -} - -//export v1_5_managedMultiTransferESDTNFTExecuteByUser -func v1_5_managedMultiTransferESDTNFTExecuteByUser(context unsafe.Pointer, userHandle int32, dstHandle int32, tokenTransfersHandle int32, gasLimit int64, functionHandle int32, argumentsHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMultiTransferESDTNFTExecuteByUser(userHandle, dstHandle, tokenTransfersHandle, gasLimit, functionHandle, argumentsHandle) -} - -//export v1_5_managedTransferValueExecute -func v1_5_managedTransferValueExecute(context unsafe.Pointer, dstHandle int32, valueHandle int32, gasLimit int64, functionHandle int32, argumentsHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedTransferValueExecute(dstHandle, valueHandle, gasLimit, functionHandle, argumentsHandle) -} - -//export v1_5_managedIsESDTFrozen -func v1_5_managedIsESDTFrozen(context unsafe.Pointer, addressHandle int32, tokenIDHandle int32, nonce int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedIsESDTFrozen(addressHandle, tokenIDHandle, nonce) -} - -//export v1_5_managedIsESDTLimitedTransfer -func v1_5_managedIsESDTLimitedTransfer(context unsafe.Pointer, tokenIDHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedIsESDTLimitedTransfer(tokenIDHandle) -} - -//export v1_5_managedIsESDTPaused -func v1_5_managedIsESDTPaused(context unsafe.Pointer, tokenIDHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedIsESDTPaused(tokenIDHandle) -} - -//export v1_5_managedBufferToHex -func v1_5_managedBufferToHex(context unsafe.Pointer, sourceHandle int32, destHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedBufferToHex(sourceHandle, destHandle) -} - -//export v1_5_managedGetCodeMetadata -func v1_5_managedGetCodeMetadata(context unsafe.Pointer, addressHandle int32, responseHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.ManagedGetCodeMetadata(addressHandle, responseHandle) -} - -//export v1_5_managedIsBuiltinFunction -func v1_5_managedIsBuiltinFunction(context unsafe.Pointer, functionNameHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedIsBuiltinFunction(functionNameHandle) -} - -//export v1_5_bigFloatNewFromParts -func v1_5_bigFloatNewFromParts(context unsafe.Pointer, integralPart int32, fractionalPart int32, exponent int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigFloatNewFromParts(integralPart, fractionalPart, exponent) -} - -//export v1_5_bigFloatNewFromFrac -func v1_5_bigFloatNewFromFrac(context unsafe.Pointer, numerator int64, denominator int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigFloatNewFromFrac(numerator, denominator) -} - -//export v1_5_bigFloatNewFromSci -func v1_5_bigFloatNewFromSci(context unsafe.Pointer, significand int64, exponent int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigFloatNewFromSci(significand, exponent) -} - -//export v1_5_bigFloatAdd -func v1_5_bigFloatAdd(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatAdd(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigFloatSub -func v1_5_bigFloatSub(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatSub(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigFloatMul -func v1_5_bigFloatMul(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatMul(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigFloatDiv -func v1_5_bigFloatDiv(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatDiv(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigFloatNeg -func v1_5_bigFloatNeg(context unsafe.Pointer, destinationHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatNeg(destinationHandle, opHandle) -} - -//export v1_5_bigFloatClone -func v1_5_bigFloatClone(context unsafe.Pointer, destinationHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatClone(destinationHandle, opHandle) -} - -//export v1_5_bigFloatCmp -func v1_5_bigFloatCmp(context unsafe.Pointer, op1Handle int32, op2Handle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigFloatCmp(op1Handle, op2Handle) -} - -//export v1_5_bigFloatAbs -func v1_5_bigFloatAbs(context unsafe.Pointer, destinationHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatAbs(destinationHandle, opHandle) -} - -//export v1_5_bigFloatSign -func v1_5_bigFloatSign(context unsafe.Pointer, opHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigFloatSign(opHandle) -} - -//export v1_5_bigFloatSqrt -func v1_5_bigFloatSqrt(context unsafe.Pointer, destinationHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatSqrt(destinationHandle, opHandle) -} - -//export v1_5_bigFloatPow -func v1_5_bigFloatPow(context unsafe.Pointer, destinationHandle int32, opHandle int32, exponent int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatPow(destinationHandle, opHandle, exponent) -} - -//export v1_5_bigFloatFloor -func v1_5_bigFloatFloor(context unsafe.Pointer, destBigIntHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatFloor(destBigIntHandle, opHandle) -} - -//export v1_5_bigFloatCeil -func v1_5_bigFloatCeil(context unsafe.Pointer, destBigIntHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatCeil(destBigIntHandle, opHandle) -} - -//export v1_5_bigFloatTruncate -func v1_5_bigFloatTruncate(context unsafe.Pointer, destBigIntHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatTruncate(destBigIntHandle, opHandle) -} - -//export v1_5_bigFloatSetInt64 -func v1_5_bigFloatSetInt64(context unsafe.Pointer, destinationHandle int32, value int64) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatSetInt64(destinationHandle, value) -} - -//export v1_5_bigFloatIsInt -func v1_5_bigFloatIsInt(context unsafe.Pointer, opHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigFloatIsInt(opHandle) -} - -//export v1_5_bigFloatSetBigInt -func v1_5_bigFloatSetBigInt(context unsafe.Pointer, destinationHandle int32, bigIntHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatSetBigInt(destinationHandle, bigIntHandle) -} - -//export v1_5_bigFloatGetConstPi -func v1_5_bigFloatGetConstPi(context unsafe.Pointer, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatGetConstPi(destinationHandle) -} - -//export v1_5_bigFloatGetConstE -func v1_5_bigFloatGetConstE(context unsafe.Pointer, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigFloatGetConstE(destinationHandle) -} - -//export v1_5_bigIntGetUnsignedArgument -func v1_5_bigIntGetUnsignedArgument(context unsafe.Pointer, id int32, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntGetUnsignedArgument(id, destinationHandle) -} - -//export v1_5_bigIntGetSignedArgument -func v1_5_bigIntGetSignedArgument(context unsafe.Pointer, id int32, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntGetSignedArgument(id, destinationHandle) -} - -//export v1_5_bigIntStorageStoreUnsigned -func v1_5_bigIntStorageStoreUnsigned(context unsafe.Pointer, keyOffset int32, keyLength int32, sourceHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntStorageStoreUnsigned(executor.MemPtr(keyOffset), keyLength, sourceHandle) -} - -//export v1_5_bigIntStorageLoadUnsigned -func v1_5_bigIntStorageLoadUnsigned(context unsafe.Pointer, keyOffset int32, keyLength int32, destinationHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntStorageLoadUnsigned(executor.MemPtr(keyOffset), keyLength, destinationHandle) -} - -//export v1_5_bigIntGetCallValue -func v1_5_bigIntGetCallValue(context unsafe.Pointer, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntGetCallValue(destinationHandle) -} - -//export v1_5_bigIntGetESDTCallValue -func v1_5_bigIntGetESDTCallValue(context unsafe.Pointer, destination int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntGetESDTCallValue(destination) -} - -//export v1_5_bigIntGetESDTCallValueByIndex -func v1_5_bigIntGetESDTCallValueByIndex(context unsafe.Pointer, destinationHandle int32, index int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntGetESDTCallValueByIndex(destinationHandle, index) -} - -//export v1_5_bigIntGetExternalBalance -func v1_5_bigIntGetExternalBalance(context unsafe.Pointer, addressOffset int32, result int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntGetExternalBalance(executor.MemPtr(addressOffset), result) -} - -//export v1_5_bigIntGetESDTExternalBalance -func v1_5_bigIntGetESDTExternalBalance(context unsafe.Pointer, addressOffset int32, tokenIDOffset int32, tokenIDLen int32, nonce int64, resultHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntGetESDTExternalBalance(executor.MemPtr(addressOffset), executor.MemPtr(tokenIDOffset), tokenIDLen, nonce, resultHandle) -} - -//export v1_5_bigIntNew -func v1_5_bigIntNew(context unsafe.Pointer, smallValue int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntNew(smallValue) -} - -//export v1_5_bigIntUnsignedByteLength -func v1_5_bigIntUnsignedByteLength(context unsafe.Pointer, referenceHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntUnsignedByteLength(referenceHandle) -} - -//export v1_5_bigIntSignedByteLength -func v1_5_bigIntSignedByteLength(context unsafe.Pointer, referenceHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntSignedByteLength(referenceHandle) -} - -//export v1_5_bigIntGetUnsignedBytes -func v1_5_bigIntGetUnsignedBytes(context unsafe.Pointer, referenceHandle int32, byteOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntGetUnsignedBytes(referenceHandle, executor.MemPtr(byteOffset)) -} - -//export v1_5_bigIntGetSignedBytes -func v1_5_bigIntGetSignedBytes(context unsafe.Pointer, referenceHandle int32, byteOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntGetSignedBytes(referenceHandle, executor.MemPtr(byteOffset)) -} - -//export v1_5_bigIntSetUnsignedBytes -func v1_5_bigIntSetUnsignedBytes(context unsafe.Pointer, destinationHandle int32, byteOffset int32, byteLength int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntSetUnsignedBytes(destinationHandle, executor.MemPtr(byteOffset), byteLength) -} - -//export v1_5_bigIntSetSignedBytes -func v1_5_bigIntSetSignedBytes(context unsafe.Pointer, destinationHandle int32, byteOffset int32, byteLength int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntSetSignedBytes(destinationHandle, executor.MemPtr(byteOffset), byteLength) -} - -//export v1_5_bigIntIsInt64 -func v1_5_bigIntIsInt64(context unsafe.Pointer, destinationHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntIsInt64(destinationHandle) -} - -//export v1_5_bigIntGetInt64 -func v1_5_bigIntGetInt64(context unsafe.Pointer, destinationHandle int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntGetInt64(destinationHandle) -} - -//export v1_5_bigIntSetInt64 -func v1_5_bigIntSetInt64(context unsafe.Pointer, destinationHandle int32, value int64) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntSetInt64(destinationHandle, value) -} - -//export v1_5_bigIntAdd -func v1_5_bigIntAdd(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntAdd(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntSub -func v1_5_bigIntSub(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntSub(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntMul -func v1_5_bigIntMul(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntMul(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntTDiv -func v1_5_bigIntTDiv(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntTDiv(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntTMod -func v1_5_bigIntTMod(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntTMod(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntEDiv -func v1_5_bigIntEDiv(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntEDiv(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntEMod -func v1_5_bigIntEMod(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntEMod(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntSqrt -func v1_5_bigIntSqrt(context unsafe.Pointer, destinationHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntSqrt(destinationHandle, opHandle) -} - -//export v1_5_bigIntPow -func v1_5_bigIntPow(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntPow(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntLog2 -func v1_5_bigIntLog2(context unsafe.Pointer, op1Handle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntLog2(op1Handle) -} - -//export v1_5_bigIntAbs -func v1_5_bigIntAbs(context unsafe.Pointer, destinationHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntAbs(destinationHandle, opHandle) -} - -//export v1_5_bigIntNeg -func v1_5_bigIntNeg(context unsafe.Pointer, destinationHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntNeg(destinationHandle, opHandle) -} - -//export v1_5_bigIntSign -func v1_5_bigIntSign(context unsafe.Pointer, opHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntSign(opHandle) -} - -//export v1_5_bigIntCmp -func v1_5_bigIntCmp(context unsafe.Pointer, op1Handle int32, op2Handle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.BigIntCmp(op1Handle, op2Handle) -} - -//export v1_5_bigIntNot -func v1_5_bigIntNot(context unsafe.Pointer, destinationHandle int32, opHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntNot(destinationHandle, opHandle) -} - -//export v1_5_bigIntAnd -func v1_5_bigIntAnd(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntAnd(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntOr -func v1_5_bigIntOr(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntOr(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntXor -func v1_5_bigIntXor(context unsafe.Pointer, destinationHandle int32, op1Handle int32, op2Handle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntXor(destinationHandle, op1Handle, op2Handle) -} - -//export v1_5_bigIntShr -func v1_5_bigIntShr(context unsafe.Pointer, destinationHandle int32, opHandle int32, bits int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntShr(destinationHandle, opHandle, bits) -} - -//export v1_5_bigIntShl -func v1_5_bigIntShl(context unsafe.Pointer, destinationHandle int32, opHandle int32, bits int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntShl(destinationHandle, opHandle, bits) -} - -//export v1_5_bigIntFinishUnsigned -func v1_5_bigIntFinishUnsigned(context unsafe.Pointer, referenceHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntFinishUnsigned(referenceHandle) -} - -//export v1_5_bigIntFinishSigned -func v1_5_bigIntFinishSigned(context unsafe.Pointer, referenceHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntFinishSigned(referenceHandle) -} - -//export v1_5_bigIntToString -func v1_5_bigIntToString(context unsafe.Pointer, bigIntHandle int32, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.BigIntToString(bigIntHandle, destinationHandle) -} - -//export v1_5_mBufferNew -func v1_5_mBufferNew(context unsafe.Pointer) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferNew() -} - -//export v1_5_mBufferNewFromBytes -func v1_5_mBufferNewFromBytes(context unsafe.Pointer, dataOffset int32, dataLength int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferNewFromBytes(executor.MemPtr(dataOffset), dataLength) -} - -//export v1_5_mBufferGetLength -func v1_5_mBufferGetLength(context unsafe.Pointer, mBufferHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferGetLength(mBufferHandle) -} - -//export v1_5_mBufferGetBytes -func v1_5_mBufferGetBytes(context unsafe.Pointer, mBufferHandle int32, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferGetBytes(mBufferHandle, executor.MemPtr(resultOffset)) -} - -//export v1_5_mBufferGetByteSlice -func v1_5_mBufferGetByteSlice(context unsafe.Pointer, sourceHandle int32, startingPosition int32, sliceLength int32, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferGetByteSlice(sourceHandle, startingPosition, sliceLength, executor.MemPtr(resultOffset)) -} - -//export v1_5_mBufferCopyByteSlice -func v1_5_mBufferCopyByteSlice(context unsafe.Pointer, sourceHandle int32, startingPosition int32, sliceLength int32, destinationHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferCopyByteSlice(sourceHandle, startingPosition, sliceLength, destinationHandle) -} - -//export v1_5_mBufferEq -func v1_5_mBufferEq(context unsafe.Pointer, mBufferHandle1 int32, mBufferHandle2 int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferEq(mBufferHandle1, mBufferHandle2) -} - -//export v1_5_mBufferSetBytes -func v1_5_mBufferSetBytes(context unsafe.Pointer, mBufferHandle int32, dataOffset int32, dataLength int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferSetBytes(mBufferHandle, executor.MemPtr(dataOffset), dataLength) -} - -//export v1_5_mBufferSetByteSlice -func v1_5_mBufferSetByteSlice(context unsafe.Pointer, mBufferHandle int32, startingPosition int32, dataLength int32, dataOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferSetByteSlice(mBufferHandle, startingPosition, dataLength, executor.MemPtr(dataOffset)) -} - -//export v1_5_mBufferAppend -func v1_5_mBufferAppend(context unsafe.Pointer, accumulatorHandle int32, dataHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferAppend(accumulatorHandle, dataHandle) -} - -//export v1_5_mBufferAppendBytes -func v1_5_mBufferAppendBytes(context unsafe.Pointer, accumulatorHandle int32, dataOffset int32, dataLength int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferAppendBytes(accumulatorHandle, executor.MemPtr(dataOffset), dataLength) -} - -//export v1_5_mBufferToBigIntUnsigned -func v1_5_mBufferToBigIntUnsigned(context unsafe.Pointer, mBufferHandle int32, bigIntHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferToBigIntUnsigned(mBufferHandle, bigIntHandle) -} - -//export v1_5_mBufferToBigIntSigned -func v1_5_mBufferToBigIntSigned(context unsafe.Pointer, mBufferHandle int32, bigIntHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferToBigIntSigned(mBufferHandle, bigIntHandle) -} - -//export v1_5_mBufferFromBigIntUnsigned -func v1_5_mBufferFromBigIntUnsigned(context unsafe.Pointer, mBufferHandle int32, bigIntHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferFromBigIntUnsigned(mBufferHandle, bigIntHandle) -} - -//export v1_5_mBufferFromBigIntSigned -func v1_5_mBufferFromBigIntSigned(context unsafe.Pointer, mBufferHandle int32, bigIntHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferFromBigIntSigned(mBufferHandle, bigIntHandle) -} - -//export v1_5_mBufferToBigFloat -func v1_5_mBufferToBigFloat(context unsafe.Pointer, mBufferHandle int32, bigFloatHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferToBigFloat(mBufferHandle, bigFloatHandle) -} - -//export v1_5_mBufferFromBigFloat -func v1_5_mBufferFromBigFloat(context unsafe.Pointer, mBufferHandle int32, bigFloatHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferFromBigFloat(mBufferHandle, bigFloatHandle) -} - -//export v1_5_mBufferStorageStore -func v1_5_mBufferStorageStore(context unsafe.Pointer, keyHandle int32, sourceHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferStorageStore(keyHandle, sourceHandle) -} - -//export v1_5_mBufferStorageLoad -func v1_5_mBufferStorageLoad(context unsafe.Pointer, keyHandle int32, destinationHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferStorageLoad(keyHandle, destinationHandle) -} - -//export v1_5_mBufferStorageLoadFromAddress -func v1_5_mBufferStorageLoadFromAddress(context unsafe.Pointer, addressHandle int32, keyHandle int32, destinationHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.MBufferStorageLoadFromAddress(addressHandle, keyHandle, destinationHandle) -} - -//export v1_5_mBufferGetArgument -func v1_5_mBufferGetArgument(context unsafe.Pointer, id int32, destinationHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferGetArgument(id, destinationHandle) -} - -//export v1_5_mBufferFinish -func v1_5_mBufferFinish(context unsafe.Pointer, sourceHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferFinish(sourceHandle) -} - -//export v1_5_mBufferSetRandom -func v1_5_mBufferSetRandom(context unsafe.Pointer, destinationHandle int32, length int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MBufferSetRandom(destinationHandle, length) -} - -//export v1_5_managedMapNew -func v1_5_managedMapNew(context unsafe.Pointer) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMapNew() -} - -//export v1_5_managedMapPut -func v1_5_managedMapPut(context unsafe.Pointer, mMapHandle int32, keyHandle int32, valueHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMapPut(mMapHandle, keyHandle, valueHandle) -} - -//export v1_5_managedMapGet -func v1_5_managedMapGet(context unsafe.Pointer, mMapHandle int32, keyHandle int32, outValueHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMapGet(mMapHandle, keyHandle, outValueHandle) -} - -//export v1_5_managedMapRemove -func v1_5_managedMapRemove(context unsafe.Pointer, mMapHandle int32, keyHandle int32, outValueHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMapRemove(mMapHandle, keyHandle, outValueHandle) -} - -//export v1_5_managedMapContains -func v1_5_managedMapContains(context unsafe.Pointer, mMapHandle int32, keyHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMapContains(mMapHandle, keyHandle) -} - -//export v1_5_smallIntGetUnsignedArgument -func v1_5_smallIntGetUnsignedArgument(context unsafe.Pointer, id int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.SmallIntGetUnsignedArgument(id) -} - -//export v1_5_smallIntGetSignedArgument -func v1_5_smallIntGetSignedArgument(context unsafe.Pointer, id int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.SmallIntGetSignedArgument(id) -} - -//export v1_5_smallIntFinishUnsigned -func v1_5_smallIntFinishUnsigned(context unsafe.Pointer, value int64) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.SmallIntFinishUnsigned(value) -} - -//export v1_5_smallIntFinishSigned -func v1_5_smallIntFinishSigned(context unsafe.Pointer, value int64) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.SmallIntFinishSigned(value) -} - -//export v1_5_smallIntStorageStoreUnsigned -func v1_5_smallIntStorageStoreUnsigned(context unsafe.Pointer, keyOffset int32, keyLength int32, value int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.SmallIntStorageStoreUnsigned(executor.MemPtr(keyOffset), keyLength, value) -} - -//export v1_5_smallIntStorageStoreSigned -func v1_5_smallIntStorageStoreSigned(context unsafe.Pointer, keyOffset int32, keyLength int32, value int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.SmallIntStorageStoreSigned(executor.MemPtr(keyOffset), keyLength, value) -} - -//export v1_5_smallIntStorageLoadUnsigned -func v1_5_smallIntStorageLoadUnsigned(context unsafe.Pointer, keyOffset int32, keyLength int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.SmallIntStorageLoadUnsigned(executor.MemPtr(keyOffset), keyLength) -} - -//export v1_5_smallIntStorageLoadSigned -func v1_5_smallIntStorageLoadSigned(context unsafe.Pointer, keyOffset int32, keyLength int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.SmallIntStorageLoadSigned(executor.MemPtr(keyOffset), keyLength) -} - -//export v1_5_int64getArgument -func v1_5_int64getArgument(context unsafe.Pointer, id int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.Int64getArgument(id) -} - -//export v1_5_int64finish -func v1_5_int64finish(context unsafe.Pointer, value int64) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.Int64finish(value) -} - -//export v1_5_int64storageStore -func v1_5_int64storageStore(context unsafe.Pointer, keyOffset int32, keyLength int32, value int64) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.Int64storageStore(executor.MemPtr(keyOffset), keyLength, value) -} - -//export v1_5_int64storageLoad -func v1_5_int64storageLoad(context unsafe.Pointer, keyOffset int32, keyLength int32) int64 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.Int64storageLoad(executor.MemPtr(keyOffset), keyLength) -} - -//export v1_5_sha256 -func v1_5_sha256(context unsafe.Pointer, dataOffset int32, length int32, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.Sha256(executor.MemPtr(dataOffset), length, executor.MemPtr(resultOffset)) -} - -//export v1_5_managedSha256 -func v1_5_managedSha256(context unsafe.Pointer, inputHandle int32, outputHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedSha256(inputHandle, outputHandle) -} - -//export v1_5_keccak256 -func v1_5_keccak256(context unsafe.Pointer, dataOffset int32, length int32, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.Keccak256(executor.MemPtr(dataOffset), length, executor.MemPtr(resultOffset)) -} - -//export v1_5_managedKeccak256 -func v1_5_managedKeccak256(context unsafe.Pointer, inputHandle int32, outputHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedKeccak256(inputHandle, outputHandle) -} - -//export v1_5_ripemd160 -func v1_5_ripemd160(context unsafe.Pointer, dataOffset int32, length int32, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.Ripemd160(executor.MemPtr(dataOffset), length, executor.MemPtr(resultOffset)) -} - -//export v1_5_managedRipemd160 -func v1_5_managedRipemd160(context unsafe.Pointer, inputHandle int32, outputHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedRipemd160(inputHandle, outputHandle) -} - -//export v1_5_verifyBLS -func v1_5_verifyBLS(context unsafe.Pointer, keyOffset int32, messageOffset int32, messageLength int32, sigOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.VerifyBLS(executor.MemPtr(keyOffset), executor.MemPtr(messageOffset), messageLength, executor.MemPtr(sigOffset)) -} - -//export v1_5_managedVerifyBLS -func v1_5_managedVerifyBLS(context unsafe.Pointer, keyHandle int32, messageHandle int32, sigHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedVerifyBLS(keyHandle, messageHandle, sigHandle) -} - -//export v1_5_verifyEd25519 -func v1_5_verifyEd25519(context unsafe.Pointer, keyOffset int32, messageOffset int32, messageLength int32, sigOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.VerifyEd25519(executor.MemPtr(keyOffset), executor.MemPtr(messageOffset), messageLength, executor.MemPtr(sigOffset)) -} - -//export v1_5_managedVerifyEd25519 -func v1_5_managedVerifyEd25519(context unsafe.Pointer, keyHandle int32, messageHandle int32, sigHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedVerifyEd25519(keyHandle, messageHandle, sigHandle) -} - -//export v1_5_verifyCustomSecp256k1 -func v1_5_verifyCustomSecp256k1(context unsafe.Pointer, keyOffset int32, keyLength int32, messageOffset int32, messageLength int32, sigOffset int32, hashType int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.VerifyCustomSecp256k1(executor.MemPtr(keyOffset), keyLength, executor.MemPtr(messageOffset), messageLength, executor.MemPtr(sigOffset), hashType) -} - -//export v1_5_managedVerifyCustomSecp256k1 -func v1_5_managedVerifyCustomSecp256k1(context unsafe.Pointer, keyHandle int32, messageHandle int32, sigHandle int32, hashType int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedVerifyCustomSecp256k1(keyHandle, messageHandle, sigHandle, hashType) -} - -//export v1_5_verifySecp256k1 -func v1_5_verifySecp256k1(context unsafe.Pointer, keyOffset int32, keyLength int32, messageOffset int32, messageLength int32, sigOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.VerifySecp256k1(executor.MemPtr(keyOffset), keyLength, executor.MemPtr(messageOffset), messageLength, executor.MemPtr(sigOffset)) -} - -//export v1_5_managedVerifySecp256k1 -func v1_5_managedVerifySecp256k1(context unsafe.Pointer, keyHandle int32, messageHandle int32, sigHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedVerifySecp256k1(keyHandle, messageHandle, sigHandle) -} - -//export v1_5_encodeSecp256k1DerSignature -func v1_5_encodeSecp256k1DerSignature(context unsafe.Pointer, rOffset int32, rLength int32, sOffset int32, sLength int32, sigOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.EncodeSecp256k1DerSignature(executor.MemPtr(rOffset), rLength, executor.MemPtr(sOffset), sLength, executor.MemPtr(sigOffset)) -} - -//export v1_5_managedEncodeSecp256k1DerSignature -func v1_5_managedEncodeSecp256k1DerSignature(context unsafe.Pointer, rHandle int32, sHandle int32, sigHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedEncodeSecp256k1DerSignature(rHandle, sHandle, sigHandle) -} - -//export v1_5_addEC -func v1_5_addEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, fstPointXHandle int32, fstPointYHandle int32, sndPointXHandle int32, sndPointYHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.AddEC(xResultHandle, yResultHandle, ecHandle, fstPointXHandle, fstPointYHandle, sndPointXHandle, sndPointYHandle) -} - -//export v1_5_doubleEC -func v1_5_doubleEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, pointXHandle int32, pointYHandle int32) { - vmHooks := getVMHooksFromContextRawPtr(context) - vmHooks.DoubleEC(xResultHandle, yResultHandle, ecHandle, pointXHandle, pointYHandle) -} - -//export v1_5_isOnCurveEC -func v1_5_isOnCurveEC(context unsafe.Pointer, ecHandle int32, pointXHandle int32, pointYHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.IsOnCurveEC(ecHandle, pointXHandle, pointYHandle) -} - -//export v1_5_scalarBaseMultEC -func v1_5_scalarBaseMultEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, dataOffset int32, length int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ScalarBaseMultEC(xResultHandle, yResultHandle, ecHandle, executor.MemPtr(dataOffset), length) -} - -//export v1_5_managedScalarBaseMultEC -func v1_5_managedScalarBaseMultEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, dataHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedScalarBaseMultEC(xResultHandle, yResultHandle, ecHandle, dataHandle) -} - -//export v1_5_scalarMultEC -func v1_5_scalarMultEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, pointXHandle int32, pointYHandle int32, dataOffset int32, length int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ScalarMultEC(xResultHandle, yResultHandle, ecHandle, pointXHandle, pointYHandle, executor.MemPtr(dataOffset), length) -} - -//export v1_5_managedScalarMultEC -func v1_5_managedScalarMultEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, pointXHandle int32, pointYHandle int32, dataHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedScalarMultEC(xResultHandle, yResultHandle, ecHandle, pointXHandle, pointYHandle, dataHandle) -} - -//export v1_5_marshalEC -func v1_5_marshalEC(context unsafe.Pointer, xPairHandle int32, yPairHandle int32, ecHandle int32, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MarshalEC(xPairHandle, yPairHandle, ecHandle, executor.MemPtr(resultOffset)) -} - -//export v1_5_managedMarshalEC -func v1_5_managedMarshalEC(context unsafe.Pointer, xPairHandle int32, yPairHandle int32, ecHandle int32, resultHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMarshalEC(xPairHandle, yPairHandle, ecHandle, resultHandle) -} - -//export v1_5_marshalCompressedEC -func v1_5_marshalCompressedEC(context unsafe.Pointer, xPairHandle int32, yPairHandle int32, ecHandle int32, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.MarshalCompressedEC(xPairHandle, yPairHandle, ecHandle, executor.MemPtr(resultOffset)) -} - -//export v1_5_managedMarshalCompressedEC -func v1_5_managedMarshalCompressedEC(context unsafe.Pointer, xPairHandle int32, yPairHandle int32, ecHandle int32, resultHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedMarshalCompressedEC(xPairHandle, yPairHandle, ecHandle, resultHandle) -} - -//export v1_5_unmarshalEC -func v1_5_unmarshalEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, dataOffset int32, length int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.UnmarshalEC(xResultHandle, yResultHandle, ecHandle, executor.MemPtr(dataOffset), length) -} - -//export v1_5_managedUnmarshalEC -func v1_5_managedUnmarshalEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, dataHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedUnmarshalEC(xResultHandle, yResultHandle, ecHandle, dataHandle) -} - -//export v1_5_unmarshalCompressedEC -func v1_5_unmarshalCompressedEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, dataOffset int32, length int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.UnmarshalCompressedEC(xResultHandle, yResultHandle, ecHandle, executor.MemPtr(dataOffset), length) -} - -//export v1_5_managedUnmarshalCompressedEC -func v1_5_managedUnmarshalCompressedEC(context unsafe.Pointer, xResultHandle int32, yResultHandle int32, ecHandle int32, dataHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedUnmarshalCompressedEC(xResultHandle, yResultHandle, ecHandle, dataHandle) -} - -//export v1_5_generateKeyEC -func v1_5_generateKeyEC(context unsafe.Pointer, xPubKeyHandle int32, yPubKeyHandle int32, ecHandle int32, resultOffset int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GenerateKeyEC(xPubKeyHandle, yPubKeyHandle, ecHandle, executor.MemPtr(resultOffset)) -} - -//export v1_5_managedGenerateKeyEC -func v1_5_managedGenerateKeyEC(context unsafe.Pointer, xPubKeyHandle int32, yPubKeyHandle int32, ecHandle int32, resultHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedGenerateKeyEC(xPubKeyHandle, yPubKeyHandle, ecHandle, resultHandle) -} - -//export v1_5_createEC -func v1_5_createEC(context unsafe.Pointer, dataOffset int32, dataLength int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.CreateEC(executor.MemPtr(dataOffset), dataLength) -} - -//export v1_5_managedCreateEC -func v1_5_managedCreateEC(context unsafe.Pointer, dataHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedCreateEC(dataHandle) -} - -//export v1_5_getCurveLengthEC -func v1_5_getCurveLengthEC(context unsafe.Pointer, ecHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetCurveLengthEC(ecHandle) -} - -//export v1_5_getPrivKeyByteLengthEC -func v1_5_getPrivKeyByteLengthEC(context unsafe.Pointer, ecHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.GetPrivKeyByteLengthEC(ecHandle) -} - -//export v1_5_ellipticCurveGetValues -func v1_5_ellipticCurveGetValues(context unsafe.Pointer, ecHandle int32, fieldOrderHandle int32, basePointOrderHandle int32, eqConstantHandle int32, xBasePointHandle int32, yBasePointHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.EllipticCurveGetValues(ecHandle, fieldOrderHandle, basePointOrderHandle, eqConstantHandle, xBasePointHandle, yBasePointHandle) -} - -//export v1_5_managedVerifySecp256r1 -func v1_5_managedVerifySecp256r1(context unsafe.Pointer, keyHandle int32, messageHandle int32, sigHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedVerifySecp256r1(keyHandle, messageHandle, sigHandle) -} - -//export v1_5_managedVerifyBLSSignatureShare -func v1_5_managedVerifyBLSSignatureShare(context unsafe.Pointer, keyHandle int32, messageHandle int32, sigHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedVerifyBLSSignatureShare(keyHandle, messageHandle, sigHandle) -} - -//export v1_5_managedVerifyBLSAggregatedSignature -func v1_5_managedVerifyBLSAggregatedSignature(context unsafe.Pointer, keyHandle int32, messageHandle int32, sigHandle int32) int32 { - vmHooks := getVMHooksFromContextRawPtr(context) - return vmHooks.ManagedVerifyBLSAggregatedSignature(keyHandle, messageHandle, sigHandle) -} diff --git a/wasmer/wasmerImportsCgoHelper.go b/wasmer/wasmerImportsCgoHelper.go deleted file mode 100644 index 74efeceef..000000000 --- a/wasmer/wasmerImportsCgoHelper.go +++ /dev/null @@ -1,98 +0,0 @@ -package wasmer - -import ( - "unsafe" - - vmcommon "github.com/multiversx/mx-chain-vm-common-go" - "github.com/multiversx/mx-chain-vm-go/executor" -) - -//nolint:all -func getVMHooksFromContextRawPtr(contextPtr unsafe.Pointer) executor.VMHooks { - instCtx := IntoInstanceContext(contextPtr) - vmHooksPtr := *(*uintptr)(instCtx.Data()) - return *(*executor.VMHooks)(unsafe.Pointer(vmHooksPtr)) -} - -func injectCgoFunctionPointers() (vmcommon.FunctionNames, error) { - importsInfo := newWasmerImports() - defer importsInfo.Close() - - err := populateWasmerImports(importsInfo) - if err != nil { - return nil, err - } - - wasmImportsCPointer, numberOfImports := generateWasmerImports(importsInfo) - - var result = cWasmerCacheImportObjectFromImports( - wasmImportsCPointer, - cInt(numberOfImports), - ) - - if result != cWasmerOk { - return nil, newWrappedError(ErrFailedCacheImports) - } - - return extractImportNames(importsInfo), nil -} - -func extractImportNames(imports *wasmerImports) vmcommon.FunctionNames { - names := make(vmcommon.FunctionNames) - var empty struct{} - for _, env := range imports.imports { - for name := range env { - names[name] = empty - } - } - return names -} - -func generateWasmerImports(imports *wasmerImports) (*cWasmerImportT, int) { - var numberOfImports = imports.Count() - var wasmImports = make([]cWasmerImportT, numberOfImports) - var importFunctionNth = 0 - - for _, namespacedImports := range imports.imports { - for importName, importFunction := range namespacedImports { - var wasmInputsArity = len(importFunction.wasmInputs) - var wasmOutputsArity = len(importFunction.wasmOutputs) - - var importFunctionInputsCPointer *cWasmerValueTag - var importFunctionOutputsCPointer *cWasmerValueTag - - if wasmInputsArity > 0 { - importFunctionInputsCPointer = (*cWasmerValueTag)(unsafe.Pointer(&importFunction.wasmInputs[0])) - } - - if wasmOutputsArity > 0 { - importFunctionOutputsCPointer = (*cWasmerValueTag)(unsafe.Pointer(&importFunction.wasmOutputs[0])) - } - - importFunction.importedFunctionPointer = cWasmerImportFuncNew( - importFunction.cgoPointer, - importFunctionInputsCPointer, - cUint(wasmInputsArity), - importFunctionOutputsCPointer, - cUint(wasmOutputsArity), - ) - - var importedFunction = cNewWasmerImportT( - importFunction.namespace, - importName, - importFunction.importedFunctionPointer, - ) - - wasmImports[importFunctionNth] = importedFunction - importFunctionNth++ - } - } - - var wasmImportsCPointer *cWasmerImportT - - if numberOfImports > 0 { - wasmImportsCPointer = (*cWasmerImportT)(unsafe.Pointer(&wasmImports[0])) - } - - return wasmImportsCPointer, numberOfImports -} diff --git a/wasmer/wasmerInstance.go b/wasmer/wasmerInstance.go deleted file mode 100644 index cd147ea14..000000000 --- a/wasmer/wasmerInstance.go +++ /dev/null @@ -1,395 +0,0 @@ -package wasmer - -// #include -import "C" -import ( - "fmt" - "unsafe" - - "github.com/multiversx/mx-chain-vm-go/executor" -) - -// InstanceError represents any kind of errors related to a WebAssembly instance. It -// is returned by `Instance` functions only. -type InstanceError struct { - // Error message. - message string -} - -// NewInstanceError constructs a new `InstanceError`. -func NewInstanceError(message string) *InstanceError { - return &InstanceError{message} -} - -// `InstanceError` is an actual error. The `Error` function returns -// the error message. -func (error *InstanceError) Error() string { - return error.message -} - -// ExportedFunctionError represents any kind of errors related to a -// WebAssembly exported function. It is returned by `Instance` -// functions only. -type ExportedFunctionError struct { - functionName string - message string -} - -// ExportedFunctionSignature holds information about the input/output arities -// of an exported function -type ExportedFunctionSignature struct { - InputArity int - OutputArity int -} - -// NewExportedFunctionError constructs a new `ExportedFunctionError`, -// where `functionName` is the name of the exported function, and -// `message` is the error message. If the error message contains `%s`, -// then this parameter will be replaced by `functionName`. -func NewExportedFunctionError(functionName string, message string) *ExportedFunctionError { - return &ExportedFunctionError{functionName, message} -} - -// ExportedFunctionError is an actual error. The `Error` function -// returns the error message. -func (error *ExportedFunctionError) Error() string { - return error.message -} - -// ExportsMap is a map of names to ExportedFunctionCallInfo values -type ExportsMap map[string]*ExportedFunctionCallInfo - -// ExportSignaturesMap is a map of names to ExportedFunctionSignatures -type ExportSignaturesMap map[string]*ExportedFunctionSignature - -// ExportedFunctionCallInfo contains information required to call an exported WASM function -type ExportedFunctionCallInfo struct { - FuncName string - InputArity cUint32T - InputSignature []cWasmerValueTag - OutputArity cUint32T -} - -// WasmerInstance represents a WebAssembly instance. -type WasmerInstance struct { - // The underlying WebAssembly instance. - instance *cWasmerInstanceT - - AlreadyClean bool - - // All functions exported by the WebAssembly instance, indexed - // by their name as a string. An exported function is a - // regular variadic Go closure. Arguments are untyped. Since - // WebAssembly only supports: `i32`, `i64`, `f32` and `f64` - // types, the accepted Go types are: `int8`, `uint8`, `int16`, - // `uint16`, `int32`, `uint32`, `int64`, `int`, `uint`, `float32` - // and `float64`. In addition to those types, the `Value` type - // (from this project) is accepted. The conversion from a Go - // value to a WebAssembly value is done automatically except for - // the `Value` type (where type is coerced, that's the intent - // here). The WebAssembly type is automatically inferred. Note - // that the returned value is of kind `Value`, and not a - // standard Go type. - exports ExportsMap - - signatures ExportSignaturesMap - - // The exported memory of a WebAssembly instance. - Memory executor.Memory - - // The instance context. - InstanceCtx InstanceContext - - vmHooksPtr unsafe.Pointer -} - -func newWrappedError(target error) error { - var lastError string - var err error - lastError, err = GetLastError() - - if err != nil { - lastError = "unknown details" - } - - return fmt.Errorf("%w: %s", target, lastError) -} - -// NewInstanceWithOptions creates a new instance from provided bytes & options -func NewInstanceWithOptions( - bytes []byte, - options executor.CompilationOptions, -) (*WasmerInstance, error) { - var cInstance *cWasmerInstanceT - - if len(bytes) == 0 { - var emptyInstance = &WasmerInstance{instance: nil, exports: nil, Memory: nil} - return emptyInstance, newWrappedError(ErrInvalidBytecode) - } - - cOptions := unsafe.Pointer(&options) - var compileResult = cWasmerInstantiateWithOptions( - &cInstance, - (*cUchar)(unsafe.Pointer(&bytes[0])), - cUint(len(bytes)), - (*cWasmerCompilationOptions)(cOptions), - ) - - if compileResult != cWasmerOk { - var emptyInstance = &WasmerInstance{instance: nil, exports: nil, Memory: nil} - return emptyInstance, newWrappedError(ErrFailedInstantiation) - } - - instance, err := newInstance(cInstance) - if instance != nil && instance.Memory != nil { - cInstanceContext := cWasmerInstanceContextGet(cInstance) - instance.InstanceCtx = IntoInstanceContextDirect(cInstanceContext) - } - - logWasmer.Trace("new instance created", "id", instance.ID()) - return instance, err -} - -func newInstance(cInstance *cWasmerInstanceT) (*WasmerInstance, error) { - var emptyInstance = &WasmerInstance{instance: nil, exports: nil, signatures: nil, Memory: nil} - - var wasmExports *cWasmerExportsT - var hasMemory bool - - cWasmerInstanceExports(cInstance, &wasmExports) - defer cWasmerExportsDestroy(wasmExports) - - exports, signatures, err := retrieveExportedFunctions(cInstance, wasmExports) - if err != nil { - return emptyInstance, err - } - - memory, hasMemory, err := retrieveExportedMemory(wasmExports) - if err != nil { - return emptyInstance, err - } - - if !hasMemory { - return &WasmerInstance{instance: cInstance, exports: exports, signatures: signatures, Memory: nil}, nil - } - - return &WasmerInstance{instance: cInstance, exports: exports, signatures: signatures, Memory: &memory}, nil -} - -// NewInstanceFromCompiledCodeWithOptions creates a new instance from compiled code -func NewInstanceFromCompiledCodeWithOptions( - compiledCode []byte, - options executor.CompilationOptions, -) (*WasmerInstance, error) { - var cInstance *cWasmerInstanceT - - if len(compiledCode) == 0 { - var emptyInstance = &WasmerInstance{instance: nil, exports: nil, Memory: nil} - return emptyInstance, newWrappedError(ErrInvalidBytecode) - } - - cOptions := unsafe.Pointer(&options) - var instantiateResult = cWasmerInstanceFromCache( - &cInstance, - (*cUchar)(unsafe.Pointer(&compiledCode[0])), - cUint32T(len(compiledCode)), - (*cWasmerCompilationOptions)(cOptions), - ) - - if instantiateResult != cWasmerOk { - var emptyInstance = &WasmerInstance{instance: nil, exports: nil, Memory: nil} - return emptyInstance, newWrappedError(ErrFailedInstantiation) - } - - instance, err := newInstance(cInstance) - if instance != nil && instance.Memory != nil { - cInstanceContext := cWasmerInstanceContextGet(cInstance) - instance.InstanceCtx = IntoInstanceContextDirect(cInstanceContext) - } - - return instance, err -} - -// Clean cleans instance -func (instance *WasmerInstance) Clean() bool { - logWasmer.Trace("cleaning instance", "id", instance.ID()) - if instance.AlreadyClean { - logWasmer.Trace("clean: already cleaned instance", "id", instance.ID()) - return false - } - - if instance.instance != nil { - cWasmerInstanceDestroy(instance.instance) - - if instance.Memory != nil { - instance.Memory.Destroy() - } - - instance.AlreadyClean = true - logWasmer.Trace("cleaned instance", "id", instance.ID()) - - return true - } - - return false -} - -// IsAlreadyCleaned returns the internal field AlreadyClean -func (instance *WasmerInstance) IsAlreadyCleaned() bool { - return instance.AlreadyClean -} - -// GetPointsUsed returns the internal instance gas counter -func (instance *WasmerInstance) GetPointsUsed() uint64 { - return cWasmerInstanceGetPointsUsed(instance.instance) -} - -// SetPointsUsed sets the internal instance gas counter -func (instance *WasmerInstance) SetPointsUsed(points uint64) { - cWasmerInstanceSetPointsUsed(instance.instance, points) -} - -// SetGasLimit sets the gas limit for the instance -func (instance *WasmerInstance) SetGasLimit(gasLimit uint64) { - cWasmerInstanceSetGasLimit(instance.instance, gasLimit) -} - -// SetBreakpointValue sets the breakpoint value for the instance -func (instance *WasmerInstance) SetBreakpointValue(value uint64) { - cWasmerInstanceSetBreakpointValue(instance.instance, value) -} - -// GetBreakpointValue returns the breakpoint value -func (instance *WasmerInstance) GetBreakpointValue() uint64 { - return cWasmerInstanceGetBreakpointValue(instance.instance) -} - -// Cache caches the instance -func (instance *WasmerInstance) Cache() ([]byte, error) { - var cacheBytes *cUchar - var cacheLen cUint32T - - var cacheResult = cWasmerInstanceCache( - instance.instance, - &cacheBytes, - &cacheLen, - ) - - if cacheResult != cWasmerOk { - return nil, ErrCachingFailed - } - - goBytes := C.GoBytes(unsafe.Pointer(cacheBytes), C.int(cacheLen)) - - C.free(unsafe.Pointer(cacheBytes)) - cacheBytes = nil - return goBytes, nil -} - -// IsFunctionImported returns true if the instance imports the specified function -func (instance *WasmerInstance) IsFunctionImported(name string) bool { - return cWasmerInstanceIsFunctionImported(instance.instance, name) -} - -// CallFunction executes given function from loaded contract. -func (instance *WasmerInstance) CallFunction(functionName string) error { - callInfo, found := instance.exports[functionName] - if !found { - return executor.ErrFuncNotFound - } - - return callExportedFunction(instance.instance, callInfo) -} - -// HasFunction checks if loaded contract has a function (endpoint) with given name. -func (instance *WasmerInstance) HasFunction(functionName string) bool { - _, ok := instance.exports[functionName] - return ok -} - -// GetFunctionNames loads a list of contract function (endpoint) names. Required for validating reserved names. -func (instance *WasmerInstance) GetFunctionNames() []string { - var functionNames []string - for functionName := range instance.exports { - functionNames = append(functionNames, functionName) - } - return functionNames -} - -// ValidateFunctionArities checks that no function (endpoint) of the given contract has any parameters or returns any result. -// All arguments and results should be transferred via the import functions. -func (instance *WasmerInstance) ValidateFunctionArities() error { - for functionName := range instance.exports { - err := instance.verifyVoidFunction(functionName) - if err != nil { - return err - } - } - return nil -} - -// HasMemory checks whether the instance has at least one exported memory. -func (instance *WasmerInstance) HasMemory() bool { - return nil != instance.Memory -} - -// MemLoad returns the contents from the given offset of the WASM memory. -func (instance *WasmerInstance) MemLoad(memPtr executor.MemPtr, length executor.MemLength) ([]byte, error) { - return executor.MemLoadFromMemory(instance.Memory, memPtr, length) -} - -// MemStore stores the given data in the WASM memory at the given offset. -func (instance *WasmerInstance) MemStore(memPtr executor.MemPtr, data []byte) error { - return executor.MemStoreToMemory(instance.Memory, memPtr, data) -} - -// MemLength returns the length of the allocated memory. Only called directly in tests. -func (instance *WasmerInstance) MemLength() uint32 { - return instance.Memory.Length() -} - -// MemGrow allocates more pages to the current memory. Only called directly in tests. -func (instance *WasmerInstance) MemGrow(pages uint32) error { - return instance.Memory.Grow(pages) -} - -// MemDump yields the entire contents of the memory. Only used in tests. -func (instance *WasmerInstance) MemDump() []byte { - return instance.Memory.Data() -} - -// Reset resets the instance memories and globals -func (instance *WasmerInstance) Reset() bool { - if instance.AlreadyClean { - logWasmer.Trace("reset: already cleaned instance", "id", instance.ID()) - return false - } - - result := cWasmerInstanceReset(instance.instance) - ok := result == cWasmerOk - - logWasmer.Trace("reset: warm instance", "id", instance.ID(), "ok", ok) - return ok -} - -// IsInterfaceNil returns true if underlying object is nil -func (instance *WasmerInstance) IsInterfaceNil() bool { - return instance == nil -} - -// SetVMHooksPtr sets the VM hooks pointer -func (instance *WasmerInstance) SetVMHooksPtr(vmHooksPtr uintptr) { - localVMHooksPointer := unsafe.Pointer(&vmHooksPtr) - instance.vmHooksPtr = localVMHooksPointer - cWasmerInstanceContextDataSet(instance.instance, localVMHooksPointer) -} - -// GetVMHooksPtr returns the VM hooks pointer -func (instance *WasmerInstance) GetVMHooksPtr() uintptr { - return *(*uintptr)(instance.vmHooksPtr) -} - -// ID returns an identifier for the instance, unique at runtime -func (instance *WasmerInstance) ID() string { - return fmt.Sprintf("%p", instance.instance) -} diff --git a/wasmer/wasmerInstanceHelpers.go b/wasmer/wasmerInstanceHelpers.go deleted file mode 100644 index d7edbb39a..000000000 --- a/wasmer/wasmerInstanceHelpers.go +++ /dev/null @@ -1,131 +0,0 @@ -package wasmer - -import ( - "fmt" - "unsafe" -) - -func retrieveExportedMemory(wasmExports *cWasmerExportsT) (Memory, bool, error) { - var numberOfExports = int(cWasmerExportsLen(wasmExports)) - - var memory Memory - var hasMemory = false - - for nth := 0; nth < numberOfExports; nth++ { - var wasmExport = cWasmerExportsGet(wasmExports, cInt(nth)) - var wasmExportKind = cWasmerExportKind(wasmExport) - - if wasmExportKind == cWasmMemory { - var wasmMemory *cWasmerMemoryT - - if cWasmerExportToMemory(wasmExport, &wasmMemory) != cWasmerOk { - var emptyMemory Memory - return emptyMemory, false, NewInstanceError("Failed to extract the exported memory.") - } - - memory = newMemory(wasmMemory) - hasMemory = true - } - } - - return memory, hasMemory, nil -} - -func retrieveExportedFunctions( - cInstance *cWasmerInstanceT, - wasmExports *cWasmerExportsT, -) (ExportsMap, ExportSignaturesMap, error) { - var exports = make(ExportsMap) - var signatures = make(ExportSignaturesMap) - - var numberOfExports = int(cWasmerExportsLen(wasmExports)) - - for nth := 0; nth < numberOfExports; nth++ { - var wasmExport = cWasmerExportsGet(wasmExports, cInt(nth)) - var wasmExportKind = cWasmerExportKind(wasmExport) - - if wasmExportKind != cWasmFunction { - continue - } - - var wasmExportName = cWasmerExportName(wasmExport) - var wasmFunction = cWasmerExportToFunc(wasmExport) - var exportedFunctionName = cGoStringN((*cChar)(unsafe.Pointer(wasmExportName.bytes)), (cInt)(wasmExportName.bytes_len)) - - callInfo, err := createExportedFunctionCallInfo(wasmFunction, exportedFunctionName) - if err != nil { - return nil, nil, err - } - - signature := &ExportedFunctionSignature{ - InputArity: int(callInfo.InputArity), - OutputArity: int(callInfo.OutputArity), - } - - exports[exportedFunctionName] = callInfo - signatures[exportedFunctionName] = signature - } - - return exports, signatures, nil -} - -func createExportedFunctionCallInfo( - wasmFunction *cWasmerExportFuncT, - exportedFunctionName string, -) (*ExportedFunctionCallInfo, error) { - - wasmFunctionInputSignatures, wasmFunctionInputsArity, err := getExportedFunctionSignature(wasmFunction, exportedFunctionName) - if err != nil { - return nil, err - } - - wasmFunctionOutputsArity, err := getExportedFunctionOutputArity(wasmFunction, exportedFunctionName) - if err != nil { - return nil, err - } - - callInfo := &ExportedFunctionCallInfo{ - FuncName: exportedFunctionName, - InputArity: wasmFunctionInputsArity, - InputSignature: wasmFunctionInputSignatures, - OutputArity: wasmFunctionOutputsArity, - } - - return callInfo, nil -} - -func callExportedFunction( - cInstance *cWasmerInstanceT, - callInfo *ExportedFunctionCallInfo, - arguments ...interface{}, -) error { - err := validateGivenArguments(callInfo.FuncName, arguments, callInfo.InputArity) - if err != nil { - return err - } - - var wasmInputs []cWasmerValueT - wasmInputs, err = createWasmInputsFromArguments( - arguments, - callInfo.InputArity, - callInfo.InputSignature, - callInfo.FuncName) - if err != nil { - return err - } - - _, callResult := callWasmFunction( - cInstance, - callInfo.FuncName, - callInfo.InputArity, - callInfo.OutputArity, - wasmInputs, - ) - - if callResult != cWasmerOk { - err = fmt.Errorf("failed to call the `%s` exported function", callInfo.FuncName) - return newWrappedError(err) - } - - return nil -} diff --git a/wasmer/wasmerInstanceValidate.go b/wasmer/wasmerInstanceValidate.go deleted file mode 100644 index a7d5870f4..000000000 --- a/wasmer/wasmerInstanceValidate.go +++ /dev/null @@ -1,49 +0,0 @@ -package wasmer - -import ( - "fmt" - - "github.com/multiversx/mx-chain-vm-go/executor" -) - -const noArity = -1 - -// getSignature returns the signature for the given functionName -func (instance *WasmerInstance) getSignature(functionName string) (*ExportedFunctionSignature, bool) { - signature, ok := instance.signatures[functionName] - return signature, ok -} - -func (instance *WasmerInstance) verifyVoidFunction(functionName string) error { - inArity, err := instance.getInputArity(functionName) - if err != nil { - return err - } - - outArity, err := instance.getOutputArity(functionName) - if err != nil { - return err - } - - isVoid := inArity == 0 && outArity == 0 - if !isVoid { - return fmt.Errorf("%w: %s", executor.ErrFunctionNonvoidSignature, functionName) - } - return nil -} - -func (instance *WasmerInstance) getInputArity(functionName string) (int, error) { - signature, ok := instance.getSignature(functionName) - if !ok { - return noArity, fmt.Errorf("%w: %s", executor.ErrFuncNotFound, functionName) - } - return signature.InputArity, nil -} - -func (instance *WasmerInstance) getOutputArity(functionName string) (int, error) { - signature, ok := instance.getSignature(functionName) - if !ok { - return noArity, fmt.Errorf("%w: %s", executor.ErrFuncNotFound, functionName) - } - return signature.OutputArity, nil -} diff --git a/wasmer/wasmerInstanceValidate_test.go b/wasmer/wasmerInstanceValidate_test.go deleted file mode 100644 index b8abaa987..000000000 --- a/wasmer/wasmerInstanceValidate_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package wasmer - -import ( - "fmt" - "os" - "path/filepath" - "testing" - - "github.com/multiversx/mx-chain-vm-go/executor" - "github.com/stretchr/testify/require" -) - -// GetSCCode retrieves the bytecode of a WASM module from a file. -func getSCCode(fileName string) []byte { - code, err := os.ReadFile(filepath.Clean(fileName)) - if err != nil { - panic(fmt.Sprintf("GetSCCode(): %s", fileName)) - } - return code -} - -func TestFunctionsGuard_Arity(t *testing.T) { - if os.Getenv("VMEXECUTOR") != "wasmer1" { - t.Skip("run exclusively with wasmer1") - } - - // Empty imports on purpose. - // We have currently no access to the vmhooks package here, due to cyclic imports. - // Fortunately, imports are not necessary for this test. - _, err := injectCgoFunctionPointers() - require.Nil(t, err) - - gasLimit := uint64(100000000) - path := "./../test/contracts/signatures/output/signatures.wasm" - contractCode := getSCCode(path) - options := executor.CompilationOptions{ - GasLimit: gasLimit, - OpcodeTrace: false, - Metering: true, - RuntimeBreakpoints: true, - } - instance, err := NewInstanceWithOptions(contractCode, options) - require.Nil(t, err) - - inArity, _ := instance.getInputArity("goodFunction") - require.Equal(t, 0, inArity) - - outArity, _ := instance.getOutputArity("goodFunction") - require.Equal(t, 0, outArity) - - inArity, _ = instance.getInputArity("wrongReturn") - require.Equal(t, 0, inArity) - - outArity, _ = instance.getOutputArity("wrongReturn") - require.Equal(t, 1, outArity) - - inArity, _ = instance.getInputArity("wrongParams") - require.Equal(t, 1, inArity) - - outArity, _ = instance.getOutputArity("wrongParams") - require.Equal(t, 0, outArity) - - inArity, _ = instance.getInputArity("wrongParamsAndReturn") - require.Equal(t, 2, inArity) - - outArity, _ = instance.getOutputArity("wrongParamsAndReturn") - require.Equal(t, 1, outArity) - - err = instance.verifyVoidFunction("goodFunction") - require.Nil(t, err) - - err = instance.verifyVoidFunction("wrongReturn") - require.NotNil(t, err) - - err = instance.verifyVoidFunction("wrongParams") - require.NotNil(t, err) - - err = instance.verifyVoidFunction("wrongParamsAndReturn") - require.NotNil(t, err) -} diff --git a/wasmer/wasmerOpcodeCostsArray.go b/wasmer/wasmerOpcodeCostsArray.go deleted file mode 100644 index ec17bc5be..000000000 --- a/wasmer/wasmerOpcodeCostsArray.go +++ /dev/null @@ -1,918 +0,0 @@ -package wasmer - -import ( - "github.com/multiversx/mx-chain-vm-go/executor" -) - -// OpcodeCount is the number of opcodes that we account for when setting gas costs. -const opcodeCount = 448 - -// opcodes list -const ( - OpcodeUnreachable = iota - OpcodeNop - OpcodeBlock - OpcodeLoop - OpcodeIf - OpcodeElse - OpcodeEnd - OpcodeBr - OpcodeBrIf - OpcodeBrTable - OpcodeReturn - OpcodeCall - OpcodeCallIndirect - OpcodeDrop - OpcodeSelect - OpcodeTypedSelect - OpcodeLocalGet - OpcodeLocalSet - OpcodeLocalTee - OpcodeGlobalGet - OpcodeGlobalSet - OpcodeI32Load - OpcodeI64Load - OpcodeF32Load - OpcodeF64Load - OpcodeI32Load8S - OpcodeI32Load8U - OpcodeI32Load16S - OpcodeI32Load16U - OpcodeI64Load8S - OpcodeI64Load8U - OpcodeI64Load16S - OpcodeI64Load16U - OpcodeI64Load32S - OpcodeI64Load32U - OpcodeI32Store - OpcodeI64Store - OpcodeF32Store - OpcodeF64Store - OpcodeI32Store8 - OpcodeI32Store16 - OpcodeI64Store8 - OpcodeI64Store16 - OpcodeI64Store32 - OpcodeMemorySize - OpcodeMemoryGrow - OpcodeI32Const - OpcodeI64Const - OpcodeF32Const - OpcodeF64Const - OpcodeRefNull - OpcodeRefIsNull - OpcodeRefFunc - OpcodeI32Eqz - OpcodeI32Eq - OpcodeI32Ne - OpcodeI32LtS - OpcodeI32LtU - OpcodeI32GtS - OpcodeI32GtU - OpcodeI32LeS - OpcodeI32LeU - OpcodeI32GeS - OpcodeI32GeU - OpcodeI64Eqz - OpcodeI64Eq - OpcodeI64Ne - OpcodeI64LtS - OpcodeI64LtU - OpcodeI64GtS - OpcodeI64GtU - OpcodeI64LeS - OpcodeI64LeU - OpcodeI64GeS - OpcodeI64GeU - OpcodeF32Eq - OpcodeF32Ne - OpcodeF32Lt - OpcodeF32Gt - OpcodeF32Le - OpcodeF32Ge - OpcodeF64Eq - OpcodeF64Ne - OpcodeF64Lt - OpcodeF64Gt - OpcodeF64Le - OpcodeF64Ge - OpcodeI32Clz - OpcodeI32Ctz - OpcodeI32Popcnt - OpcodeI32Add - OpcodeI32Sub - OpcodeI32Mul - OpcodeI32DivS - OpcodeI32DivU - OpcodeI32RemS - OpcodeI32RemU - OpcodeI32And - OpcodeI32Or - OpcodeI32Xor - OpcodeI32Shl - OpcodeI32ShrS - OpcodeI32ShrU - OpcodeI32Rotl - OpcodeI32Rotr - OpcodeI64Clz - OpcodeI64Ctz - OpcodeI64Popcnt - OpcodeI64Add - OpcodeI64Sub - OpcodeI64Mul - OpcodeI64DivS - OpcodeI64DivU - OpcodeI64RemS - OpcodeI64RemU - OpcodeI64And - OpcodeI64Or - OpcodeI64Xor - OpcodeI64Shl - OpcodeI64ShrS - OpcodeI64ShrU - OpcodeI64Rotl - OpcodeI64Rotr - OpcodeF32Abs - OpcodeF32Neg - OpcodeF32Ceil - OpcodeF32Floor - OpcodeF32Trunc - OpcodeF32Nearest - OpcodeF32Sqrt - OpcodeF32Add - OpcodeF32Sub - OpcodeF32Mul - OpcodeF32Div - OpcodeF32Min - OpcodeF32Max - OpcodeF32Copysign - OpcodeF64Abs - OpcodeF64Neg - OpcodeF64Ceil - OpcodeF64Floor - OpcodeF64Trunc - OpcodeF64Nearest - OpcodeF64Sqrt - OpcodeF64Add - OpcodeF64Sub - OpcodeF64Mul - OpcodeF64Div - OpcodeF64Min - OpcodeF64Max - OpcodeF64Copysign - OpcodeI32WrapI64 - OpcodeI32TruncF32S - OpcodeI32TruncF32U - OpcodeI32TruncF64S - OpcodeI32TruncF64U - OpcodeI64ExtendI32S - OpcodeI64ExtendI32U - OpcodeI64TruncF32S - OpcodeI64TruncF32U - OpcodeI64TruncF64S - OpcodeI64TruncF64U - OpcodeF32ConvertI32S - OpcodeF32ConvertI32U - OpcodeF32ConvertI64S - OpcodeF32ConvertI64U - OpcodeF32DemoteF64 - OpcodeF64ConvertI32S - OpcodeF64ConvertI32U - OpcodeF64ConvertI64S - OpcodeF64ConvertI64U - OpcodeF64PromoteF32 - OpcodeI32ReinterpretF32 - OpcodeI64ReinterpretF64 - OpcodeF32ReinterpretI32 - OpcodeF64ReinterpretI64 - OpcodeI32Extend8S - OpcodeI32Extend16S - OpcodeI64Extend8S - OpcodeI64Extend16S - OpcodeI64Extend32S - OpcodeI32TruncSatF32S - OpcodeI32TruncSatF32U - OpcodeI32TruncSatF64S - OpcodeI32TruncSatF64U - OpcodeI64TruncSatF32S - OpcodeI64TruncSatF32U - OpcodeI64TruncSatF64S - OpcodeI64TruncSatF64U - OpcodeMemoryInit - OpcodeDataDrop - OpcodeMemoryCopy - OpcodeMemoryFill - OpcodeTableInit - OpcodeElemDrop - OpcodeTableCopy - OpcodeTableFill - OpcodeTableGet - OpcodeTableSet - OpcodeTableGrow - OpcodeTableSize - OpcodeAtomicNotify - OpcodeI32AtomicWait - OpcodeI64AtomicWait - OpcodeAtomicFence - OpcodeI32AtomicLoad - OpcodeI64AtomicLoad - OpcodeI32AtomicLoad8U - OpcodeI32AtomicLoad16U - OpcodeI64AtomicLoad8U - OpcodeI64AtomicLoad16U - OpcodeI64AtomicLoad32U - OpcodeI32AtomicStore - OpcodeI64AtomicStore - OpcodeI32AtomicStore8 - OpcodeI32AtomicStore16 - OpcodeI64AtomicStore8 - OpcodeI64AtomicStore16 - OpcodeI64AtomicStore32 - OpcodeI32AtomicRmwAdd - OpcodeI64AtomicRmwAdd - OpcodeI32AtomicRmw8AddU - OpcodeI32AtomicRmw16AddU - OpcodeI64AtomicRmw8AddU - OpcodeI64AtomicRmw16AddU - OpcodeI64AtomicRmw32AddU - OpcodeI32AtomicRmwSub - OpcodeI64AtomicRmwSub - OpcodeI32AtomicRmw8SubU - OpcodeI32AtomicRmw16SubU - OpcodeI64AtomicRmw8SubU - OpcodeI64AtomicRmw16SubU - OpcodeI64AtomicRmw32SubU - OpcodeI32AtomicRmwAnd - OpcodeI64AtomicRmwAnd - OpcodeI32AtomicRmw8AndU - OpcodeI32AtomicRmw16AndU - OpcodeI64AtomicRmw8AndU - OpcodeI64AtomicRmw16AndU - OpcodeI64AtomicRmw32AndU - OpcodeI32AtomicRmwOr - OpcodeI64AtomicRmwOr - OpcodeI32AtomicRmw8OrU - OpcodeI32AtomicRmw16OrU - OpcodeI64AtomicRmw8OrU - OpcodeI64AtomicRmw16OrU - OpcodeI64AtomicRmw32OrU - OpcodeI32AtomicRmwXor - OpcodeI64AtomicRmwXor - OpcodeI32AtomicRmw8XorU - OpcodeI32AtomicRmw16XorU - OpcodeI64AtomicRmw8XorU - OpcodeI64AtomicRmw16XorU - OpcodeI64AtomicRmw32XorU - OpcodeI32AtomicRmwXchg - OpcodeI64AtomicRmwXchg - OpcodeI32AtomicRmw8XchgU - OpcodeI32AtomicRmw16XchgU - OpcodeI64AtomicRmw8XchgU - OpcodeI64AtomicRmw16XchgU - OpcodeI64AtomicRmw32XchgU - OpcodeI32AtomicRmwCmpxchg - OpcodeI64AtomicRmwCmpxchg - OpcodeI32AtomicRmw8CmpxchgU - OpcodeI32AtomicRmw16CmpxchgU - OpcodeI64AtomicRmw8CmpxchgU - OpcodeI64AtomicRmw16CmpxchgU - OpcodeI64AtomicRmw32CmpxchgU - OpcodeV128Load - OpcodeV128Store - OpcodeV128Const - OpcodeI8x16Splat - OpcodeI8x16ExtractLaneS - OpcodeI8x16ExtractLaneU - OpcodeI8x16ReplaceLane - OpcodeI16x8Splat - OpcodeI16x8ExtractLaneS - OpcodeI16x8ExtractLaneU - OpcodeI16x8ReplaceLane - OpcodeI32x4Splat - OpcodeI32x4ExtractLane - OpcodeI32x4ReplaceLane - OpcodeI64x2Splat - OpcodeI64x2ExtractLane - OpcodeI64x2ReplaceLane - OpcodeF32x4Splat - OpcodeF32x4ExtractLane - OpcodeF32x4ReplaceLane - OpcodeF64x2Splat - OpcodeF64x2ExtractLane - OpcodeF64x2ReplaceLane - OpcodeI8x16Eq - OpcodeI8x16Ne - OpcodeI8x16LtS - OpcodeI8x16LtU - OpcodeI8x16GtS - OpcodeI8x16GtU - OpcodeI8x16LeS - OpcodeI8x16LeU - OpcodeI8x16GeS - OpcodeI8x16GeU - OpcodeI16x8Eq - OpcodeI16x8Ne - OpcodeI16x8LtS - OpcodeI16x8LtU - OpcodeI16x8GtS - OpcodeI16x8GtU - OpcodeI16x8LeS - OpcodeI16x8LeU - OpcodeI16x8GeS - OpcodeI16x8GeU - OpcodeI32x4Eq - OpcodeI32x4Ne - OpcodeI32x4LtS - OpcodeI32x4LtU - OpcodeI32x4GtS - OpcodeI32x4GtU - OpcodeI32x4LeS - OpcodeI32x4LeU - OpcodeI32x4GeS - OpcodeI32x4GeU - OpcodeF32x4Eq - OpcodeF32x4Ne - OpcodeF32x4Lt - OpcodeF32x4Gt - OpcodeF32x4Le - OpcodeF32x4Ge - OpcodeF64x2Eq - OpcodeF64x2Ne - OpcodeF64x2Lt - OpcodeF64x2Gt - OpcodeF64x2Le - OpcodeF64x2Ge - OpcodeV128Not - OpcodeV128And - OpcodeV128AndNot - OpcodeV128Or - OpcodeV128Xor - OpcodeV128Bitselect - OpcodeI8x16Neg - OpcodeI8x16AnyTrue - OpcodeI8x16AllTrue - OpcodeI8x16Shl - OpcodeI8x16ShrS - OpcodeI8x16ShrU - OpcodeI8x16Add - OpcodeI8x16AddSaturateS - OpcodeI8x16AddSaturateU - OpcodeI8x16Sub - OpcodeI8x16SubSaturateS - OpcodeI8x16SubSaturateU - OpcodeI8x16MinS - OpcodeI8x16MinU - OpcodeI8x16MaxS - OpcodeI8x16MaxU - OpcodeI8x16Mul - OpcodeI16x8Neg - OpcodeI16x8AnyTrue - OpcodeI16x8AllTrue - OpcodeI16x8Shl - OpcodeI16x8ShrS - OpcodeI16x8ShrU - OpcodeI16x8Add - OpcodeI16x8AddSaturateS - OpcodeI16x8AddSaturateU - OpcodeI16x8Sub - OpcodeI16x8SubSaturateS - OpcodeI16x8SubSaturateU - OpcodeI16x8Mul - OpcodeI16x8MinS - OpcodeI16x8MinU - OpcodeI16x8MaxS - OpcodeI16x8MaxU - OpcodeI32x4Neg - OpcodeI32x4AnyTrue - OpcodeI32x4AllTrue - OpcodeI32x4Shl - OpcodeI32x4ShrS - OpcodeI32x4ShrU - OpcodeI32x4Add - OpcodeI32x4Sub - OpcodeI32x4Mul - OpcodeI32x4MinS - OpcodeI32x4MinU - OpcodeI32x4MaxS - OpcodeI32x4MaxU - OpcodeI64x2Neg - OpcodeI64x2AnyTrue - OpcodeI64x2AllTrue - OpcodeI64x2Shl - OpcodeI64x2ShrS - OpcodeI64x2ShrU - OpcodeI64x2Add - OpcodeI64x2Sub - OpcodeI64x2Mul - OpcodeF32x4Abs - OpcodeF32x4Neg - OpcodeF32x4Sqrt - OpcodeF32x4Add - OpcodeF32x4Sub - OpcodeF32x4Mul - OpcodeF32x4Div - OpcodeF32x4Min - OpcodeF32x4Max - OpcodeF64x2Abs - OpcodeF64x2Neg - OpcodeF64x2Sqrt - OpcodeF64x2Add - OpcodeF64x2Sub - OpcodeF64x2Mul - OpcodeF64x2Div - OpcodeF64x2Min - OpcodeF64x2Max - OpcodeI32x4TruncSatF32x4S - OpcodeI32x4TruncSatF32x4U - OpcodeI64x2TruncSatF64x2S - OpcodeI64x2TruncSatF64x2U - OpcodeF32x4ConvertI32x4S - OpcodeF32x4ConvertI32x4U - OpcodeF64x2ConvertI64x2S - OpcodeF64x2ConvertI64x2U - OpcodeV8x16Swizzle - OpcodeV8x16Shuffle - OpcodeV8x16LoadSplat - OpcodeV16x8LoadSplat - OpcodeV32x4LoadSplat - OpcodeV64x2LoadSplat - OpcodeI8x16NarrowI16x8S - OpcodeI8x16NarrowI16x8U - OpcodeI16x8NarrowI32x4S - OpcodeI16x8NarrowI32x4U - OpcodeI16x8WidenLowI8x16S - OpcodeI16x8WidenHighI8x16S - OpcodeI16x8WidenLowI8x16U - OpcodeI16x8WidenHighI8x16U - OpcodeI32x4WidenLowI16x8S - OpcodeI32x4WidenHighI16x8S - OpcodeI32x4WidenLowI16x8U - OpcodeI32x4WidenHighI16x8U - OpcodeI16x8Load8x8S - OpcodeI16x8Load8x8U - OpcodeI32x4Load16x4S - OpcodeI32x4Load16x4U - OpcodeI64x2Load32x2S - OpcodeI64x2Load32x2U - OpcodeI8x16RoundingAverageU - OpcodeI16x8RoundingAverageU - OpcodeLocalAllocate -) - -func toOpcodeCostsArray(opcodeCostsStruct *executor.WASMOpcodeCost) [opcodeCount]uint32 { - opcodeCosts := [opcodeCount]uint32{} - - opcodeCosts[OpcodeUnreachable] = opcodeCostsStruct.Unreachable - opcodeCosts[OpcodeNop] = opcodeCostsStruct.Nop - opcodeCosts[OpcodeBlock] = opcodeCostsStruct.Block - opcodeCosts[OpcodeLoop] = opcodeCostsStruct.Loop - opcodeCosts[OpcodeIf] = opcodeCostsStruct.If - opcodeCosts[OpcodeElse] = opcodeCostsStruct.Else - opcodeCosts[OpcodeEnd] = opcodeCostsStruct.End - opcodeCosts[OpcodeBr] = opcodeCostsStruct.Br - opcodeCosts[OpcodeBrIf] = opcodeCostsStruct.BrIf - opcodeCosts[OpcodeBrTable] = opcodeCostsStruct.BrTable - opcodeCosts[OpcodeReturn] = opcodeCostsStruct.Return - opcodeCosts[OpcodeCall] = opcodeCostsStruct.Call - opcodeCosts[OpcodeCallIndirect] = opcodeCostsStruct.CallIndirect - opcodeCosts[OpcodeDrop] = opcodeCostsStruct.Drop - opcodeCosts[OpcodeSelect] = opcodeCostsStruct.Select - opcodeCosts[OpcodeTypedSelect] = opcodeCostsStruct.TypedSelect - opcodeCosts[OpcodeLocalGet] = opcodeCostsStruct.LocalGet - opcodeCosts[OpcodeLocalSet] = opcodeCostsStruct.LocalSet - opcodeCosts[OpcodeLocalTee] = opcodeCostsStruct.LocalTee - opcodeCosts[OpcodeGlobalGet] = opcodeCostsStruct.GlobalGet - opcodeCosts[OpcodeGlobalSet] = opcodeCostsStruct.GlobalSet - opcodeCosts[OpcodeI32Load] = opcodeCostsStruct.I32Load - opcodeCosts[OpcodeI64Load] = opcodeCostsStruct.I64Load - opcodeCosts[OpcodeF32Load] = opcodeCostsStruct.F32Load - opcodeCosts[OpcodeF64Load] = opcodeCostsStruct.F64Load - opcodeCosts[OpcodeI32Load8S] = opcodeCostsStruct.I32Load8S - opcodeCosts[OpcodeI32Load8U] = opcodeCostsStruct.I32Load8U - opcodeCosts[OpcodeI32Load16S] = opcodeCostsStruct.I32Load16S - opcodeCosts[OpcodeI32Load16U] = opcodeCostsStruct.I32Load16U - opcodeCosts[OpcodeI64Load8S] = opcodeCostsStruct.I64Load8S - opcodeCosts[OpcodeI64Load8U] = opcodeCostsStruct.I64Load8U - opcodeCosts[OpcodeI64Load16S] = opcodeCostsStruct.I64Load16S - opcodeCosts[OpcodeI64Load16U] = opcodeCostsStruct.I64Load16U - opcodeCosts[OpcodeI64Load32S] = opcodeCostsStruct.I64Load32S - opcodeCosts[OpcodeI64Load32U] = opcodeCostsStruct.I64Load32U - opcodeCosts[OpcodeI32Store] = opcodeCostsStruct.I32Store - opcodeCosts[OpcodeI64Store] = opcodeCostsStruct.I64Store - opcodeCosts[OpcodeF32Store] = opcodeCostsStruct.F32Store - opcodeCosts[OpcodeF64Store] = opcodeCostsStruct.F64Store - opcodeCosts[OpcodeI32Store8] = opcodeCostsStruct.I32Store8 - opcodeCosts[OpcodeI32Store16] = opcodeCostsStruct.I32Store16 - opcodeCosts[OpcodeI64Store8] = opcodeCostsStruct.I64Store8 - opcodeCosts[OpcodeI64Store16] = opcodeCostsStruct.I64Store16 - opcodeCosts[OpcodeI64Store32] = opcodeCostsStruct.I64Store32 - opcodeCosts[OpcodeMemorySize] = opcodeCostsStruct.MemorySize - opcodeCosts[OpcodeMemoryGrow] = opcodeCostsStruct.MemoryGrow - opcodeCosts[OpcodeI32Const] = opcodeCostsStruct.I32Const - opcodeCosts[OpcodeI64Const] = opcodeCostsStruct.I64Const - opcodeCosts[OpcodeF32Const] = opcodeCostsStruct.F32Const - opcodeCosts[OpcodeF64Const] = opcodeCostsStruct.F64Const - opcodeCosts[OpcodeRefNull] = opcodeCostsStruct.RefNull - opcodeCosts[OpcodeRefIsNull] = opcodeCostsStruct.RefIsNull - opcodeCosts[OpcodeRefFunc] = opcodeCostsStruct.RefFunc - opcodeCosts[OpcodeI32Eqz] = opcodeCostsStruct.I32Eqz - opcodeCosts[OpcodeI32Eq] = opcodeCostsStruct.I32Eq - opcodeCosts[OpcodeI32Ne] = opcodeCostsStruct.I32Ne - opcodeCosts[OpcodeI32LtS] = opcodeCostsStruct.I32LtS - opcodeCosts[OpcodeI32LtU] = opcodeCostsStruct.I32LtU - opcodeCosts[OpcodeI32GtS] = opcodeCostsStruct.I32GtS - opcodeCosts[OpcodeI32GtU] = opcodeCostsStruct.I32GtU - opcodeCosts[OpcodeI32LeS] = opcodeCostsStruct.I32LeS - opcodeCosts[OpcodeI32LeU] = opcodeCostsStruct.I32LeU - opcodeCosts[OpcodeI32GeS] = opcodeCostsStruct.I32GeS - opcodeCosts[OpcodeI32GeU] = opcodeCostsStruct.I32GeU - opcodeCosts[OpcodeI64Eqz] = opcodeCostsStruct.I64Eqz - opcodeCosts[OpcodeI64Eq] = opcodeCostsStruct.I64Eq - opcodeCosts[OpcodeI64Ne] = opcodeCostsStruct.I64Ne - opcodeCosts[OpcodeI64LtS] = opcodeCostsStruct.I64LtS - opcodeCosts[OpcodeI64LtU] = opcodeCostsStruct.I64LtU - opcodeCosts[OpcodeI64GtS] = opcodeCostsStruct.I64GtS - opcodeCosts[OpcodeI64GtU] = opcodeCostsStruct.I64GtU - opcodeCosts[OpcodeI64LeS] = opcodeCostsStruct.I64LeS - opcodeCosts[OpcodeI64LeU] = opcodeCostsStruct.I64LeU - opcodeCosts[OpcodeI64GeS] = opcodeCostsStruct.I64GeS - opcodeCosts[OpcodeI64GeU] = opcodeCostsStruct.I64GeU - opcodeCosts[OpcodeF32Eq] = opcodeCostsStruct.F32Eq - opcodeCosts[OpcodeF32Ne] = opcodeCostsStruct.F32Ne - opcodeCosts[OpcodeF32Lt] = opcodeCostsStruct.F32Lt - opcodeCosts[OpcodeF32Gt] = opcodeCostsStruct.F32Gt - opcodeCosts[OpcodeF32Le] = opcodeCostsStruct.F32Le - opcodeCosts[OpcodeF32Ge] = opcodeCostsStruct.F32Ge - opcodeCosts[OpcodeF64Eq] = opcodeCostsStruct.F64Eq - opcodeCosts[OpcodeF64Ne] = opcodeCostsStruct.F64Ne - opcodeCosts[OpcodeF64Lt] = opcodeCostsStruct.F64Lt - opcodeCosts[OpcodeF64Gt] = opcodeCostsStruct.F64Gt - opcodeCosts[OpcodeF64Le] = opcodeCostsStruct.F64Le - opcodeCosts[OpcodeF64Ge] = opcodeCostsStruct.F64Ge - opcodeCosts[OpcodeI32Clz] = opcodeCostsStruct.I32Clz - opcodeCosts[OpcodeI32Ctz] = opcodeCostsStruct.I32Ctz - opcodeCosts[OpcodeI32Popcnt] = opcodeCostsStruct.I32Popcnt - opcodeCosts[OpcodeI32Add] = opcodeCostsStruct.I32Add - opcodeCosts[OpcodeI32Sub] = opcodeCostsStruct.I32Sub - opcodeCosts[OpcodeI32Mul] = opcodeCostsStruct.I32Mul - opcodeCosts[OpcodeI32DivS] = opcodeCostsStruct.I32DivS - opcodeCosts[OpcodeI32DivU] = opcodeCostsStruct.I32DivU - opcodeCosts[OpcodeI32RemS] = opcodeCostsStruct.I32RemS - opcodeCosts[OpcodeI32RemU] = opcodeCostsStruct.I32RemU - opcodeCosts[OpcodeI32And] = opcodeCostsStruct.I32And - opcodeCosts[OpcodeI32Or] = opcodeCostsStruct.I32Or - opcodeCosts[OpcodeI32Xor] = opcodeCostsStruct.I32Xor - opcodeCosts[OpcodeI32Shl] = opcodeCostsStruct.I32Shl - opcodeCosts[OpcodeI32ShrS] = opcodeCostsStruct.I32ShrS - opcodeCosts[OpcodeI32ShrU] = opcodeCostsStruct.I32ShrU - opcodeCosts[OpcodeI32Rotl] = opcodeCostsStruct.I32Rotl - opcodeCosts[OpcodeI32Rotr] = opcodeCostsStruct.I32Rotr - opcodeCosts[OpcodeI64Clz] = opcodeCostsStruct.I64Clz - opcodeCosts[OpcodeI64Ctz] = opcodeCostsStruct.I64Ctz - opcodeCosts[OpcodeI64Popcnt] = opcodeCostsStruct.I64Popcnt - opcodeCosts[OpcodeI64Add] = opcodeCostsStruct.I64Add - opcodeCosts[OpcodeI64Sub] = opcodeCostsStruct.I64Sub - opcodeCosts[OpcodeI64Mul] = opcodeCostsStruct.I64Mul - opcodeCosts[OpcodeI64DivS] = opcodeCostsStruct.I64DivS - opcodeCosts[OpcodeI64DivU] = opcodeCostsStruct.I64DivU - opcodeCosts[OpcodeI64RemS] = opcodeCostsStruct.I64RemS - opcodeCosts[OpcodeI64RemU] = opcodeCostsStruct.I64RemU - opcodeCosts[OpcodeI64And] = opcodeCostsStruct.I64And - opcodeCosts[OpcodeI64Or] = opcodeCostsStruct.I64Or - opcodeCosts[OpcodeI64Xor] = opcodeCostsStruct.I64Xor - opcodeCosts[OpcodeI64Shl] = opcodeCostsStruct.I64Shl - opcodeCosts[OpcodeI64ShrS] = opcodeCostsStruct.I64ShrS - opcodeCosts[OpcodeI64ShrU] = opcodeCostsStruct.I64ShrU - opcodeCosts[OpcodeI64Rotl] = opcodeCostsStruct.I64Rotl - opcodeCosts[OpcodeI64Rotr] = opcodeCostsStruct.I64Rotr - opcodeCosts[OpcodeF32Abs] = opcodeCostsStruct.F32Abs - opcodeCosts[OpcodeF32Neg] = opcodeCostsStruct.F32Neg - opcodeCosts[OpcodeF32Ceil] = opcodeCostsStruct.F32Ceil - opcodeCosts[OpcodeF32Floor] = opcodeCostsStruct.F32Floor - opcodeCosts[OpcodeF32Trunc] = opcodeCostsStruct.F32Trunc - opcodeCosts[OpcodeF32Nearest] = opcodeCostsStruct.F32Nearest - opcodeCosts[OpcodeF32Sqrt] = opcodeCostsStruct.F32Sqrt - opcodeCosts[OpcodeF32Add] = opcodeCostsStruct.F32Add - opcodeCosts[OpcodeF32Sub] = opcodeCostsStruct.F32Sub - opcodeCosts[OpcodeF32Mul] = opcodeCostsStruct.F32Mul - opcodeCosts[OpcodeF32Div] = opcodeCostsStruct.F32Div - opcodeCosts[OpcodeF32Min] = opcodeCostsStruct.F32Min - opcodeCosts[OpcodeF32Max] = opcodeCostsStruct.F32Max - opcodeCosts[OpcodeF32Copysign] = opcodeCostsStruct.F32Copysign - opcodeCosts[OpcodeF64Abs] = opcodeCostsStruct.F64Abs - opcodeCosts[OpcodeF64Neg] = opcodeCostsStruct.F64Neg - opcodeCosts[OpcodeF64Ceil] = opcodeCostsStruct.F64Ceil - opcodeCosts[OpcodeF64Floor] = opcodeCostsStruct.F64Floor - opcodeCosts[OpcodeF64Trunc] = opcodeCostsStruct.F64Trunc - opcodeCosts[OpcodeF64Nearest] = opcodeCostsStruct.F64Nearest - opcodeCosts[OpcodeF64Sqrt] = opcodeCostsStruct.F64Sqrt - opcodeCosts[OpcodeF64Add] = opcodeCostsStruct.F64Add - opcodeCosts[OpcodeF64Sub] = opcodeCostsStruct.F64Sub - opcodeCosts[OpcodeF64Mul] = opcodeCostsStruct.F64Mul - opcodeCosts[OpcodeF64Div] = opcodeCostsStruct.F64Div - opcodeCosts[OpcodeF64Min] = opcodeCostsStruct.F64Min - opcodeCosts[OpcodeF64Max] = opcodeCostsStruct.F64Max - opcodeCosts[OpcodeF64Copysign] = opcodeCostsStruct.F64Copysign - opcodeCosts[OpcodeI32WrapI64] = opcodeCostsStruct.I32WrapI64 - opcodeCosts[OpcodeI32TruncF32S] = opcodeCostsStruct.I32TruncF32S - opcodeCosts[OpcodeI32TruncF32U] = opcodeCostsStruct.I32TruncF32U - opcodeCosts[OpcodeI32TruncF64S] = opcodeCostsStruct.I32TruncF64S - opcodeCosts[OpcodeI32TruncF64U] = opcodeCostsStruct.I32TruncF64U - opcodeCosts[OpcodeI64ExtendI32S] = opcodeCostsStruct.I64ExtendI32S - opcodeCosts[OpcodeI64ExtendI32U] = opcodeCostsStruct.I64ExtendI32U - opcodeCosts[OpcodeI64TruncF32S] = opcodeCostsStruct.I64TruncF32S - opcodeCosts[OpcodeI64TruncF32U] = opcodeCostsStruct.I64TruncF32U - opcodeCosts[OpcodeI64TruncF64S] = opcodeCostsStruct.I64TruncF64S - opcodeCosts[OpcodeI64TruncF64U] = opcodeCostsStruct.I64TruncF64U - opcodeCosts[OpcodeF32ConvertI32S] = opcodeCostsStruct.F32ConvertI32S - opcodeCosts[OpcodeF32ConvertI32U] = opcodeCostsStruct.F32ConvertI32U - opcodeCosts[OpcodeF32ConvertI64S] = opcodeCostsStruct.F32ConvertI64S - opcodeCosts[OpcodeF32ConvertI64U] = opcodeCostsStruct.F32ConvertI64U - opcodeCosts[OpcodeF32DemoteF64] = opcodeCostsStruct.F32DemoteF64 - opcodeCosts[OpcodeF64ConvertI32S] = opcodeCostsStruct.F64ConvertI32S - opcodeCosts[OpcodeF64ConvertI32U] = opcodeCostsStruct.F64ConvertI32U - opcodeCosts[OpcodeF64ConvertI64S] = opcodeCostsStruct.F64ConvertI64S - opcodeCosts[OpcodeF64ConvertI64U] = opcodeCostsStruct.F64ConvertI64U - opcodeCosts[OpcodeF64PromoteF32] = opcodeCostsStruct.F64PromoteF32 - opcodeCosts[OpcodeI32ReinterpretF32] = opcodeCostsStruct.I32ReinterpretF32 - opcodeCosts[OpcodeI64ReinterpretF64] = opcodeCostsStruct.I64ReinterpretF64 - opcodeCosts[OpcodeF32ReinterpretI32] = opcodeCostsStruct.F32ReinterpretI32 - opcodeCosts[OpcodeF64ReinterpretI64] = opcodeCostsStruct.F64ReinterpretI64 - opcodeCosts[OpcodeI32Extend8S] = opcodeCostsStruct.I32Extend8S - opcodeCosts[OpcodeI32Extend16S] = opcodeCostsStruct.I32Extend16S - opcodeCosts[OpcodeI64Extend8S] = opcodeCostsStruct.I64Extend8S - opcodeCosts[OpcodeI64Extend16S] = opcodeCostsStruct.I64Extend16S - opcodeCosts[OpcodeI64Extend32S] = opcodeCostsStruct.I64Extend32S - opcodeCosts[OpcodeI32TruncSatF32S] = opcodeCostsStruct.I32TruncSatF32S - opcodeCosts[OpcodeI32TruncSatF32U] = opcodeCostsStruct.I32TruncSatF32U - opcodeCosts[OpcodeI32TruncSatF64S] = opcodeCostsStruct.I32TruncSatF64S - opcodeCosts[OpcodeI32TruncSatF64U] = opcodeCostsStruct.I32TruncSatF64U - opcodeCosts[OpcodeI64TruncSatF32S] = opcodeCostsStruct.I64TruncSatF32S - opcodeCosts[OpcodeI64TruncSatF32U] = opcodeCostsStruct.I64TruncSatF32U - opcodeCosts[OpcodeI64TruncSatF64S] = opcodeCostsStruct.I64TruncSatF64S - opcodeCosts[OpcodeI64TruncSatF64U] = opcodeCostsStruct.I64TruncSatF64U - opcodeCosts[OpcodeMemoryInit] = opcodeCostsStruct.MemoryInit - opcodeCosts[OpcodeDataDrop] = opcodeCostsStruct.DataDrop - opcodeCosts[OpcodeMemoryCopy] = opcodeCostsStruct.MemoryCopy - opcodeCosts[OpcodeMemoryFill] = opcodeCostsStruct.MemoryFill - opcodeCosts[OpcodeTableInit] = opcodeCostsStruct.TableInit - opcodeCosts[OpcodeElemDrop] = opcodeCostsStruct.ElemDrop - opcodeCosts[OpcodeTableCopy] = opcodeCostsStruct.TableCopy - opcodeCosts[OpcodeTableFill] = opcodeCostsStruct.TableFill - opcodeCosts[OpcodeTableGet] = opcodeCostsStruct.TableGet - opcodeCosts[OpcodeTableSet] = opcodeCostsStruct.TableSet - opcodeCosts[OpcodeTableGrow] = opcodeCostsStruct.TableGrow - opcodeCosts[OpcodeTableSize] = opcodeCostsStruct.TableSize - opcodeCosts[OpcodeAtomicNotify] = opcodeCostsStruct.AtomicNotify - opcodeCosts[OpcodeI32AtomicWait] = opcodeCostsStruct.I32AtomicWait - opcodeCosts[OpcodeI64AtomicWait] = opcodeCostsStruct.I64AtomicWait - opcodeCosts[OpcodeAtomicFence] = opcodeCostsStruct.AtomicFence - opcodeCosts[OpcodeI32AtomicLoad] = opcodeCostsStruct.I32AtomicLoad - opcodeCosts[OpcodeI64AtomicLoad] = opcodeCostsStruct.I64AtomicLoad - opcodeCosts[OpcodeI32AtomicLoad8U] = opcodeCostsStruct.I32AtomicLoad8U - opcodeCosts[OpcodeI32AtomicLoad16U] = opcodeCostsStruct.I32AtomicLoad16U - opcodeCosts[OpcodeI64AtomicLoad8U] = opcodeCostsStruct.I64AtomicLoad8U - opcodeCosts[OpcodeI64AtomicLoad16U] = opcodeCostsStruct.I64AtomicLoad16U - opcodeCosts[OpcodeI64AtomicLoad32U] = opcodeCostsStruct.I64AtomicLoad32U - opcodeCosts[OpcodeI32AtomicStore] = opcodeCostsStruct.I32AtomicStore - opcodeCosts[OpcodeI64AtomicStore] = opcodeCostsStruct.I64AtomicStore - opcodeCosts[OpcodeI32AtomicStore8] = opcodeCostsStruct.I32AtomicStore8 - opcodeCosts[OpcodeI32AtomicStore16] = opcodeCostsStruct.I32AtomicStore16 - opcodeCosts[OpcodeI64AtomicStore8] = opcodeCostsStruct.I64AtomicStore8 - opcodeCosts[OpcodeI64AtomicStore16] = opcodeCostsStruct.I64AtomicStore16 - opcodeCosts[OpcodeI64AtomicStore32] = opcodeCostsStruct.I64AtomicStore32 - opcodeCosts[OpcodeI32AtomicRmwAdd] = opcodeCostsStruct.I32AtomicRmwAdd - opcodeCosts[OpcodeI64AtomicRmwAdd] = opcodeCostsStruct.I64AtomicRmwAdd - opcodeCosts[OpcodeI32AtomicRmw8AddU] = opcodeCostsStruct.I32AtomicRmw8AddU - opcodeCosts[OpcodeI32AtomicRmw16AddU] = opcodeCostsStruct.I32AtomicRmw16AddU - opcodeCosts[OpcodeI64AtomicRmw8AddU] = opcodeCostsStruct.I64AtomicRmw8AddU - opcodeCosts[OpcodeI64AtomicRmw16AddU] = opcodeCostsStruct.I64AtomicRmw16AddU - opcodeCosts[OpcodeI64AtomicRmw32AddU] = opcodeCostsStruct.I64AtomicRmw32AddU - opcodeCosts[OpcodeI32AtomicRmwSub] = opcodeCostsStruct.I32AtomicRmwSub - opcodeCosts[OpcodeI64AtomicRmwSub] = opcodeCostsStruct.I64AtomicRmwSub - opcodeCosts[OpcodeI32AtomicRmw8SubU] = opcodeCostsStruct.I32AtomicRmw8SubU - opcodeCosts[OpcodeI32AtomicRmw16SubU] = opcodeCostsStruct.I32AtomicRmw16SubU - opcodeCosts[OpcodeI64AtomicRmw8SubU] = opcodeCostsStruct.I64AtomicRmw8SubU - opcodeCosts[OpcodeI64AtomicRmw16SubU] = opcodeCostsStruct.I64AtomicRmw16SubU - opcodeCosts[OpcodeI64AtomicRmw32SubU] = opcodeCostsStruct.I64AtomicRmw32SubU - opcodeCosts[OpcodeI32AtomicRmwAnd] = opcodeCostsStruct.I32AtomicRmwAnd - opcodeCosts[OpcodeI64AtomicRmwAnd] = opcodeCostsStruct.I64AtomicRmwAnd - opcodeCosts[OpcodeI32AtomicRmw8AndU] = opcodeCostsStruct.I32AtomicRmw8AndU - opcodeCosts[OpcodeI32AtomicRmw16AndU] = opcodeCostsStruct.I32AtomicRmw16AndU - opcodeCosts[OpcodeI64AtomicRmw8AndU] = opcodeCostsStruct.I64AtomicRmw8AndU - opcodeCosts[OpcodeI64AtomicRmw16AndU] = opcodeCostsStruct.I64AtomicRmw16AndU - opcodeCosts[OpcodeI64AtomicRmw32AndU] = opcodeCostsStruct.I64AtomicRmw32AndU - opcodeCosts[OpcodeI32AtomicRmwOr] = opcodeCostsStruct.I32AtomicRmwOr - opcodeCosts[OpcodeI64AtomicRmwOr] = opcodeCostsStruct.I64AtomicRmwOr - opcodeCosts[OpcodeI32AtomicRmw8OrU] = opcodeCostsStruct.I32AtomicRmw8OrU - opcodeCosts[OpcodeI32AtomicRmw16OrU] = opcodeCostsStruct.I32AtomicRmw16OrU - opcodeCosts[OpcodeI64AtomicRmw8OrU] = opcodeCostsStruct.I64AtomicRmw8OrU - opcodeCosts[OpcodeI64AtomicRmw16OrU] = opcodeCostsStruct.I64AtomicRmw16OrU - opcodeCosts[OpcodeI64AtomicRmw32OrU] = opcodeCostsStruct.I64AtomicRmw32OrU - opcodeCosts[OpcodeI32AtomicRmwXor] = opcodeCostsStruct.I32AtomicRmwXor - opcodeCosts[OpcodeI64AtomicRmwXor] = opcodeCostsStruct.I64AtomicRmwXor - opcodeCosts[OpcodeI32AtomicRmw8XorU] = opcodeCostsStruct.I32AtomicRmw8XorU - opcodeCosts[OpcodeI32AtomicRmw16XorU] = opcodeCostsStruct.I32AtomicRmw16XorU - opcodeCosts[OpcodeI64AtomicRmw8XorU] = opcodeCostsStruct.I64AtomicRmw8XorU - opcodeCosts[OpcodeI64AtomicRmw16XorU] = opcodeCostsStruct.I64AtomicRmw16XorU - opcodeCosts[OpcodeI64AtomicRmw32XorU] = opcodeCostsStruct.I64AtomicRmw32XorU - opcodeCosts[OpcodeI32AtomicRmwXchg] = opcodeCostsStruct.I32AtomicRmwXchg - opcodeCosts[OpcodeI64AtomicRmwXchg] = opcodeCostsStruct.I64AtomicRmwXchg - opcodeCosts[OpcodeI32AtomicRmw8XchgU] = opcodeCostsStruct.I32AtomicRmw8XchgU - opcodeCosts[OpcodeI32AtomicRmw16XchgU] = opcodeCostsStruct.I32AtomicRmw16XchgU - opcodeCosts[OpcodeI64AtomicRmw8XchgU] = opcodeCostsStruct.I64AtomicRmw8XchgU - opcodeCosts[OpcodeI64AtomicRmw16XchgU] = opcodeCostsStruct.I64AtomicRmw16XchgU - opcodeCosts[OpcodeI64AtomicRmw32XchgU] = opcodeCostsStruct.I64AtomicRmw32XchgU - opcodeCosts[OpcodeI32AtomicRmwCmpxchg] = opcodeCostsStruct.I32AtomicRmwCmpxchg - opcodeCosts[OpcodeI64AtomicRmwCmpxchg] = opcodeCostsStruct.I64AtomicRmwCmpxchg - opcodeCosts[OpcodeI32AtomicRmw8CmpxchgU] = opcodeCostsStruct.I32AtomicRmw8CmpxchgU - opcodeCosts[OpcodeI32AtomicRmw16CmpxchgU] = opcodeCostsStruct.I32AtomicRmw16CmpxchgU - opcodeCosts[OpcodeI64AtomicRmw8CmpxchgU] = opcodeCostsStruct.I64AtomicRmw8CmpxchgU - opcodeCosts[OpcodeI64AtomicRmw16CmpxchgU] = opcodeCostsStruct.I64AtomicRmw16CmpxchgU - opcodeCosts[OpcodeI64AtomicRmw32CmpxchgU] = opcodeCostsStruct.I64AtomicRmw32CmpxchgU - opcodeCosts[OpcodeV128Load] = opcodeCostsStruct.V128Load - opcodeCosts[OpcodeV128Store] = opcodeCostsStruct.V128Store - opcodeCosts[OpcodeV128Const] = opcodeCostsStruct.V128Const - opcodeCosts[OpcodeI8x16Splat] = opcodeCostsStruct.I8x16Splat - opcodeCosts[OpcodeI8x16ExtractLaneS] = opcodeCostsStruct.I8x16ExtractLaneS - opcodeCosts[OpcodeI8x16ExtractLaneU] = opcodeCostsStruct.I8x16ExtractLaneU - opcodeCosts[OpcodeI8x16ReplaceLane] = opcodeCostsStruct.I8x16ReplaceLane - opcodeCosts[OpcodeI16x8Splat] = opcodeCostsStruct.I16x8Splat - opcodeCosts[OpcodeI16x8ExtractLaneS] = opcodeCostsStruct.I16x8ExtractLaneS - opcodeCosts[OpcodeI16x8ExtractLaneU] = opcodeCostsStruct.I16x8ExtractLaneU - opcodeCosts[OpcodeI16x8ReplaceLane] = opcodeCostsStruct.I16x8ReplaceLane - opcodeCosts[OpcodeI32x4Splat] = opcodeCostsStruct.I32x4Splat - opcodeCosts[OpcodeI32x4ExtractLane] = opcodeCostsStruct.I32x4ExtractLane - opcodeCosts[OpcodeI32x4ReplaceLane] = opcodeCostsStruct.I32x4ReplaceLane - opcodeCosts[OpcodeI64x2Splat] = opcodeCostsStruct.I64x2Splat - opcodeCosts[OpcodeI64x2ExtractLane] = opcodeCostsStruct.I64x2ExtractLane - opcodeCosts[OpcodeI64x2ReplaceLane] = opcodeCostsStruct.I64x2ReplaceLane - opcodeCosts[OpcodeF32x4Splat] = opcodeCostsStruct.F32x4Splat - opcodeCosts[OpcodeF32x4ExtractLane] = opcodeCostsStruct.F32x4ExtractLane - opcodeCosts[OpcodeF32x4ReplaceLane] = opcodeCostsStruct.F32x4ReplaceLane - opcodeCosts[OpcodeF64x2Splat] = opcodeCostsStruct.F64x2Splat - opcodeCosts[OpcodeF64x2ExtractLane] = opcodeCostsStruct.F64x2ExtractLane - opcodeCosts[OpcodeF64x2ReplaceLane] = opcodeCostsStruct.F64x2ReplaceLane - opcodeCosts[OpcodeI8x16Eq] = opcodeCostsStruct.I8x16Eq - opcodeCosts[OpcodeI8x16Ne] = opcodeCostsStruct.I8x16Ne - opcodeCosts[OpcodeI8x16LtS] = opcodeCostsStruct.I8x16LtS - opcodeCosts[OpcodeI8x16LtU] = opcodeCostsStruct.I8x16LtU - opcodeCosts[OpcodeI8x16GtS] = opcodeCostsStruct.I8x16GtS - opcodeCosts[OpcodeI8x16GtU] = opcodeCostsStruct.I8x16GtU - opcodeCosts[OpcodeI8x16LeS] = opcodeCostsStruct.I8x16LeS - opcodeCosts[OpcodeI8x16LeU] = opcodeCostsStruct.I8x16LeU - opcodeCosts[OpcodeI8x16GeS] = opcodeCostsStruct.I8x16GeS - opcodeCosts[OpcodeI8x16GeU] = opcodeCostsStruct.I8x16GeU - opcodeCosts[OpcodeI16x8Eq] = opcodeCostsStruct.I16x8Eq - opcodeCosts[OpcodeI16x8Ne] = opcodeCostsStruct.I16x8Ne - opcodeCosts[OpcodeI16x8LtS] = opcodeCostsStruct.I16x8LtS - opcodeCosts[OpcodeI16x8LtU] = opcodeCostsStruct.I16x8LtU - opcodeCosts[OpcodeI16x8GtS] = opcodeCostsStruct.I16x8GtS - opcodeCosts[OpcodeI16x8GtU] = opcodeCostsStruct.I16x8GtU - opcodeCosts[OpcodeI16x8LeS] = opcodeCostsStruct.I16x8LeS - opcodeCosts[OpcodeI16x8LeU] = opcodeCostsStruct.I16x8LeU - opcodeCosts[OpcodeI16x8GeS] = opcodeCostsStruct.I16x8GeS - opcodeCosts[OpcodeI16x8GeU] = opcodeCostsStruct.I16x8GeU - opcodeCosts[OpcodeI32x4Eq] = opcodeCostsStruct.I32x4Eq - opcodeCosts[OpcodeI32x4Ne] = opcodeCostsStruct.I32x4Ne - opcodeCosts[OpcodeI32x4LtS] = opcodeCostsStruct.I32x4LtS - opcodeCosts[OpcodeI32x4LtU] = opcodeCostsStruct.I32x4LtU - opcodeCosts[OpcodeI32x4GtS] = opcodeCostsStruct.I32x4GtS - opcodeCosts[OpcodeI32x4GtU] = opcodeCostsStruct.I32x4GtU - opcodeCosts[OpcodeI32x4LeS] = opcodeCostsStruct.I32x4LeS - opcodeCosts[OpcodeI32x4LeU] = opcodeCostsStruct.I32x4LeU - opcodeCosts[OpcodeI32x4GeS] = opcodeCostsStruct.I32x4GeS - opcodeCosts[OpcodeI32x4GeU] = opcodeCostsStruct.I32x4GeU - opcodeCosts[OpcodeF32x4Eq] = opcodeCostsStruct.F32x4Eq - opcodeCosts[OpcodeF32x4Ne] = opcodeCostsStruct.F32x4Ne - opcodeCosts[OpcodeF32x4Lt] = opcodeCostsStruct.F32x4Lt - opcodeCosts[OpcodeF32x4Gt] = opcodeCostsStruct.F32x4Gt - opcodeCosts[OpcodeF32x4Le] = opcodeCostsStruct.F32x4Le - opcodeCosts[OpcodeF32x4Ge] = opcodeCostsStruct.F32x4Ge - opcodeCosts[OpcodeF64x2Eq] = opcodeCostsStruct.F64x2Eq - opcodeCosts[OpcodeF64x2Ne] = opcodeCostsStruct.F64x2Ne - opcodeCosts[OpcodeF64x2Lt] = opcodeCostsStruct.F64x2Lt - opcodeCosts[OpcodeF64x2Gt] = opcodeCostsStruct.F64x2Gt - opcodeCosts[OpcodeF64x2Le] = opcodeCostsStruct.F64x2Le - opcodeCosts[OpcodeF64x2Ge] = opcodeCostsStruct.F64x2Ge - opcodeCosts[OpcodeV128Not] = opcodeCostsStruct.V128Not - opcodeCosts[OpcodeV128And] = opcodeCostsStruct.V128And - opcodeCosts[OpcodeV128AndNot] = opcodeCostsStruct.V128AndNot - opcodeCosts[OpcodeV128Or] = opcodeCostsStruct.V128Or - opcodeCosts[OpcodeV128Xor] = opcodeCostsStruct.V128Xor - opcodeCosts[OpcodeV128Bitselect] = opcodeCostsStruct.V128Bitselect - opcodeCosts[OpcodeI8x16Neg] = opcodeCostsStruct.I8x16Neg - opcodeCosts[OpcodeI8x16AnyTrue] = opcodeCostsStruct.I8x16AnyTrue - opcodeCosts[OpcodeI8x16AllTrue] = opcodeCostsStruct.I8x16AllTrue - opcodeCosts[OpcodeI8x16Shl] = opcodeCostsStruct.I8x16Shl - opcodeCosts[OpcodeI8x16ShrS] = opcodeCostsStruct.I8x16ShrS - opcodeCosts[OpcodeI8x16ShrU] = opcodeCostsStruct.I8x16ShrU - opcodeCosts[OpcodeI8x16Add] = opcodeCostsStruct.I8x16Add - opcodeCosts[OpcodeI8x16AddSaturateS] = opcodeCostsStruct.I8x16AddSaturateS - opcodeCosts[OpcodeI8x16AddSaturateU] = opcodeCostsStruct.I8x16AddSaturateU - opcodeCosts[OpcodeI8x16Sub] = opcodeCostsStruct.I8x16Sub - opcodeCosts[OpcodeI8x16SubSaturateS] = opcodeCostsStruct.I8x16SubSaturateS - opcodeCosts[OpcodeI8x16SubSaturateU] = opcodeCostsStruct.I8x16SubSaturateU - opcodeCosts[OpcodeI8x16MinS] = opcodeCostsStruct.I8x16MinS - opcodeCosts[OpcodeI8x16MinU] = opcodeCostsStruct.I8x16MinU - opcodeCosts[OpcodeI8x16MaxS] = opcodeCostsStruct.I8x16MaxS - opcodeCosts[OpcodeI8x16MaxU] = opcodeCostsStruct.I8x16MaxU - opcodeCosts[OpcodeI8x16Mul] = opcodeCostsStruct.I8x16Mul - opcodeCosts[OpcodeI16x8Neg] = opcodeCostsStruct.I16x8Neg - opcodeCosts[OpcodeI16x8AnyTrue] = opcodeCostsStruct.I16x8AnyTrue - opcodeCosts[OpcodeI16x8AllTrue] = opcodeCostsStruct.I16x8AllTrue - opcodeCosts[OpcodeI16x8Shl] = opcodeCostsStruct.I16x8Shl - opcodeCosts[OpcodeI16x8ShrS] = opcodeCostsStruct.I16x8ShrS - opcodeCosts[OpcodeI16x8ShrU] = opcodeCostsStruct.I16x8ShrU - opcodeCosts[OpcodeI16x8Add] = opcodeCostsStruct.I16x8Add - opcodeCosts[OpcodeI16x8AddSaturateS] = opcodeCostsStruct.I16x8AddSaturateS - opcodeCosts[OpcodeI16x8AddSaturateU] = opcodeCostsStruct.I16x8AddSaturateU - opcodeCosts[OpcodeI16x8Sub] = opcodeCostsStruct.I16x8Sub - opcodeCosts[OpcodeI16x8SubSaturateS] = opcodeCostsStruct.I16x8SubSaturateS - opcodeCosts[OpcodeI16x8SubSaturateU] = opcodeCostsStruct.I16x8SubSaturateU - opcodeCosts[OpcodeI16x8Mul] = opcodeCostsStruct.I16x8Mul - opcodeCosts[OpcodeI16x8MinS] = opcodeCostsStruct.I16x8MinS - opcodeCosts[OpcodeI16x8MinU] = opcodeCostsStruct.I16x8MinU - opcodeCosts[OpcodeI16x8MaxS] = opcodeCostsStruct.I16x8MaxS - opcodeCosts[OpcodeI16x8MaxU] = opcodeCostsStruct.I16x8MaxU - opcodeCosts[OpcodeI32x4Neg] = opcodeCostsStruct.I32x4Neg - opcodeCosts[OpcodeI32x4AnyTrue] = opcodeCostsStruct.I32x4AnyTrue - opcodeCosts[OpcodeI32x4AllTrue] = opcodeCostsStruct.I32x4AllTrue - opcodeCosts[OpcodeI32x4Shl] = opcodeCostsStruct.I32x4Shl - opcodeCosts[OpcodeI32x4ShrS] = opcodeCostsStruct.I32x4ShrS - opcodeCosts[OpcodeI32x4ShrU] = opcodeCostsStruct.I32x4ShrU - opcodeCosts[OpcodeI32x4Add] = opcodeCostsStruct.I32x4Add - opcodeCosts[OpcodeI32x4Sub] = opcodeCostsStruct.I32x4Sub - opcodeCosts[OpcodeI32x4Mul] = opcodeCostsStruct.I32x4Mul - opcodeCosts[OpcodeI32x4MinS] = opcodeCostsStruct.I32x4MinS - opcodeCosts[OpcodeI32x4MinU] = opcodeCostsStruct.I32x4MinU - opcodeCosts[OpcodeI32x4MaxS] = opcodeCostsStruct.I32x4MaxS - opcodeCosts[OpcodeI32x4MaxU] = opcodeCostsStruct.I32x4MaxU - opcodeCosts[OpcodeI64x2Neg] = opcodeCostsStruct.I64x2Neg - opcodeCosts[OpcodeI64x2AnyTrue] = opcodeCostsStruct.I64x2AnyTrue - opcodeCosts[OpcodeI64x2AllTrue] = opcodeCostsStruct.I64x2AllTrue - opcodeCosts[OpcodeI64x2Shl] = opcodeCostsStruct.I64x2Shl - opcodeCosts[OpcodeI64x2ShrS] = opcodeCostsStruct.I64x2ShrS - opcodeCosts[OpcodeI64x2ShrU] = opcodeCostsStruct.I64x2ShrU - opcodeCosts[OpcodeI64x2Add] = opcodeCostsStruct.I64x2Add - opcodeCosts[OpcodeI64x2Sub] = opcodeCostsStruct.I64x2Sub - opcodeCosts[OpcodeI64x2Mul] = opcodeCostsStruct.I64x2Mul - opcodeCosts[OpcodeF32x4Abs] = opcodeCostsStruct.F32x4Abs - opcodeCosts[OpcodeF32x4Neg] = opcodeCostsStruct.F32x4Neg - opcodeCosts[OpcodeF32x4Sqrt] = opcodeCostsStruct.F32x4Sqrt - opcodeCosts[OpcodeF32x4Add] = opcodeCostsStruct.F32x4Add - opcodeCosts[OpcodeF32x4Sub] = opcodeCostsStruct.F32x4Sub - opcodeCosts[OpcodeF32x4Mul] = opcodeCostsStruct.F32x4Mul - opcodeCosts[OpcodeF32x4Div] = opcodeCostsStruct.F32x4Div - opcodeCosts[OpcodeF32x4Min] = opcodeCostsStruct.F32x4Min - opcodeCosts[OpcodeF32x4Max] = opcodeCostsStruct.F32x4Max - opcodeCosts[OpcodeF64x2Abs] = opcodeCostsStruct.F64x2Abs - opcodeCosts[OpcodeF64x2Neg] = opcodeCostsStruct.F64x2Neg - opcodeCosts[OpcodeF64x2Sqrt] = opcodeCostsStruct.F64x2Sqrt - opcodeCosts[OpcodeF64x2Add] = opcodeCostsStruct.F64x2Add - opcodeCosts[OpcodeF64x2Sub] = opcodeCostsStruct.F64x2Sub - opcodeCosts[OpcodeF64x2Mul] = opcodeCostsStruct.F64x2Mul - opcodeCosts[OpcodeF64x2Div] = opcodeCostsStruct.F64x2Div - opcodeCosts[OpcodeF64x2Min] = opcodeCostsStruct.F64x2Min - opcodeCosts[OpcodeF64x2Max] = opcodeCostsStruct.F64x2Max - opcodeCosts[OpcodeI32x4TruncSatF32x4S] = opcodeCostsStruct.I32x4TruncSatF32x4S - opcodeCosts[OpcodeI32x4TruncSatF32x4U] = opcodeCostsStruct.I32x4TruncSatF32x4U - opcodeCosts[OpcodeI64x2TruncSatF64x2S] = opcodeCostsStruct.I64x2TruncSatF64x2S - opcodeCosts[OpcodeI64x2TruncSatF64x2U] = opcodeCostsStruct.I64x2TruncSatF64x2U - opcodeCosts[OpcodeF32x4ConvertI32x4S] = opcodeCostsStruct.F32x4ConvertI32x4S - opcodeCosts[OpcodeF32x4ConvertI32x4U] = opcodeCostsStruct.F32x4ConvertI32x4U - opcodeCosts[OpcodeF64x2ConvertI64x2S] = opcodeCostsStruct.F64x2ConvertI64x2S - opcodeCosts[OpcodeF64x2ConvertI64x2U] = opcodeCostsStruct.F64x2ConvertI64x2U - opcodeCosts[OpcodeV8x16Swizzle] = opcodeCostsStruct.V8x16Swizzle - opcodeCosts[OpcodeV8x16Shuffle] = opcodeCostsStruct.V8x16Shuffle - opcodeCosts[OpcodeV8x16LoadSplat] = opcodeCostsStruct.V8x16LoadSplat - opcodeCosts[OpcodeV16x8LoadSplat] = opcodeCostsStruct.V16x8LoadSplat - opcodeCosts[OpcodeV32x4LoadSplat] = opcodeCostsStruct.V32x4LoadSplat - opcodeCosts[OpcodeV64x2LoadSplat] = opcodeCostsStruct.V64x2LoadSplat - opcodeCosts[OpcodeI8x16NarrowI16x8S] = opcodeCostsStruct.I8x16NarrowI16x8S - opcodeCosts[OpcodeI8x16NarrowI16x8U] = opcodeCostsStruct.I8x16NarrowI16x8U - opcodeCosts[OpcodeI16x8NarrowI32x4S] = opcodeCostsStruct.I16x8NarrowI32x4S - opcodeCosts[OpcodeI16x8NarrowI32x4U] = opcodeCostsStruct.I16x8NarrowI32x4U - opcodeCosts[OpcodeI16x8WidenLowI8x16S] = opcodeCostsStruct.I16x8WidenLowI8x16S - opcodeCosts[OpcodeI16x8WidenHighI8x16S] = opcodeCostsStruct.I16x8WidenHighI8x16S - opcodeCosts[OpcodeI16x8WidenLowI8x16U] = opcodeCostsStruct.I16x8WidenLowI8x16U - opcodeCosts[OpcodeI16x8WidenHighI8x16U] = opcodeCostsStruct.I16x8WidenHighI8x16U - opcodeCosts[OpcodeI32x4WidenLowI16x8S] = opcodeCostsStruct.I32x4WidenLowI16x8S - opcodeCosts[OpcodeI32x4WidenHighI16x8S] = opcodeCostsStruct.I32x4WidenHighI16x8S - opcodeCosts[OpcodeI32x4WidenLowI16x8U] = opcodeCostsStruct.I32x4WidenLowI16x8U - opcodeCosts[OpcodeI32x4WidenHighI16x8U] = opcodeCostsStruct.I32x4WidenHighI16x8U - opcodeCosts[OpcodeI16x8Load8x8S] = opcodeCostsStruct.I16x8Load8x8S - opcodeCosts[OpcodeI16x8Load8x8U] = opcodeCostsStruct.I16x8Load8x8U - opcodeCosts[OpcodeI32x4Load16x4S] = opcodeCostsStruct.I32x4Load16x4S - opcodeCosts[OpcodeI32x4Load16x4U] = opcodeCostsStruct.I32x4Load16x4U - opcodeCosts[OpcodeI64x2Load32x2S] = opcodeCostsStruct.I64x2Load32x2S - opcodeCosts[OpcodeI64x2Load32x2U] = opcodeCostsStruct.I64x2Load32x2U - opcodeCosts[OpcodeI8x16RoundingAverageU] = opcodeCostsStruct.I8x16RoundingAverageU - opcodeCosts[OpcodeI16x8RoundingAverageU] = opcodeCostsStruct.I16x8RoundingAverageU - opcodeCosts[OpcodeLocalAllocate] = opcodeCostsStruct.LocalAllocate - // LocalsUnmetered, MaxMemoryGrow and MaxMemoryGrowDelta are not added to the - // opcodeCosts array; the values will be sent to Wasmer as compilation - // options instead - - return opcodeCosts -} diff --git a/wasmer/wasmerStatic.go b/wasmer/wasmerStatic.go deleted file mode 100644 index a10bf98c0..000000000 --- a/wasmer/wasmerStatic.go +++ /dev/null @@ -1,31 +0,0 @@ -package wasmer - -import "github.com/multiversx/mx-chain-vm-go/executor" - -// SetRkyvSerializationEnabled enables or disables RKYV serialization of instances in Wasmer. -func SetRkyvSerializationEnabled(enabled bool) { - if enabled { - cWasmerInstanceEnableRkyv() - } else { - cWasmerInstanceDisableRkyv() - } -} - -// SetSIGSEGVPassthrough instructs Wasmer to never register a handler for -// SIGSEGV. Only has effect if called before creating the first Wasmer instance -// since the process started. Calling this function after the first Wasmer -// instance will not unregister the signal handler set by Wasmer. -func SetSIGSEGVPassthrough() { - cWasmerSetSIGSEGVPassthrough() -} - -// ForceInstallSighandlers triggers a forced installation of signal handlers in Wasmer 1 -func ForceInstallSighandlers() { - cWasmerForceInstallSighandlers() -} - -// SetOpcodeCosts sets gas costs globally for Wasmer. -func SetOpcodeCosts(opcodeCosts *executor.WASMOpcodeCost) { - opcodeCostsArray := toOpcodeCostsArray(opcodeCosts) - cWasmerSetOpcodeCosts(&opcodeCostsArray) -} diff --git a/wasmer2/libvmexeccapi.dylib b/wasmer2/libvmexeccapi.dylib index 838093808..29ee4cccc 100644 Binary files a/wasmer2/libvmexeccapi.dylib and b/wasmer2/libvmexeccapi.dylib differ diff --git a/wasmer2/libvmexeccapi.h b/wasmer2/libvmexeccapi.h index f4f989a42..1152bc3e5 100644 --- a/wasmer2/libvmexeccapi.h +++ b/wasmer2/libvmexeccapi.h @@ -105,6 +105,10 @@ typedef struct { int64_t (*get_prev_block_round_func_ptr)(void *context); int64_t (*get_prev_block_epoch_func_ptr)(void *context); void (*get_prev_block_random_seed_func_ptr)(void *context, int32_t pointer); + int64_t (*get_round_time_func_ptr)(void *context); + int64_t (*epoch_start_block_time_stamp_func_ptr)(void *context); + int64_t (*epoch_start_block_nonce_func_ptr)(void *context); + int64_t (*epoch_start_block_round_func_ptr)(void *context); void (*finish_func_ptr)(void *context, int32_t pointer, int32_t length); int32_t (*execute_on_same_context_func_ptr)(void *context, int64_t gas_limit, int32_t address_offset, int32_t value_offset, int32_t function_offset, int32_t function_length, int32_t num_arguments, int32_t arguments_length_offset, int32_t data_offset); int32_t (*execute_on_dest_context_func_ptr)(void *context, int64_t gas_limit, int32_t address_offset, int32_t value_offset, int32_t function_offset, int32_t function_length, int32_t num_arguments, int32_t arguments_length_offset, int32_t data_offset); @@ -234,6 +238,10 @@ typedef struct { int32_t (*mbuffer_to_big_int_signed_func_ptr)(void *context, int32_t m_buffer_handle, int32_t big_int_handle); int32_t (*mbuffer_from_big_int_unsigned_func_ptr)(void *context, int32_t m_buffer_handle, int32_t big_int_handle); int32_t (*mbuffer_from_big_int_signed_func_ptr)(void *context, int32_t m_buffer_handle, int32_t big_int_handle); + int64_t (*mbuffer_to_small_int_unsigned_func_ptr)(void *context, int32_t m_buffer_handle); + int64_t (*mbuffer_to_small_int_signed_func_ptr)(void *context, int32_t m_buffer_handle); + void (*mbuffer_from_small_int_unsigned_func_ptr)(void *context, int32_t m_buffer_handle, int64_t value); + void (*mbuffer_from_small_int_signed_func_ptr)(void *context, int32_t m_buffer_handle, int64_t value); int32_t (*mbuffer_to_big_float_func_ptr)(void *context, int32_t m_buffer_handle, int32_t big_float_handle); int32_t (*mbuffer_from_big_float_func_ptr)(void *context, int32_t m_buffer_handle, int32_t big_float_handle); int32_t (*mbuffer_storage_store_func_ptr)(void *context, int32_t key_handle, int32_t source_handle); diff --git a/wasmer2/libvmexeccapi.so b/wasmer2/libvmexeccapi.so index 0eab9f7b6..d8c458d4d 100644 Binary files a/wasmer2/libvmexeccapi.so and b/wasmer2/libvmexeccapi.so differ diff --git a/wasmer2/libvmexeccapi_arm.dylib b/wasmer2/libvmexeccapi_arm.dylib index 9d393c0a9..2956fa234 100644 Binary files a/wasmer2/libvmexeccapi_arm.dylib and b/wasmer2/libvmexeccapi_arm.dylib differ diff --git a/wasmer2/libvmexeccapi_arm.so b/wasmer2/libvmexeccapi_arm.so index f438a9207..5f4e4fff0 100644 Binary files a/wasmer2/libvmexeccapi_arm.so and b/wasmer2/libvmexeccapi_arm.so differ diff --git a/wasmer2/wasmer2Executor.go b/wasmer2/wasmer2Executor.go index 73523f85b..159b0d567 100644 --- a/wasmer2/wasmer2Executor.go +++ b/wasmer2/wasmer2Executor.go @@ -9,7 +9,7 @@ import ( var _ executor.Executor = (*Wasmer2Executor)(nil) -// WasmerExecutor oversees the creation of Wasmer instances and execution. +// Wasmer2Executor oversees the creation of Wasmer instances and execution. type Wasmer2Executor struct { cgoExecutor *cWasmerExecutorT @@ -27,10 +27,10 @@ func CreateExecutor() (*Wasmer2Executor, error) { localPtr := uintptr(unsafe.Pointer(vmHookPointers)) localPtrPtr := unsafe.Pointer(&localPtr) - var c_executor *cWasmerExecutorT + var cExecutor *cWasmerExecutorT var result = cWasmerNewExecutor( - &c_executor, + &cExecutor, localPtrPtr, ) @@ -40,12 +40,12 @@ func CreateExecutor() (*Wasmer2Executor, error) { cWasmerForceInstallSighandlers() - executor := &Wasmer2Executor{ - cgoExecutor: c_executor, + wasmerExecutor := &Wasmer2Executor{ + cgoExecutor: cExecutor, vmHookPointers: vmHookPointers, } - return executor, nil + return wasmerExecutor, nil } // SetOpcodeCosts sets gas costs globally inside the Wasmer executor. @@ -59,7 +59,7 @@ func (wasmerExecutor *Wasmer2Executor) SetOpcodeCosts(wasmOps *executor.WASMOpco } // SetRkyvSerializationEnabled controls a Wasmer flag. -func (wasmerExecutor *Wasmer2Executor) SetRkyvSerializationEnabled(enabled bool) { +func (wasmerExecutor *Wasmer2Executor) SetRkyvSerializationEnabled(_ bool) { } // SetSIGSEGVPassthrough controls a Wasmer flag. @@ -76,7 +76,7 @@ func (wasmerExecutor *Wasmer2Executor) NewInstanceWithOptions( contractCode []byte, options executor.CompilationOptions, ) (executor.Instance, error) { - var c_instance *cWasmerInstanceT + var cInstance *cWasmerInstanceT if len(contractCode) == 0 { return nil, newWrappedError(ErrInvalidBytecode) @@ -85,7 +85,7 @@ func (wasmerExecutor *Wasmer2Executor) NewInstanceWithOptions( cOptions := unsafe.Pointer(&options) var compileResult = cWasmerInstantiateWithOptions( wasmerExecutor.cgoExecutor, - &c_instance, + &cInstance, (*cUchar)(unsafe.Pointer(&contractCode[0])), cUint(len(contractCode)), (*cWasmerCompilationOptions)(cOptions), @@ -95,7 +95,7 @@ func (wasmerExecutor *Wasmer2Executor) NewInstanceWithOptions( return nil, newWrappedError(ErrFailedInstantiation) } - return newInstance(c_instance) + return newInstance(cInstance) } // NewInstanceFromCompiledCodeWithOptions creates a new Wasmer instance from @@ -104,7 +104,7 @@ func (wasmerExecutor *Wasmer2Executor) NewInstanceFromCompiledCodeWithOptions( compiledCode []byte, options executor.CompilationOptions, ) (executor.Instance, error) { - var c_instance *cWasmerInstanceT + var cInstance *cWasmerInstanceT if len(compiledCode) == 0 { return nil, newWrappedError(ErrInvalidBytecode) @@ -113,7 +113,7 @@ func (wasmerExecutor *Wasmer2Executor) NewInstanceFromCompiledCodeWithOptions( cOptions := unsafe.Pointer(&options) var compileResult = cWasmerInstanceFromCache( wasmerExecutor.cgoExecutor, - &c_instance, + &cInstance, (*cUchar)(unsafe.Pointer(&compiledCode[0])), cUint32T(len(compiledCode)), (*cWasmerCompilationOptions)(cOptions), @@ -123,7 +123,7 @@ func (wasmerExecutor *Wasmer2Executor) NewInstanceFromCompiledCodeWithOptions( return nil, newWrappedError(ErrFailedInstantiation) } - return newInstance(c_instance) + return newInstance(cInstance) } // IsInterfaceNil returns true if underlying object is nil diff --git a/wasmer2/wasmer2ImportsCgo.go b/wasmer2/wasmer2ImportsCgo.go index 44bc33019..f85383cba 100644 --- a/wasmer2/wasmer2ImportsCgo.go +++ b/wasmer2/wasmer2ImportsCgo.go @@ -207,6 +207,10 @@ package wasmer2 // extern int32_t w2_mBufferToBigIntSigned(void* context, int32_t mBufferHandle, int32_t bigIntHandle); // extern int32_t w2_mBufferFromBigIntUnsigned(void* context, int32_t mBufferHandle, int32_t bigIntHandle); // extern int32_t w2_mBufferFromBigIntSigned(void* context, int32_t mBufferHandle, int32_t bigIntHandle); +// extern long long w2_mBufferToSmallIntUnsigned(void* context, int32_t mBufferHandle); +// extern long long w2_mBufferToSmallIntSigned(void* context, int32_t mBufferHandle); +// extern void w2_mBufferFromSmallIntUnsigned(void* context, int32_t mBufferHandle, long long value); +// extern void w2_mBufferFromSmallIntSigned(void* context, int32_t mBufferHandle, long long value); // extern int32_t w2_mBufferToBigFloat(void* context, int32_t mBufferHandle, int32_t bigFloatHandle); // extern int32_t w2_mBufferFromBigFloat(void* context, int32_t mBufferHandle, int32_t bigFloatHandle); // extern int32_t w2_mBufferStorageStore(void* context, int32_t keyHandle, int32_t sourceHandle); @@ -480,6 +484,10 @@ func populateCgoFunctionPointers() *cWasmerVmHookPointers { mbuffer_to_big_int_signed_func_ptr: funcPointer(C.w2_mBufferToBigIntSigned), mbuffer_from_big_int_unsigned_func_ptr: funcPointer(C.w2_mBufferFromBigIntUnsigned), mbuffer_from_big_int_signed_func_ptr: funcPointer(C.w2_mBufferFromBigIntSigned), + mbuffer_to_small_int_unsigned_func_ptr: funcPointer(C.w2_mBufferToSmallIntUnsigned), + mbuffer_to_small_int_signed_func_ptr: funcPointer(C.w2_mBufferToSmallIntSigned), + mbuffer_from_small_int_unsigned_func_ptr: funcPointer(C.w2_mBufferFromSmallIntUnsigned), + mbuffer_from_small_int_signed_func_ptr: funcPointer(C.w2_mBufferFromSmallIntSigned), mbuffer_to_big_float_func_ptr: funcPointer(C.w2_mBufferToBigFloat), mbuffer_from_big_float_func_ptr: funcPointer(C.w2_mBufferFromBigFloat), mbuffer_storage_store_func_ptr: funcPointer(C.w2_mBufferStorageStore), @@ -1725,6 +1733,30 @@ func w2_mBufferFromBigIntSigned(context unsafe.Pointer, mBufferHandle int32, big return vmHooks.MBufferFromBigIntSigned(mBufferHandle, bigIntHandle) } +//export w2_mBufferToSmallIntUnsigned +func w2_mBufferToSmallIntUnsigned(context unsafe.Pointer, mBufferHandle int32) int64 { + vmHooks := getVMHooksFromContextRawPtr(context) + return vmHooks.MBufferToSmallIntUnsigned(mBufferHandle) +} + +//export w2_mBufferToSmallIntSigned +func w2_mBufferToSmallIntSigned(context unsafe.Pointer, mBufferHandle int32) int64 { + vmHooks := getVMHooksFromContextRawPtr(context) + return vmHooks.MBufferToSmallIntSigned(mBufferHandle) +} + +//export w2_mBufferFromSmallIntUnsigned +func w2_mBufferFromSmallIntUnsigned(context unsafe.Pointer, mBufferHandle int32, value int64) { + vmHooks := getVMHooksFromContextRawPtr(context) + vmHooks.MBufferFromSmallIntUnsigned(mBufferHandle, value) +} + +//export w2_mBufferFromSmallIntSigned +func w2_mBufferFromSmallIntSigned(context unsafe.Pointer, mBufferHandle int32, value int64) { + vmHooks := getVMHooksFromContextRawPtr(context) + vmHooks.MBufferFromSmallIntSigned(mBufferHandle, value) +} + //export w2_mBufferToBigFloat func w2_mBufferToBigFloat(context unsafe.Pointer, mBufferHandle int32, bigFloatHandle int32) int32 { vmHooks := getVMHooksFromContextRawPtr(context) diff --git a/wasmer2/wasmer2Names.go b/wasmer2/wasmer2Names.go index 501383d0c..ad662058b 100644 --- a/wasmer2/wasmer2Names.go +++ b/wasmer2/wasmer2Names.go @@ -205,6 +205,10 @@ var functionNames = map[string]struct{}{ "mBufferToBigIntSigned": empty, "mBufferFromBigIntUnsigned": empty, "mBufferFromBigIntSigned": empty, + "mBufferToSmallIntUnsigned": empty, + "mBufferToSmallIntSigned": empty, + "mBufferFromSmallIntUnsigned": empty, + "mBufferFromSmallIntSigned": empty, "mBufferToBigFloat": empty, "mBufferFromBigFloat": empty, "mBufferStorageStore": empty,