society-abstract-mcp
Version:
FastMCP server for Abstract token, wallet and NFT operations
675 lines (674 loc) • 129 kB
JavaScript
import { randomBytes } from "ethers";
import * as dotenv from "dotenv";
// Load .env file if it exists (optional for development)
try {
dotenv.config();
} catch (error) {
// .env file is optional - all required variables should come from client
}
// TODO: Replace with your private key value in the .env file.
export const PRIVATE_KEY = process.env.ABSTRACT_PRIVATE_KEY;
export function ensurePrivateKeyIsSet() {
if (!PRIVATE_KEY) {
throw new Error(`ABSTRACT_PRIVATE_KEY is not set in .env file
Run "cp .env.example .env" to create a new .env file
And add a wallet's private key as the value for ABSTRACT_PRIVATE_KEY in the .env file.`);
}
}
export const RPC_URL = "https://api.testnet.abs.xyz";
export const RANDOM_SALT = randomBytes(32);
// MyContract.sol
export const MY_CONTRACT_ABI = [
{
inputs: [],
name: "sayHello",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "pure",
type: "function",
},
];
export const MY_CONTRACT_BYTECODE = "0x0000000100200190000000190000c13d00000000020100190000000b00200198000000230000613d000000000101043b0000000c011001970000000d0010009c000000230000c13d0000000001000416000000000001004b000000230000c13d000000c001000039000000400010043f0000000c01000039000000800010043f0000000e02000041000000a00020043f0000002003000039000000c00030043f000000e00010043f000001000020043f0000010c0000043f0000000f01000041000000260001042e0000008001000039000000400010043f0000000001000416000000000001004b000000230000c13d0000002001000039000001000010044300000120000004430000000a01000041000000260001042e000000000100001900000027000104300000002500000432000000260001042e0000002700010430000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000fffffffc000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ef5fb05b0000000000000000000000000000000000000000000000000000000048656c6c6f20576f726c642100000000000000000000000000000000000000000000000000000000000000000000000000000060000000c000000000000000004ce5de3dbbf99244a266cf109b36e8198e27ad73ba60d78630185800495cf0d1";
// MyFactory.sol
export const MY_CONTRACT_FACTORY_ABI = [
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "myContractAddress",
type: "address",
},
],
name: "MyContractCreated",
type: "event",
},
{
inputs: [
{
internalType: "bytes32",
name: "salt",
type: "bytes32",
},
],
name: "create2MyContract",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "salt",
type: "bytes32",
},
],
name: "create2MyContractAssembly",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "createMyContract",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "createMyContractAssembly",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
];
export const MY_CONTRACT_FACTORY_BYTECODE = "0x000200000000000200000000030100190000006003300270000000410330019700010000003103550000008004000039000000400040043f0000000100200190000000310000c13d000000040030008c000000f90000413d000000000201043b000000e002200270000000430020009c000000390000213d000000460020009c0000005c0000613d000000470020009c000000f90000c13d000000240030008c000000f90000413d0000000002000416000000000002004b000000f90000c13d0000000401100370000000000101043b0000004802000041000000a40020043f00000000020004140000004903000041000000800030043f000000840010043f0000006001000039000000c40010043f000000e40000043f000000410020009c0000004102008041000000c0012002100000004f011001c70000800602000039010000fb0000040f0000000100200190000000ad0000613d000000000101043b000000000001004b000000dd0000c13d00000001010003670000000002000031000000b20000013d0000000001000416000000000001004b000000f90000c13d0000002001000039000001000010044300000120000004430000004201000041000001010001042e000000440020009c000000770000613d000000450020009c000000f90000c13d000000240030008c000000f90000413d0000000002000416000000000002004b000000f90000c13d0000000401100370000000000101043b0000014002000039000000400020043f0000008402000039000000800020043f0000004802000041000000c40020043f00000000020004140000004903000041000000a00030043f000000a40010043f0000006001000039000000e40010043f000001040000043f000000410020009c0000004102008041000000c0012002100000004a011001c70000800602000039010000fb0000040f0000000100200190000000d20000613d000000000101043b0000004b01100197000000d60000013d0000000001000416000000000001004b000000f90000c13d0000014001000039000000400010043f0000008401000039000000800010043f0000004801000041000000c40010043f00000000010004140000004e02000041000000a00020043f000000a40000043f0000006002000039000000e40020043f000001040000043f000000410010009c0000004101008041000000c0011002100000004a011001c70000800602000039010000fb0000040f0000000100200190000000910000613d000000000101043b0000004b01100197000000950000013d0000000001000416000000000001004b000000f90000c13d0000004801000041000000a40010043f00000000010004140000004e02000041000000800020043f000000840000043f0000006002000039000000c40020043f000000e40000043f000000410010009c0000004101008041000000c0011002100000004f011001c70000800602000039010000fb0000040f00000001002001900000009c0000613d000000000101043b000000000001004b000000e50000c13d00000001010003670000000002000031000000a10000013d00010000000103550000006001100270000000410010019d0000000001000019000000400200043d0000000000120435000000410020009c000000410200804100000040012002100000000002000414000000ec0000013d000100000001035500000000020100190000006002200270000000410020019d000000410220019700000050052001980000001f0620018f000000400300043d0000000004530019000000bd0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000000a80000c13d000000bd0000013d000100000001035500000000020100190000006002200270000000410020019d000000410220019700000050052001980000001f0620018f000000400300043d0000000004530019000000bd0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000000b90000c13d000000000006004b000000ca0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000410020009c00000041020080410000006001200210000000410030009c00000041030080410000004002300210000000000112019f000001020001043000010000000103550000006001100270000000410010019d0000000001000019000000400200043d0000000000120435000000410020009c000000410200804100000040012002100000000002000414000000ec0000013d0000004b01100197000000400200043d0000000000120435000000410020009c000000410200804100000040012002100000000002000414000000ec0000013d0000004b01100197000000400200043d0000000000120435000000410020009c000000410200804100000040012002100000000002000414000000410020009c0000004102008041000000c002200210000000000112019f0000004c011001c70000800d0200003900000001030000390000004d04000041010000fb0000040f0000000100200190000000f90000613d0000000001000019000001010001042e00000000010000190000010200010430000000fe002104210000000102000039000000000001042d0000000002000019000000000001042d0000010000000432000001010001042e0000010200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000446ca70800000000000000000000000000000000000000000000000000000000446ca70900000000000000000000000000000000000000000000000000000000c304ac2a000000000000000000000000000000000000000000000000000000002e956d520000000000000000000000000000000000000000000000000000000035555b1a010000111d07ecf7f8b5ccd57677b0062953fd17e414a7087a7ddb6fed1e45bc3cda33511d41a8a5431b1770c5bc0ddd62e1cd30555d16659b89c0d60f4f9f570200000000000000000000000000000000000084000000a00000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff02000000000000000000000000000000000000200000000000000000000000007646582a38471c5eaa1f8b89e3c40d6296c0bc85a30adee4cf5b30a803bc96ba9c4d535bdea7cd8a978f128b93471df48c7dbab89d703809115bdc118c235bfd0200000000000000000000000000000000000084000000800000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000043b8ee53457ffd0487227d2009bfec4df4e1d5055b5342e22c04ade094c89d81";
// MyContract.sol
export const ACCOUNT_ABI = [
{
inputs: [
{
internalType: "address",
name: "_owner",
type: "address",
},
],
stateMutability: "nonpayable",
type: "constructor",
},
{
stateMutability: "nonpayable",
type: "fallback",
},
{
inputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
{
components: [
{
internalType: "uint256",
name: "txType",
type: "uint256",
},
{
internalType: "uint256",
name: "from",
type: "uint256",
},
{
internalType: "uint256",
name: "to",
type: "uint256",
},
{
internalType: "uint256",
name: "gasLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "gasPerPubdataByteLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "maxFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "maxPriorityFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "paymaster",
type: "uint256",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "value",
type: "uint256",
},
{
internalType: "uint256[4]",
name: "reserved",
type: "uint256[4]",
},
{
internalType: "bytes",
name: "data",
type: "bytes",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
{
internalType: "bytes32[]",
name: "factoryDeps",
type: "bytes32[]",
},
{
internalType: "bytes",
name: "paymasterInput",
type: "bytes",
},
{
internalType: "bytes",
name: "reservedDynamic",
type: "bytes",
},
],
internalType: "struct Transaction",
name: "_transaction",
type: "tuple",
},
],
name: "executeTransaction",
outputs: [],
stateMutability: "payable",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "uint256",
name: "txType",
type: "uint256",
},
{
internalType: "uint256",
name: "from",
type: "uint256",
},
{
internalType: "uint256",
name: "to",
type: "uint256",
},
{
internalType: "uint256",
name: "gasLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "gasPerPubdataByteLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "maxFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "maxPriorityFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "paymaster",
type: "uint256",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "value",
type: "uint256",
},
{
internalType: "uint256[4]",
name: "reserved",
type: "uint256[4]",
},
{
internalType: "bytes",
name: "data",
type: "bytes",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
{
internalType: "bytes32[]",
name: "factoryDeps",
type: "bytes32[]",
},
{
internalType: "bytes",
name: "paymasterInput",
type: "bytes",
},
{
internalType: "bytes",
name: "reservedDynamic",
type: "bytes",
},
],
internalType: "struct Transaction",
name: "_transaction",
type: "tuple",
},
],
name: "executeTransactionFromOutside",
outputs: [],
stateMutability: "payable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "_hash",
type: "bytes32",
},
{
internalType: "bytes",
name: "_signature",
type: "bytes",
},
],
name: "isValidSignature",
outputs: [
{
internalType: "bytes4",
name: "magic",
type: "bytes4",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "owner",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
{
components: [
{
internalType: "uint256",
name: "txType",
type: "uint256",
},
{
internalType: "uint256",
name: "from",
type: "uint256",
},
{
internalType: "uint256",
name: "to",
type: "uint256",
},
{
internalType: "uint256",
name: "gasLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "gasPerPubdataByteLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "maxFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "maxPriorityFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "paymaster",
type: "uint256",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "value",
type: "uint256",
},
{
internalType: "uint256[4]",
name: "reserved",
type: "uint256[4]",
},
{
internalType: "bytes",
name: "data",
type: "bytes",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
{
internalType: "bytes32[]",
name: "factoryDeps",
type: "bytes32[]",
},
{
internalType: "bytes",
name: "paymasterInput",
type: "bytes",
},
{
internalType: "bytes",
name: "reservedDynamic",
type: "bytes",
},
],
internalType: "struct Transaction",
name: "_transaction",
type: "tuple",
},
],
name: "payForTransaction",
outputs: [],
stateMutability: "payable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
{
components: [
{
internalType: "uint256",
name: "txType",
type: "uint256",
},
{
internalType: "uint256",
name: "from",
type: "uint256",
},
{
internalType: "uint256",
name: "to",
type: "uint256",
},
{
internalType: "uint256",
name: "gasLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "gasPerPubdataByteLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "maxFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "maxPriorityFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "paymaster",
type: "uint256",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "value",
type: "uint256",
},
{
internalType: "uint256[4]",
name: "reserved",
type: "uint256[4]",
},
{
internalType: "bytes",
name: "data",
type: "bytes",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
{
internalType: "bytes32[]",
name: "factoryDeps",
type: "bytes32[]",
},
{
internalType: "bytes",
name: "paymasterInput",
type: "bytes",
},
{
internalType: "bytes",
name: "reservedDynamic",
type: "bytes",
},
],
internalType: "struct Transaction",
name: "_transaction",
type: "tuple",
},
],
name: "prepareForPaymaster",
outputs: [],
stateMutability: "payable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
{
internalType: "bytes32",
name: "_suggestedSignedHash",
type: "bytes32",
},
{
components: [
{
internalType: "uint256",
name: "txType",
type: "uint256",
},
{
internalType: "uint256",
name: "from",
type: "uint256",
},
{
internalType: "uint256",
name: "to",
type: "uint256",
},
{
internalType: "uint256",
name: "gasLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "gasPerPubdataByteLimit",
type: "uint256",
},
{
internalType: "uint256",
name: "maxFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "maxPriorityFeePerGas",
type: "uint256",
},
{
internalType: "uint256",
name: "paymaster",
type: "uint256",
},
{
internalType: "uint256",
name: "nonce",
type: "uint256",
},
{
internalType: "uint256",
name: "value",
type: "uint256",
},
{
internalType: "uint256[4]",
name: "reserved",
type: "uint256[4]",
},
{
internalType: "bytes",
name: "data",
type: "bytes",
},
{
internalType: "bytes",
name: "signature",
type: "bytes",
},
{
internalType: "bytes32[]",
name: "factoryDeps",
type: "bytes32[]",
},
{
internalType: "bytes",
name: "paymasterInput",
type: "bytes",
},
{
internalType: "bytes",
name: "reservedDynamic",
type: "bytes",
},
],
internalType: "struct Transaction",
name: "_transaction",
type: "tuple",
},
],
name: "validateTransaction",
outputs: [
{
internalType: "bytes4",
name: "magic",
type: "bytes4",
},
],
stateMutability: "payable",
type: "function",
},
{
stateMutability: "payable",
type: "receive",
},
];
export const ACCOUNT_BYTECODE = "0x0014000000000002000b00000000000200000000030100190000006003300270000005380030019d0000053803300197001300000031035500020000003103550003000000310355000400000031035500050000003103550006000000310355000700000031035500080000003103550009000000310355000a000000310355000b000000310355000c000000310355000d000000310355000e000000310355000f0000003103550010000000310355001100000031035500120000000103550000000100200190000000340000c13d0000008002000039000000400020043f000000040030008c000000600000413d000000000201043b000000e0022002700000053e0020009c0000006e0000a13d0000053f0020009c0000007c0000213d000005420020009c000001170000613d000005430020009c000000620000c13d000000000103001914db05d50000040f000800000001001d0000000001000411000080010010008c0000000001000039000000010100603914db06750000040f000000080100002914db06cd0000040f0000000001000019000014dc0001042e0000000002000416000000000002004b000003a60000c13d0000001f0230003900000539022001970000008002200039000000400020043f0000001f0430018f0000053a053001980000008002500039000000450000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000026004b000000410000c13d000000000004004b000000520000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c000003a60000413d000000800100043d0000053b0010009c000003a60000213d000000000200041a0000053c02200197000000000112019f000000000010041b0000002001000039000001000010044300000120000004430000053d01000041000014dc0001042e000000000003004b000002250000613d0000000001000416000000000001004b000003a60000c13d0000000001000411000080010010008c000002250000c13d0000055b01000041000000000010043f0000000101000039000000040010043f0000055c01000041000014dd00010430000005440020009c000000f70000613d000005450020009c000001750000613d000005460020009c000000620000c13d0000000001000416000000000001004b000003a60000c13d000000000100041a0000053b01100197000000800010043f0000057801000041000014dc0001042e000005400020009c000001590000613d000005410020009c000000620000c13d000000240030008c000003a60000413d0000000402100370000000000502043b000005470050009c000003a60000213d00000004045000390000000002430049000005480020009c000003a60000213d000002600020008c000003a60000413d000800000004001d00000000020004140000054903000041000000a00030043f000600000005001d000701040050003d0000000701100360000000000101043b000000a40010043f0000002401000039000000800010043f000000e001000039000000400010043f000000c0012002100000054a011001970000054b011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001914db14cc0000040f001300000001035500000000030100190000006003300270000105380030019d00000538053001970000001f0350003900000539063001970000003f036000390000054c07300197000000400300043d0000000004370019000000000074004b00000000070000390000000107004039000005470040009c000004f10000213d0000000100700190000004f10000c13d000000400040043f0000000004530436000000000006004b000000c00000613d0000000006640019000000000700003100000012077003670000000008040019000000007907043c0000000008980436000000000068004b000000bc0000c13d0000001f0650018f0000053a075001980000000005740019000000ca0000613d000000000801034f0000000009040019000000008a08043c0000000009a90436000000000059004b000000c60000c13d000000000006004b000000d70000613d000000000171034f0000000306600210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f00000000001504350000000100200190000002040000613d000000080100002914db07c20000040f0000000702000029000000200720008a0000001202000367000000000372034f000000000303043b0000053b00300198000002370000c13d000000800370008a000000000432034f000000400370008a000000000532034f000000000404043b000000000505043b00000000064500a9000000000005004b000000ee0000613d00000000055600d9000000000045004b000002310000c13d0000008003300039000000000232034f000000000202043b000000000062001a000002310000413d000500000007001d000400000001001d00000000016200190000023d0000013d000000440030008c000003a60000413d0000000002000416000000000002004b000003a60000c13d0000002402100370000000000402043b000005470040009c000003a60000213d0000002302400039000000000032004b000003a60000813d0000000402400039000000000121034f000000000201043b000000240140003914db059d0000040f00000004020000390000001202200367000000000202043b00000000030100190000000001020019000000000203001914db05e80000040f0000056001100197000000400200043d0000000000120435000005380020009c000005380200804100000040012002100000057d011001c7000014dc0001042e000000640030008c000003a60000413d0000004402100370000000000202043b000005470020009c000003a60000213d00000004042000390000000005430049000005480050009c000003a60000213d000002600050008c000003a60000413d0000000006000411000080010060008c000001f80000c13d0000022402200039000000000621034f000000000606043b0000001f0550008a0000054f076001970000054f08500197000000000987013f000000000087004b00000000070000190000054f07004041000000000056004b00000000050000190000054f050080410000054f0090009c000000000705c019000000000007004b000003a60000c13d0000000005460019000000000451034f000000000404043b000005470040009c000003a60000213d000000000643004900000020055000390000054f076001970000054f08500197000000000978013f000000000078004b00000000070000190000054f07004041000000000065004b00000000060000190000054f060020410000054f0090009c000000000706c019000000000007004b000003a60000c13d000000030040008c0000033a0000213d0000055601000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000057601000041000000c40010043f0000057701000041000000e40010043f0000057301000041000014dd00010430000000640030008c000003a60000413d0000004402100370000000000202043b000005470020009c000003a60000213d0000000003230049000000040330008a000005480030009c000003a60000213d000002600030008c000003a60000413d0000000003000411000080010030008c000001f80000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000002004b0000020d0000c13d00000000010004150000000a0110008a00080005001002180000000001000414000002180000013d000000640030008c000003a60000413d0000004402100370000000000402043b000005470040009c000003a60000213d00000004054000390000000002530049000005480020009c000003a60000213d000002600020008c000003a60000413d0000002402100370000000000302043b0000000002000411000080010020008c000001f80000c13d000800000003001d000700000005001d00000000020004140000054903000041000000a00030043f000600000004001d0000010403400039000000000131034f000000000101043b000000a40010043f0000002401000039000000800010043f000000e001000039000000400010043f000000c0012002100000054a011001970000054b011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001914db14cc0000040f001300000001035500000000030100190000006003300270000105380030019d00000538053001970000001f0350003900000539063001970000003f036000390000054c07300197000000400300043d0000000004370019000000000074004b00000000070000390000000107004039000005470040009c000004f10000213d0000000100700190000004f10000c13d000000400040043f0000000004530436000000000006004b000001bb0000613d0000000006640019000000000700003100000012077003670000000008040019000000007907043c0000000008980436000000000068004b000001b70000c13d0000001f0650018f0000053a075001980000000005740019000001c50000613d000000000801034f0000000009040019000000008a08043c0000000009a90436000000000059004b000001c10000c13d000000000006004b000001d20000613d000000000171034f0000000306600210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f00000000001504350000000100200190000002040000613d0000000801000029000000000001004b000001d90000c13d000000070100002914db07c20000040f000800000001001d000000070100002914db14840000040f0000000002000410000b00000002001d000500000001001d0000800a01000039000000240300003900000000040004150000000b0440008a00000005044002100000054d0200004114db14b50000040f000000050010006b0000000001000039000000010100a03914db068c0000040f0000000601000029000001e402100039000000070100002914db06a30000040f000000000300003114db059d0000040f0000000002010019000000080100002914db05e80000040f00000560011001970000057b0010009c00000000010000190000057c01006041000001100000013d0000055601000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f0000057901000041000000c40010043f0000057a01000041000000e40010043f0000057301000041000014dd00010430000005380040009c000005380400804100000040014002100000000002030433000005380020009c00000538020080410000006002200210000000000112019f000014dd0001043000000000031200a900000000022300d9000000000012004b000002310000c13d0000000002000415000000090220008a00000005022002100000000001000414000000000003004b000002620000c13d000800000002001d000005380010009c0000053801008041000000c001100210000080010200003914db14cc0000040f000000080300002900130000000103550000006001100270000105380010019d000000050130027000000001012001950000000100200190000002270000613d0000000001000019000014dc0001042e000000400100043d00000064021000390000055e03000041000000000032043500000044021000390000055f03000041000000000032043500000024021000390000002503000039000002570000013d0000055b01000041000000000010043f0000001101000039000000040010043f0000055c01000041000014dd00010430000500000007001d000400000001001d00000006010000290000012401100039000000000112034f000000000101043b000700000001001d0000054d010000410000000000100443000000000100041000000004001004430000000001000414000005380010009c0000053801008041000000c0011002100000054e011001c70000800a0200003914db14d10000040f00000001002001900000059a0000613d000000000101043b000000070010006b0000026e0000a13d000000400100043d00000064021000390000055803000041000000000032043500000044021000390000055903000041000000000032043500000024021000390000002203000039000000000032043500000556020000410000000000210435000000040210003900000020030000390000000000320435000005380010009c000005380100804100000040011002100000055a011001c7000014dd00010430000005380010009c0000053801008041000000c0011002100000055d011001c700008009020000390000800104000039000000000500001914db14cc0000040f0000000003000415000000090330008a00000005033002100000021e0000013d000000050100002900000100021000390000001201000367000000000221034f000000000302043b0000000002000031000000060420006a000000230440008a0000054f054001970000054f06300197000000000756013f000000000056004b00000000050000190000054f05004041000000000043004b00000000040000190000054f040080410000054f0070009c000000000504c019000000000005004b0000000804000029000003a60000c13d0000000003430019000000000431034f000000000504043b000005470050009c000003a60000213d000000000452004900000020063000390000054f034001970000054f07600197000000000837013f000000000037004b00000000030000190000054f03004041000000000046004b00000000040000190000054f040020410000054f0080009c000000000304c019000000000003004b000003a60000c13d0000001f035000390000057e033001970000003f033000390000057e04300197000000400300043d0000000004430019000000000034004b00000000070000390000000107004039000005470040009c000004f10000213d0000000100700190000004f10000c13d000000400040043f00000000045304360000000007650019000000000027004b000003a60000213d000000000761034f0000057e085001980000001f0950018f0000000006840019000002b50000613d000000000a07034f000000000b04001900000000ac0a043c000000000bcb043600000000006b004b000002b10000c13d000000000009004b000002c20000613d000000000787034f0000000308900210000000000906043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f0000000000760435000000000554001900000000000504350000000005030433000000410050008c000002d90000613d000000400300043d000005500030009c000004f10000213d0000008005300039000000400050043f00000041040000390000000004430436000000000121034f0000000002040019000000001601043c0000000002620436000000000052004b000002d00000c13d00000060013000390000000002010433000005510220019700000552022001c7000000000021043500000041013000390000000001010433000000400230003900000000050204330000000002040433000000400300043d000000400430003900000000002404350000006002300039000700000005001d000000000052043500000004020000290000000002230436000000ff0110018f000600000001001d0000000000120435000000000000043f000005380030009c000005380300804100000040013002100000000002000414000005380020009c0000053802008041000000c002200210000000000112019f00000553011001c7000000010200003914db14d10000040f000000000301001900000060033002700000053803300197000000200030008c000000200400003900000000040340190000001f0540018f0000002004400190000003040000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000003000000c13d000000000005004b000003110000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00130000000103550000000100200190000003d40000613d000000000100041a0000053b01100197000000000200043d0000053b02200197000000000012004b0000000001000039000000010100c039000000000002004b0000000002000039000000010200c039000000000112016f0000000100100190000003290000c13d0000000701000029000005540010009c000003290000213d00000006010000290000001d0110008a0000057f0010009c000000300000213d000000400100043d00000044021000390000055503000041000000000032043500000024021000390000000d03000039000000000032043500000556020000410000000000210435000000040210003900000020030000390000000000320435000005380010009c0000053801008041000000400110021000000557011001c7000014dd00010430000000000651034f000000000606043b0000056006600197000005610060009c0000034b0000613d000005620060009c000002250000613d0000055601000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000057401000041000000c40010043f0000057501000041000014dd00010430000000430040008c000003590000213d0000055601000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000057101000041000000c40010043f0000057201000041000000e40010043f0000057301000041000014dd000104300000000404500039000000000541034f000000000505043b000800000005001d0000053b0050009c000003a60000213d000001400220008a000000000221034f0000002004400039000000000441034f000000000404043b000700000004001d000000000202043b0000056304000041000000800040043f00000000040004100000053b04400197000500000004001d000000840040043f0000053b02200197000600000002001d000000a40020043f00000000020004140000000804000029000000040040008c000003790000c13d000000000131034f0000000103000031000000200030008c00000020040000390000000004034019000003a00000013d000005380020009c0000053802008041000000c00120021000000564011001c7000000080200002914db14d10000040f000000000301001900000060033002700000053803300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000000800a0000390000038f0000613d000000000801034f000000008908043c000000000a9a043600000000005a004b0000038b0000c13d000000000006004b0000039c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00130000000103550000000100200190000003c80000613d0000001f02400039000000600420018f00000080024001bf000000400020043f000000200030008c000003a80000813d0000000001000019000014dd00010430000000800500043d000000070050006c000002250000813d000000a00540003900000565060000410000000000650435000000a40640003900000006070000290000000000760435000000c4064000390000000000060435000000440600003900000000006204350000014006400039000000400060043f00000120074000390000056606000041000300000007001d000000000067043500000100064001bf0000002004000039000200000006001d0000000000460435000000000402043300000000020004140000000806000029000000040060008c000003f20000c13d000005470030009c000004f10000213d0000000102000039000004070000013d0000001f0530018f0000053a06300198000000400200043d0000000004620019000003df0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000003cf0000c13d000003df0000013d0000001f0530018f0000053a06300198000000400200043d0000000004620019000003df0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000003db0000c13d000000000005004b000003ec0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000005380020009c00000538020080410000004002200210000000000112019f000014dd000104300000004001500210000005380040009c00000538040080410000006003400210000000000113019f000005380020009c0000053802008041000000c002200210000000000121019f000000080200002914db14cc0000040f000000010220018f001300000001035500000000030100190000006003300270000105380030019d0000053803300198000004070000c13d000400600000003d000100800000003d000004300000013d0000001f0430003900000567044001970000003f044000390000056805400197000000400400043d000400000004001d0000000004450019000000000054004b00000000050000390000000105004039000005470040009c000004f10000213d0000000100500190000004f10000c13d000000400040043f000000040400002900000000063404360000057e043001980000001f0530018f000100000006001d0000000003460019000004230000613d000000000601034f0000000107000029000000006806043c0000000007870436000000000037004b0000041f0000c13d000000000005004b000004300000613d000000000141034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000004010000290000000001010433000000000002004b000004520000c13d000000000001004b0000046b0000c13d000000400400043d000800000004001d0000055601000041000000000014043500000004014000390000002002000039000000000021043500000002010000290000000003010433000700000003001d000000240140003900000000003104350000004402400039000000030100002914db14a70000040f00000007010000290000001f011000390000057e011001970000004401100039000005380010009c00000538010080410000000802000029000005380020009c000005380200804100000060011002100000004002200210000000000121019f000014dd00010430000000000001004b000004780000c13d00000569010000410000000000100443000000080100002900000004001004430000000001000414000005380010009c0000053801008041000000c0011002100000054e011001c7000080020200003914db14d10000040f00000001002001900000059a0000613d000000000101043b000000000001004b000004740000c13d000000400100043d00000044021000390000057003000041000000000032043500000024021000390000001d030000390000032f0000013d0000000102000029000005380020009c00000538020080410000004002200210000005380010009c00000538010080410000006001100210000000000121019f000014dd0001043000000004010000290000000001010433000000000001004b0000048f0000613d000005480010009c000003a60000213d000000200010008c000003a60000413d00000001010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000003a60000c13d000000000001004b0000048f0000c13d000000400100043d00000064021000390000056e03000041000000000032043500000044021000390000056f03000041000000000032043500000024021000390000002a03000039000002570000013d000000400300043d00000024013000390000000602000029000000000021043500000563010000410000000000130435000400000003001d00000004013000390000000502000029000000000021043500000000010004140000000802000029000000040020008c000004a20000c13d0000000103000031000000200030008c00000020040000390000000004034019000004ce0000013d0000000402000029000005380020009c00000538020080410000004002200210000005380010009c0000053801008041000000c001100210000000000121019f0000056a011001c7000000080200002914db14d10000040f000000000301001900000060033002700000053803300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000405700029000004bd0000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b000004b90000c13d000000000006004b000004ca0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00130000000103550000000100200190000004f70000613d0000001f01400039000000600210018f0000000401200029000000000021004b00000000020000390000000102004039000005470010009c000004f10000213d0000000100200190000004f10000c13d000000400010043f000000200030008c000003a60000413d0000004404100039000000240510003900000004020000290000000002020433000000000002004b000005030000c13d000000200210003900000565060000410000000000620435000000060600002900000000006504350000000705000029000000000054043500000044040000390000000000410435000005500010009c000004f10000213d0000008004100039000700000004001d000000400040043f0000056d0010009c0000050f0000a13d0000055b01000041000000000010043f0000004101000039000000040010043f0000055c01000041000014dd000104300000001f0530018f0000053a06300198000000400200043d0000000004620019000003df0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000004fe0000c13d000003df0000013d00000556020000410000000000210435000000040210003900000020030000390000000000320435000000360200003900000000002504350000056b02000041000000000024043500000064021000390000056c030000410000025c0000013d000000c004100039000000400040043f000000200400003900000007050000290000000000450435000000a0051000390000056604000041000500000005001d0000000000450435000000000401043300000000010004140000000805000029000000040050008c000005210000c13d000005470030009c000004f10000213d0000000102000039000005370000013d000005380020009c00000538020080410000004002200210000005380040009c00000538040080410000006003400210000000000223019f000005380010009c0000053801008041000000c001100210000000000112019f000000080200002914db14cc0000040f000000010220018f00130000000103550000006001100270000105380010019d0000053803100198000005370000c13d000600600000003d000400800000003d000005610000013d0000001f0130003900000567011001970000003f011000390000056804100197000000400100043d000600000001001d0000000001140019000000000041004b00000000040000390000000104004039000005470010009c000004f10000213d0000000100400190000004f10000c13d000000400010043f000000060100002900000000053104360000057e043001980000001f0330018f000400000005001d00000000014500190000001305000367000005540000613d000000000605034f0000000407000029000000006806043c0000000007870436000000000017004b000005500000c13d000000000003004b000005610000613d000000000445034f0000000303300210000000000501043300000000053501cf000000000535022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000353019f000000000031043500000006010000290000000001010433000000000002004b000005760000c13d000000000001004b0000059b0000c13d000000400400043d000800000004001d0000055601000041000000000014043500000004014000390000002002000039000000000021043500000007010000290000000003010433000700000003001d0000002401400039000000000031043500000044024000390000000501000029000004440000013d000000000001004b0000058c0000c13d00000569010000410000000000100443000000080100002900000004001004430000000001000414000005380010009c0000053801008041000000c0011002100000