@subasshrestha/zebec-wormhole-sdk
Version:
This sdk can be use to transfer assets across chains and to interact with the Zebec's xchain bridge smart contracts for passing message from EVM chain to solana specially to utilize the features of Zebec Streaming and Zebec Multisig Streaming protocol.
1,187 lines (1,185 loc) • 59.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Messenger__factory = void 0;
var _ethers = require("ethers");
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
const _abi = [{
inputs: [{
internalType: "address",
name: "wormholeAddress",
type: "address"
}, {
internalType: "uint256",
name: "wormholeFee",
type: "uint256"
}, {
internalType: "address",
name: "weth",
type: "address"
}],
stateMutability: "nonpayable",
type: "constructor"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "CancelTokenStream",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "depositor",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "DepositToken",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "DirectTransfer",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "InstantTokenTransfer",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "account",
type: "bytes"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "PDAInitialize",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "PauseTokenStream",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "account",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "TokenAccountInitialize",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "TokenStream",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "TokenStreamUpdate",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "withdrawer",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "TokenWithdrawal",
type: "event"
}, {
anonymous: false,
inputs: [{
indexed: false,
internalType: "bytes",
name: "withdrawer",
type: "bytes"
}, {
indexed: false,
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
indexed: false,
internalType: "uint32",
name: "nonce",
type: "uint32"
}],
name: "WithdrawToken",
type: "event"
}, {
inputs: [],
name: "CANCEL_TOKEN",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "CONSISTENCY_LEVEL",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "DEPOSIT_TOKEN",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "DIRECT_TRANSFER",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "INITIALIZE_PDA",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "INITIALIZE_TOKEN_ACCOUNT",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "INSTANT_TOKEN",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "PAUSE_TOKEN",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "TOKEN_STREAM",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "TOKEN_STREAM_UPDATE",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "TOKEN_WITHDRAW_STREAM",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "WITHDRAW_TOKEN",
outputs: [{
internalType: "uint8",
name: "",
type: "uint8"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [{
internalType: "uint16",
name: "",
type: "uint16"
}],
name: "_applicationContracts",
outputs: [{
internalType: "bytes32",
name: "",
type: "bytes32"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "_weth",
outputs: [{
internalType: "contract IWETH",
name: "",
type: "address"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "_wormhole",
outputs: [{
internalType: "contract IWormhole",
name: "",
type: "address"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [],
name: "_wormhole_fee",
outputs: [{
internalType: "uint256",
name: "",
type: "uint256"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [{
internalType: "address",
name: "_owner",
type: "address"
}],
name: "changeAdmin",
outputs: [],
stateMutability: "nonpayable",
type: "function"
}, {
inputs: [{
internalType: "uint256",
name: "_id",
type: "uint256"
}],
name: "changeSolanaWormholeId",
outputs: [],
stateMutability: "nonpayable",
type: "function"
}, {
inputs: [],
name: "claimEthAmount",
outputs: [],
stateMutability: "nonpayable",
type: "function"
}, {
inputs: [{
internalType: "uint256",
name: "amount",
type: "uint256"
}],
name: "claimWETHAmount",
outputs: [],
stateMutability: "nonpayable",
type: "function"
}, {
inputs: [{
components: [{
internalType: "bytes",
name: "account",
type: "bytes"
}, {
internalType: "uint256",
name: "toChain",
type: "uint256"
}],
internalType: "struct Messages.InitializePDA",
name: "initializePDA",
type: "tuple"
}],
name: "encode_initialize_pda",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "bytes",
name: "account",
type: "bytes"
}, {
internalType: "bytes",
name: "tokenMint",
type: "bytes"
}, {
internalType: "uint256",
name: "toChain",
type: "uint256"
}],
internalType: "struct Messages.InitializeTokenAccount",
name: "initializeTokenAccount",
type: "tuple"
}],
name: "encode_initialize_token_account",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "reciever_address",
type: "bytes"
}, {
internalType: "bytes",
name: "data_account_address",
type: "bytes"
}],
internalType: "struct Messages.CancelStreamToken",
name: "cancelStream",
type: "tuple"
}],
name: "encode_process_cancel_token_stream",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "depositor",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}],
internalType: "struct Messages.ProcessDepositToken",
name: "processDeposit",
type: "tuple"
}],
name: "encode_process_deposit_token",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "receiver",
type: "bytes"
}],
internalType: "struct Messages.ProcessTransferToken",
name: "processTransfer",
type: "tuple"
}],
name: "encode_process_direct_transfer",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "receiver",
type: "bytes"
}],
internalType: "struct Messages.ProcessTransferToken",
name: "processTransfer",
type: "tuple"
}],
name: "encode_process_instant_token_transfer",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "reciever_address",
type: "bytes"
}, {
internalType: "bytes",
name: "data_account_address",
type: "bytes"
}],
internalType: "struct Messages.PauseStreamToken",
name: "pauseStream",
type: "tuple"
}],
name: "encode_process_pause_token_stream",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "withdrawer",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}],
internalType: "struct Messages.ProcessWithdrawToken",
name: "processWithdraw",
type: "tuple"
}],
name: "encode_process_token_withdrawal",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint64",
name: "start_time",
type: "uint64"
}, {
internalType: "uint64",
name: "end_time",
type: "uint64"
}, {
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
internalType: "uint64",
name: "can_cancel",
type: "uint64"
}, {
internalType: "uint64",
name: "can_update",
type: "uint64"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}],
internalType: "struct Messages.ProcessStreamToken",
name: "processStream",
type: "tuple"
}],
name: "encode_token_stream",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint64",
name: "start_time",
type: "uint64"
}, {
internalType: "uint64",
name: "end_time",
type: "uint64"
}, {
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "data_account_address",
type: "bytes"
}],
internalType: "struct Messages.UpdateStreamToken",
name: "processStream",
type: "tuple"
}],
name: "encode_token_stream_update",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
components: [{
internalType: "uint256",
name: "toChain",
type: "uint256"
}, {
internalType: "bytes",
name: "withdrawer",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "sender_address",
type: "bytes"
}, {
internalType: "bytes",
name: "data_account_address",
type: "bytes"
}],
internalType: "struct Messages.ProcessWithdrawStreamToken",
name: "processWithdrawStream",
type: "tuple"
}],
name: "encode_token_withdraw_stream",
outputs: [{
internalType: "bytes",
name: "encoded",
type: "bytes"
}],
stateMutability: "pure",
type: "function"
}, {
inputs: [{
internalType: "bytes",
name: "account",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "initialize_pda",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "bytes",
name: "account",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "initialize_token_account",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [],
name: "owner",
outputs: [{
internalType: "address",
name: "",
type: "address"
}],
stateMutability: "view",
type: "function"
}, {
inputs: [{
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "reciever_address",
type: "bytes"
}, {
internalType: "bytes",
name: "data_account_address",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_cancel_token_stream",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "bytes",
name: "depositor",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_deposit_token",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_direct_transfer",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "withdrawer",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_instant_token_transfer",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "reciever_address",
type: "bytes"
}, {
internalType: "bytes",
name: "data_account_address",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_pause_token_stream",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "uint64",
name: "start_time",
type: "uint64"
}, {
internalType: "uint64",
name: "end_time",
type: "uint64"
}, {
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "uint64",
name: "can_cancel",
type: "uint64"
}, {
internalType: "uint64",
name: "can_update",
type: "uint64"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_token_stream",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "uint64",
name: "start_time",
type: "uint64"
}, {
internalType: "uint64",
name: "end_time",
type: "uint64"
}, {
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "bytes",
name: "receiver",
type: "bytes"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "data_account_address",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_token_stream_update",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "bytes",
name: "withdrawer",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "bytes",
name: "sender_address",
type: "bytes"
}, {
internalType: "bytes",
name: "data_account_address",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_token_withdraw_stream",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "uint64",
name: "amount",
type: "uint64"
}, {
internalType: "bytes",
name: "sender",
type: "bytes"
}, {
internalType: "bytes",
name: "token_mint",
type: "bytes"
}, {
internalType: "uint256",
name: "arbiter_fee",
type: "uint256"
}],
name: "process_token_withdrawal",
outputs: [],
stateMutability: "payable",
type: "function"
}, {
inputs: [{
internalType: "uint16",
name: "chainId",
type: "uint16"
}, {
internalType: "bytes32",
name: "applicationAddr",
type: "bytes32"
}],
name: "registerApplicationContracts",
outputs: [],
stateMutability: "nonpayable",
type: "function"
}, {
stateMutability: "payable",
type: "receive"
}];
const _bytecode = "0x608060405260008060146101000a81548163ffffffff021916908363ffffffff16021790555060016004553480156200003757600080fd5b506040516200463c3803806200463c83398181016040528101906200005d91906200015d565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600381905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000225565b6000815190506200014081620001f1565b92915050565b60008151905062000157816200020b565b92915050565b6000806000606084860312156200017357600080fd5b600062000183868287016200012f565b9350506020620001968682870162000146565b9250506040620001a9868287016200012f565b9150509250925092565b6000620001c082620001c7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620001fc81620001b3565b81146200020857600080fd5b50565b6200021681620001e7565b81146200022257600080fd5b50565b61440780620002356000396000f3fe60806040526004361061026b5760003560e01c80637773f0cd11610144578063ae6f039c116100b6578063c30a77411161007a578063c30a7741146108bc578063ce9dd1bc146108e7578063d0cd2b0614610912578063d57b4c081461094f578063dd6a859e1461098c578063fcdf089b146109b557610272565b8063ae6f039c146107d0578063af8ed6681461080d578063b8e4b12514610829578063bbdcf3aa14610854578063bbe465851461087f57610272565b80638b31e9a2116101085780638b31e9a21461069a5780638da5cb5b146106d75780638f28397014610702578063a17283251461072b578063a176459514610768578063a6ced9471461079357610272565b80637773f0cd146105bd5780637cfe8d6d146105fa5780637db786e1146106165780638385e5671461063257806384d8b64f1461066f57610272565b806342555f3d116101dd5780635f327e1c116101a15780635f327e1c146104ea5780636035b9521461051357806368afb6f91461053e5780636a79293a1461055a5780637175bad01461058557806374bf6738146105a157610272565b806342555f3d146104225780634a6aff291461044d5780634fd686c814610478578063546b582a146104a35780635e2d15ed146104bf57610272565b806334cf211e1161022f57806334cf211e1461031c57806336d7c33a14610359578063378709d0146103755780633d2e49a61461039e5780633ed3a054146103db57806341a4eb8c1461040657610272565b806313f665871461027757806329247de7146102a25780632d88e3ec146102b9578063313861a7146102d557806332eb44a51461030057610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c6109f2565b6040516102999190613c0e565b60405180910390f35b3480156102ae57600080fd5b506102b76109f7565b005b6102d360048036038101906102ce9190612b25565b610b9e565b005b3480156102e157600080fd5b506102ea610c8c565b6040516102f79190613c0e565b60405180910390f35b61031a600480360381019061031591906130f8565b610c91565b005b34801561032857600080fd5b50610343600480360381019061033e9190612e96565b610d84565b604051610350919061392d565b60405180910390f35b610373600480360381019061036e9190612bfc565b610dcc565b005b34801561038157600080fd5b5061039c60048036038101906103979190612fbe565b610eac565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190612f59565b611098565b6040516103d29190613912565b60405180910390f35b3480156103e757600080fd5b506103f06110b0565b6040516103fd9190613c0e565b60405180910390f35b610420600480360381019061041b9190613039565b6110b5565b005b34801561042e57600080fd5b506104376111af565b6040516104449190613c0e565b60405180910390f35b34801561045957600080fd5b506104626111b4565b60405161046f9190613a9a565b60405180910390f35b34801561048457600080fd5b5061048d6111da565b60405161049a9190613c0e565b60405180910390f35b6104bd60048036038101906104b8919061329d565b6111df565b005b3480156104cb57600080fd5b506104d4611320565b6040516104e19190613c0e565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190612f82565b611325565b005b34801561051f57600080fd5b506105286113d7565b6040516105359190613c0e565b60405180910390f35b6105586004803603810190610553919061318b565b6113dc565b005b34801561056657600080fd5b5061056f611502565b60405161057c9190613c0e565b60405180910390f35b61059f600480360381019061059a9190612b25565b611507565b005b6105bb60048036038101906105b691906130f8565b6115f5565b005b3480156105c957600080fd5b506105e460048036038101906105df9190612ccf565b6116e8565b6040516105f1919061392d565b60405180910390f35b610614600480360381019061060f9190612b25565b611730565b005b610630600480360381019061062b9190612c7b565b61181e565b005b34801561063e57600080fd5b5061065960048036038101906106549190612d10565b6118f5565b604051610666919061392d565b60405180910390f35b34801561067b57600080fd5b5061068461192b565b6040516106919190613c0e565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612d92565b611930565b6040516106ce919061392d565b60405180910390f35b3480156106e357600080fd5b506106ec611978565b6040516106f991906138f7565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190612afc565b61199c565b005b34801561073757600080fd5b50610752600480360381019061074d9190612f18565b611a6d565b60405161075f919061392d565b60405180910390f35b34801561077457600080fd5b5061077d611ac7565b60405161078a9190613a7f565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190612e55565b611aed565b6040516107c7919061392d565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190612e14565b611b35565b604051610804919061392d565b60405180910390f35b61082760048036038101906108229190613039565b611b96565b005b34801561083557600080fd5b5061083e611c92565b60405161084b9190613bb5565b60405180910390f35b34801561086057600080fd5b50610869611c98565b6040516108769190613c0e565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a19190612e55565b611c9d565b6040516108b3919061392d565b60405180910390f35b3480156108c857600080fd5b506108d1611ce5565b6040516108de9190613c0e565b60405180910390f35b3480156108f357600080fd5b506108fc611cea565b6040516109099190613c0e565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190612ed7565b611cef565b604051610946919061392d565b60405180910390f35b34801561095b57600080fd5b5061097660048036038101906109719190612dd3565b611d31565b604051610983919061392d565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae9190612fbe565b611d73565b005b3480156109c157600080fd5b506109dc60048036038101906109d79190612d51565b611e0b565b6040516109e9919061392d565b60405180910390f35b600681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90613b95565b60405180910390fd5b600047905060008111610acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac490613b35565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b149061360d565b60006040518083038185875af1925050503d8060008114610b51576040519150601f19603f3d011682016040523d82523d6000602084013e610b56565b606091505b5050905080610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9190613ad5565b60405180910390fd5b5050565b6000601481819054906101000a900463ffffffff1680929190610bc09061405b565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000610c176040518060a00160405280610bf7611e47565b815260200188815260200187815260200186815260200185815250610d84565b9050610c36600060149054906101000a900463ffffffff168284611e51565b507fbfe17eacb8b88e73140237f9ff5f52edde2116f6e1531a4363938510d9aad18b8686600060149054906101000a900463ffffffff16604051610c7c939291906139b7565b60405180910390a1505050505050565b600e81565b6000601481819054906101000a900463ffffffff1680929190610cb39061405b565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000610d0e60405180608001604052808767ffffffffffffffff168152602001610cfa611e47565b815260200186815260200185815250611cef565b9050610d2d600060149054906101000a900463ffffffff168284611e51565b507f50ca08ca506277828f8b3fcb06709647df9008cbad7f8c6c982d31a4df990ab6848487600060149054906101000a900463ffffffff16604051610d7594939291906139fc565b60405180910390a15050505050565b6060600482600001518360200151846040015185606001518660800151604051602001610db6969594939291906136a1565b6040516020818303038152906040529050919050565b6000601481819054906101000a900463ffffffff1680929190610dee9061405b565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000610e396040518060600160405280868152602001858152602001610e31611e47565b815250611e0b565b9050610e58600060149054906101000a900463ffffffff168284611e51565b507fa8da77fd2ec61d5e39b530180855d29db53f1c1b078bb33908433f4019bbadc58484600060149054906101000a900463ffffffff16604051610e9e939291906139b7565b60405180910390a150505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613b95565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610f959190613bb5565b600060405180830381600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b5050505060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161100e9061360d565b60006040518083038185875af1925050503d806000811461104b576040519150601f19603f3d011682016040523d82523d6000602084013e611050565b606091505b5050905080611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90613ad5565b60405180910390fd5b5050565b60056020528060005260406000206000915090505481565b600a81565b6000601481819054906101000a900463ffffffff16809291906110d79061405b565b91906101000a81548163ffffffff021916908363ffffffff1602179055505060006111386040518060a001604052808867ffffffffffffffff16815260200161111e611e47565b815260200187815260200185815260200186815250611aed565b9050611157600060149054906101000a900463ffffffff168284611e51565b507f4786a83693db947935f5cd397a747f3a699b9d07d3629ace94021d071d31137b858488600060149054906101000a900463ffffffff1660405161119f94939291906139fc565b60405180910390a1505050505050565b600881565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600181565b6000601481819054906101000a900463ffffffff16809291906112019061405b565b91906101000a81548163ffffffff021916908363ffffffff1602179055505060006112a36040518061012001604052808c67ffffffffffffffff1681526020018b67ffffffffffffffff1681526020018a67ffffffffffffffff168152602001611269611e47565b81526020018881526020018981526020018767ffffffffffffffff1681526020018667ffffffffffffffff16815260200185815250611b35565b90506112c2600060149054906101000a900463ffffffff168284611e51565b507fb990e0180c72d777b68e8d4a548d338f30d34dc396ce80ec59ac8c7ca2fd84cf8688858b600060149054906101000a900463ffffffff1660405161130c95949392919061394f565b60405180910390a150505050505050505050565b600481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa90613b15565b60405180910390fd5b80600560008461ffff1661ffff168152602001908152602001600020819055505050565b601181565b6000601481819054906101000a900463ffffffff16809291906113fe9061405b565b91906101000a81548163ffffffff021916908363ffffffff1602179055505060006114866040518061010001604052808b67ffffffffffffffff1681526020018a67ffffffffffffffff1681526020018967ffffffffffffffff168152602001611466611e47565b815260200187815260200188815260200186815260200185815250611a6d565b90506114a5600060149054906101000a900463ffffffff168284611e51565b507f0f7c1e0ede20c46f43588d855dd35b9727a4878f40366a7096d0d0600fc6bebd8587868a600060149054906101000a900463ffffffff166040516114ef95949392919061394f565b60405180910390a1505050505050505050565b601381565b6000601481819054906101000a900463ffffffff16809291906115299061405b565b91906101000a81548163ffffffff021916908363ffffffff1602179055505060006115806040518060a00160405280611560611e47565b815260200188815260200187815260200186815260200185815250611930565b905061159f600060149054906101000a900463ffffffff168284611e51565b507f65d46d0d756daa12e9317aa8d965accbb9e858754607e55b91e04da2346b05f08686600060149054906101000a900463ffffffff166040516115e5939291906139b7565b60405180910390a1505050505050565b6000601481819054906101000a900463ffffffff16809291906116179061405b565b91906101000a81548163ffffffff021916908363ffffffff16021790555050600061167260405180608001604052808767ffffffffffffffff16815260200161165e611e47565b815260200186815260200185815250611d31565b9050611691600060149054906101000a900463ffffffff168284611e51565b507fe92479798b33f5214cf3f2cddb243718e1afe3396334bcf0e4039a881ebee1a6848487600060149054906101000a900463ffffffff166040516116d994939291906139fc565b60405180910390a15050505050565b606060108260000151836020015184604001518560600151866080015160405160200161171a969594939291906136a1565b6040516020818303038152906040529050919050565b6000601481819054906101000a900463ffffffff16809291906117529061405b565b91906101000a81548163ffffffff021916908363ffffffff1602179055505060006117a96040518060a00160405280611789611e47565b8152602001888152602001878152602001868152602001858152506116e8565b90506117c8600060149054906101000a900463ffffffff168284611e51565b507f57c5a9a119dde825fcab8502a1ba0d235bdf0d64a34ebea5195c15dcd2910ea88686600060149054906101000a900463ffffffff1660405161180e939291906139b7565b60405180910390a1505050505050565b6000601481819054906101000a900463ffffffff16809291906118409061405b565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000611885604051806040016040528085815260200161187d611e47565b8152506118f5565b90506118a4600060149054906101000a900463ffffffff168284611e51565b507f5d7c60019563aa6754138204383f3e275fa5b0f88ac118cba94efa120ca039cc83600060149054906101000a900463ffffffff166040516118e8929190613a4f565b60405180910390a1505050565b606060128260000151836020015160405160200161191593929190613668565b6040516020818303038152906040529050919050565b601281565b6060600882600001518360200151846040015185606001518660800151604051602001611962969594939291906136a1565b6040516020818303038152906040529050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613ab5565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e826000015183602001518460400151856060015186608001518760a001518860c001518960e00151604051602001611ab1999897969594939291906137bc565b6040516020818303038152906040529050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c82600001518360200151846040015185606001518660800151604051602001611b1f96959493929190613758565b6040516020818303038152906040529050919050565b60606002826000015183602001518460400151856060015186608001518760a001518860c001518960e001518a6101000151604051602001611b809a9998979695949392919061384f565b6040516020818303038152906040529050919050565b6000601481819054906101000a900463ffffffff1680929190611bb89061405b565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000611c196040518060a001604052808867ffffffffffffffff168152602001611bff611e47565b815260200187815260200186815260200185815250611c9d565b9050611c38600060149054906101000a900463ffffffff168284611e51565b507fb501f7f4db3d2848c767079f2bafeff8aed134f32427f32801e905487ba4971685848689600060149054906101000a900463ffffffff16604051611c8295949392919061394f565b60405180910390a1505050505050565b60035481565b600c81565b6060601182600001518360200151846040015185606001518660800151604051602001611ccf96959493929190613758565b6040516020818303038152906040529050919050565b600281565b601081565b6060600a8260000151836020015184604001518560600151604051602001611d1b959493929190613701565b6040516020818303038152906040529050919050565b606060068260000151836020015184604001518560600151604051602001611d5d959493929190613701565b6040516020818303038152906040529050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890613af5565b60405180910390fd5b8060048190555050565b60606013826000015183602001518460400151604051602001611e319493929190613622565b6040516020818303038152906040529050919050565b6000600454905090565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a90a2196040518163ffffffff1660e01b815260040160206040518083038186803b158015611ebc57600080fd5b505afa158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef49190612fe7565b9050348110611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f90613b75565b60405180910390fd5b60008134611f469190613eb3565b905080841115611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290613b55565b60405180910390fd5b6000611f98826012612177565b90506000611fa7866012612177565b90506000611fb68260126121b5565b611fc18460126121b5565b85611fcc9190613eb3565b611fd69190613eb3565b90506000811115612029573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612027573d6000803e3d6000fd5b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db082866120739190613eb3565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561209e57600080fd5b505af11580156120b2573d6000803e3d6000fd5b5050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b19a437e8a8a60016040518463ffffffff1660e01b815260040161211793929190613bd0565b602060405180830381600087803b15801561213157600080fd5b505af1158015612145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121699190613010565b955050505050509392505050565b600060088260ff1611156121ac576008826121929190613ee7565b600a61219e9190613d3b565b836121a99190613cb7565b92505b82905092915050565b600060088260ff1611156121ea576008826121d09190613ee7565b600a6121dc9190613d3b565b836121e79190613e59565b92505b82905092915050565b600061220661220184613c4e565b613c29565b90508281526020810184848401111561221e57600080fd5b612229848285613fe8565b509392505050565b6000813590506122408161435e565b92915050565b60008135905061225581614375565b92915050565b600082601f83011261226c57600080fd5b813561227c8482602086016121f3565b91505092915050565b600060a0828403121561229757600080fd5b6122a160a0613c29565b905060006122b184828501612aa8565b600083015250602082013567ffffffffffffffff8111156122d157600080fd5b6122dd8482850161225b565b602083015250604082013567ffffffffffffffff8111156122fd57600080fd5b6123098482850161225b565b604083015250606082013567ffffffffffffffff81111561232957600080fd5b6123358482850161225b565b606083015250608082013567ffffffffffffffff81111561235557600080fd5b6123618482850161225b565b60808301525092915050565b60006040828403121561237f57600080fd5b6123896040613c29565b9050600082013567ffffffffffffffff8111156123a557600080fd5b6123b18482850161225b565b60008301525060206123c584828501612aa8565b60208301525092915050565b6000606082840312156123e357600080fd5b6123ed6060613c29565b9050600082013567ffffffffffffffff81111561240957600080fd5b6124158482850161225b565b600083015250602082013567ffffffffffffffff81111561243557600080fd5b6124418482850161225b565b602083015250604061245584828501612aa8565b60408301525092915050565b600060a0828403121561247357600080fd5b61247d60a0613c29565b9050600061248d84828501612aa8565b600083015250602082013567ffffffffffffffff8111156124ad57600080fd5b6124b98482850161225b565b602083015250604082013567ffffffffffffffff8111156124d957600080fd5b6124e58482850161225b565b604083015250606082013567ffffffffffffffff81111561250557600080fd5b6125118482850161225b565b606083015250608082013567ffffffffffffffff81111561253157600080fd5b61253d8482850161225b565b60808301525092915050565b60006080828403121561255b57600080fd5b6125656080613c29565b9050600061257584828501612ad2565b600083015250602061258984828501612aa8565b602083015250604082013567ffffffffffffffff8111156125a957600080fd5b6125b58482850161225b565b604083015250606082013567ffffffffffffffff8111156125d557600080fd5b6125e18482850161225b565b60608301525092915050565b6000610120828403121561260057600080fd5b61260b610120613c29565b9050600061261b84828501612ad2565b600083015250602061262f84828501612ad2565b602083015250604061264384828501612ad2565b604083015250606061265784828501612aa8565b606083015250608082013567ffffffffffffffff81111561267757600080fd5b6126838482850161225b565b60808301525060a082013567ffffffffffffffff8111156126a357600080fd5b6126af8482850161225b565b60a08301525060c06126c384828501612ad2565b60c08301525060e06126d784828501612ad2565b60e08301525061010082013567ffffffffffffffff8111156126f857600080fd5b6127048482850161225b565b6101008301525092915050565b600060a0828403121561272357600080fd5b61272d60a0613c29565b9050600061273d84828501612ad2565b600083015250602061275184828501612aa8565b602083015250604082013567ffffffffffffffff81111561277157600080fd5b61277d8482850161225b565b604083015250606082013567ffffffffffffffff81111561279d57600080fd5b6127a98482850161225b565b606083015250608082013567ffffffffffffffff8111156127c957600080fd5b6127d58482850161225b565b60808301525092915050565b600060a082840312156127f357600080fd5b6127fd60a0613c29565b9050600061280d84828501612aa8565b600083015250602082013567ffffffffffffffff81111561282d57600080fd5b6128398482850161225b565b602083015250604082013567ffffffffffffffff81111561285957600080fd5b6128658482850161225b565b604083015250606082013567ffffffffffffffff81111561288557600080fd5b6128918482850161225b565b606083015250608082013567ffffffffffffffff8111156128b157600080fd5b6128bd8482850161225b565b60808301525092915050565b6000608082840312156128db57600080fd5b6128e56080613c29565b905060006128f584828501612ad2565b600083015250602061290984828501612aa8565b602083015250604082013567ffffffffffffffff81111561292957600080fd5b6129358482850161225b565b604083015250606082013567ffffffffffffffff81111561295557600080fd5b6129618482850161225b565b60608301525092915050565b6000610100828403121561298057600080fd5b61298b610100613c29565b9050600061299b84828501612ad2565b60008301525060206129af84828501612ad2565b60208301525060406129c384828501612ad2565b60408301525060606129d784828501612aa8565b606083015250608082013567ffffffffffffffff8111156129f757600080fd5b612a038482850161225b565b60808301525060a082013567ffffffffffffffff811115612a2357600080fd5b612a2f8482850161225b565b60a08301525060c082013567ffffffffffffffff811115612a4f57600080fd5b612a5b8482850161225b565b60c08301525060e082013567ffffffffffffffff811115612a7b57600080fd5b612a878482850161225b565b60e08301525092915050565b600081359050612aa28161438c565b92915050565b600081359050612ab7816143a3565b92915050565b600081519050612acc816143a3565b92915050565b600081359050612ae1816143ba565b92915050565b600081519050612af6816143ba565b92915050565b600060208284031215612b0e57600080fd5b6000612b1c84828501612231565b91505092915050565b600080600080600060a08688031215612b3d57600080fd5b600086013567ffffffffffffffff811115612b5757600080fd5b612b638882890161225b565b955050602086013567ffffffffffffffff811115612b8057600080fd5b612b8c8882890161225b565b945050604086013567ffffffffffffffff811115612ba957600080fd5b612bb58882890161225b565b935050606086013567ffffffffffffffff811115612bd257600080fd5b612bde8882890161225b565b9250506080612bef88828901612aa8565b9150509295509295909350565b600080600060608486031215612c1157600080fd5b600084013567ffffffffffffffff811115612c2b57600080fd5b612c378682870161225b565b935050602084013567ffffffffffffffff811115612c5457600080fd5b612c608682870161225b565b9250506040612c7186828701612aa8565b9150509250925092565b60008060408385031215612c8e57600080fd5b600083013567ffffffffffffffff811115612ca857600080fd5b612cb48582860161225b565b9250506020612cc585828601612aa8565b9150509250929050565b600060208284031215612ce157600080fd5b600082013567ffffffffffffffff811115612cfb57600080fd5b612d0784828501612285565b91505092915050565b600060208284031215612d2257600080fd5b600082013567ffffffffffffffff811115612d3c57600080fd5b612d488482850161236d565b91505092915050565b600060208284031215612d6357600080fd5b600082013567ffffffffffffffff811115612d7d57600080fd5b612d89848285016123d1565b91505092915050565b600060208284031215612da457600080fd5b600082013567ffffffffffffffff811115612dbe57600080fd5b612dca84828501612461565b91505092915050565b600060208284031215612de557600080fd5b600082013567ffffffffffffffff811115612dff57600080fd5b612e0b84828501612549565b91505092915050565b600060208284031215612e2657600080fd5b600082013567ffffffffffffffff811115612e4057600080fd5b612e4c848285016125ed565b91505092915050565b600060208284031215612e6757600080fd5b600082013567ffffffffffffffff811115612e8157600080fd5b612e8d84828501612711565b91505092915050565b600060208284031215612ea857600080fd5b600082013567ffffffffffffffff811115612ec257600080fd5b612ece848285016127e1565b91505092915050565b600060208284031215612ee957600080fd5b600082013567ffffffffffffffff811115612f0357600080fd5b612f0f848285016128c9565b91505092915050565b600060208284031215612f2a57600080fd5b600082013567ffffffffffffffff811115612f4457600080fd5b612f508482850161296d565b91505092915050565b600060208284031215612f6b57600080fd5b6000612f7984828501612a93565b91505092915050565b60008060408385031215612f9557600080fd5b6000612fa385828601612a93565b9250506020612fb485828601612246565b9150509250929050565b600060208284031215612fd057600080fd5b6000612fde84828501612aa8565b91505092915050565b600060208284031215612ff957600080fd5b600061300784828501612abd565b91505092915050565b60006020828403121561302257600080fd5b600061303084828501612ae7565b91505092915050565b600080600080600060a0868803121561305157600080fd5b600061305f88828901612ad2565b955050602086013567ffffffffffffffff81111561307c57600080fd5b6130888882890161225b565b945050604086013567ffffffffffffffff8111156130a557600080fd5b6130b18882890161225b565b935050606086013567ffffffffffffffff8111156130ce57600080fd5b6130da8882890161225b565b92505060806130eb88828901612aa8565b9150509295509295909350565b6000806000806080858703121561310e57600080fd5b600061311c87828801612ad2565b945050602085013567ffffffffffffffff81111561313957600080fd5b6131458782880161225b565b935050604085013567ffffffffffffffff81111561316257600080fd5b61316e8782880161225b565b925050606061317f87828801612aa8565b91505092959194509250565b600080600080600080600080610100898b0312156131a857600080fd5b60006131b68b828c01612ad2565b98505060206131c78b828c01612ad2565b97505060406131d88b828c01612ad2565b965050606089013567ffffffffffffffff8111156131f557600080fd5b6132018b828c0161225b565b955050608089013567ffffffffffffffff81111561321e57600080fd5b61322a8b828c0161225b565b94505060a089013567ffffffffffffffff81111561324757600080fd5b6132538b828c0161225b565b93505060c089013567ffffffffffffffff81111561327057600080fd5b61327c8b828c0161225b565b92505060e