dgf-prototype/frontend/contractArtifacts/DAO.json

851 lines
116 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "DAO",
"sourceName": "contracts/core/DAO.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientAllowance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC20InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC20InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC20InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "ERC20InvalidSpender",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "id",
"type": "string"
}
],
"name": "PostAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
}
],
"name": "ValidationPoolInitiated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "votePasses",
"type": "bool"
},
{
"indexed": false,
"internalType": "bool",
"name": "quorumMet",
"type": "bool"
}
],
"name": "ValidationPoolResolved",
"type": "event"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "weightPPM",
"type": "uint256"
},
{
"internalType": "address",
"name": "authorAddress",
"type": "address"
}
],
"internalType": "struct Author[]",
"name": "authors",
"type": "tuple[]"
},
{
"internalType": "string",
"name": "postId",
"type": "string"
},
{
"components": [
{
"internalType": "int256",
"name": "weightPPM",
"type": "int256"
},
{
"internalType": "string",
"name": "targetPostId",
"type": "string"
}
],
"internalType": "struct Citation[]",
"name": "citations",
"type": "tuple[]"
}
],
"name": "addPost",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "inFavor",
"type": "bool"
}
],
"name": "delegatedStakeOnValidationPool",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
}
],
"name": "evaluateOutcome",
"outputs": [
{
"internalType": "bool",
"name": "votePasses",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "forwardAllowance",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "postId",
"type": "string"
}
],
"name": "getPostAuthors",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "weightPPM",
"type": "uint256"
},
{
"internalType": "address",
"name": "authorAddress",
"type": "address"
}
],
"internalType": "struct Author[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "postId",
"type": "string"
},
{
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"internalType": "uint256[2]",
"name": "quorum",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "winRatio",
"type": "uint256[2]"
},
{
"internalType": "uint256",
"name": "bindingPercent",
"type": "uint256"
},
{
"internalType": "bool",
"name": "redistributeLosingStakes",
"type": "bool"
},
{
"internalType": "bool",
"name": "callbackOnValidate",
"type": "bool"
},
{
"internalType": "bytes",
"name": "callbackData",
"type": "bytes"
}
],
"name": "initiateValidationPool",
"outputs": [
{
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isMember",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "memberCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "members",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "postCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "postIds",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"name": "posts",
"outputs": [
{
"internalType": "string",
"name": "id",
"type": "string"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "reputation",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "duration",
"type": "uint256"
}
],
"name": "stakeAvailability",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "inFavor",
"type": "bool"
}
],
"name": "stakeOnValidationPool",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "validationPoolCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "validationPools",
"outputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "string",
"name": "postId",
"type": "string"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "minted",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "stakeCount",
"type": "uint256"
},
{
"components": [
{
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"internalType": "uint256[2]",
"name": "quorum",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "winRatio",
"type": "uint256[2]"
},
{
"internalType": "uint256",
"name": "bindingPercent",
"type": "uint256"
},
{
"internalType": "bool",
"name": "redistributeLosingStakes",
"type": "bool"
}
],
"internalType": "struct ValidationPoolParams",
"name": "params",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "endTime",
"type": "uint256"
},
{
"internalType": "bool",
"name": "resolved",
"type": "bool"
},
{
"internalType": "bool",
"name": "outcome",
"type": "bool"
},
{
"internalType": "bool",
"name": "callbackOnValidate",
"type": "bool"
},
{
"internalType": "bytes",
"name": "callbackData",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040526003600c556040518060400160405280600160ff168152602001600a60ff16815250600f90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b615fde80620004b96000396000f3fe6080604052600436106101665760003560e01c8063642b5bfb116100d1578063a230c5241161008a578063da66863a11610064578063da66863a146105b0578063dd62ed3e146105ed578063e5b4d8271461062a578063f8300fca1461065357610166565b8063a230c524146104ee578063a23362791461052b578063a9059cbb1461057357610166565b8063642b5bfb146103c557806370a08231146103f0578063883802741461042d57806395d89b411461046a578063975762b3146104955780639fbe7c73146104be57610166565b806323b872dd1161012357806323b872dd146102915780632d17c062146102ce578063313ce567146102f757806350cde8ef146103225780635daf08ca1461035f5780635ffc70041461039c57610166565b806306fdde031461016b578063095ea7b31461019657806311aee380146101d357806317906c2e146101fe57806317c182171461022957806318160ddd14610266575b600080fd5b34801561017757600080fd5b50610180610692565b60405161018d9190613c03565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190613ccd565b610724565b6040516101ca9190613d28565b60405180910390f35b3480156101df57600080fd5b506101e8610747565b6040516101f59190613d52565b60405180910390f35b34801561020a57600080fd5b5061021361074d565b6040516102209190613d52565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613d6d565b610753565b60405161025d9190613d28565b60405180910390f35b34801561027257600080fd5b5061027b611135565b6040516102889190613d52565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190613d9a565b61113f565b6040516102c59190613d28565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613e19565b61117c565b005b34801561030357600080fd5b5061030c6111a5565b6040516103199190613e88565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613d6d565b6111ae565b6040516103569190613c03565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613d6d565b61125a565b6040516103939190613eb2565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613d9a565b61128d565b005b3480156103d157600080fd5b506103da6112bc565b6040516103e79190613d52565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613ecd565b6112c2565b6040516104249190613d52565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613efa565b61130a565b6040516104619190613d28565b60405180910390f35b34801561047657600080fd5b5061047f6113a5565b60405161048c9190613c03565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613f4d565b611437565b005b6104d860048036038101906104d39190614091565b61148a565b6040516104e59190613d52565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613ecd565b611944565b6040516105229190613d28565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613d6d565b611964565b60405161056a9c9b9a99989796959493929190614301565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613ccd565b611bde565b6040516105a79190613d28565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906143cb565b611c1b565b6040516105e49190614505565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190614527565b611d04565b6040516106219190613d52565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190614613565b611d8b565b005b34801561065f57600080fd5b5061067a600480360381019061067591906147f7565b61225e565b60405161068993929190614840565b60405180910390f35b6060600380546106a1906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546106cd906148ad565b801561071a5780601f106106ef5761010080835404028352916020019161071a565b820191906000526020600020905b8154815290600101906020018083116106fd57829003601f168201915b5050505050905090565b60008061072f612346565b905061073c81858561234e565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff161515146107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba9061492a565b60405180910390fd5b600080600080600090505b846005015481101561083f5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561081f578160020154846108189190614979565b9350610832565b81600201548361082f9190614979565b92505b80806001019150506107ce565b506002846003015461085191906149dc565b8361085c9190614979565b92506002846003015461086f91906149dc565b8261087a9190614979565b915060006002856003015461088f9190614a0d565b146108a4576001836108a19190614979565b92505b83600e01544211806108c757506108b9611135565b82846108c59190614979565b145b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90614ab0565b60405180910390fd5b836006016001016000600281106109205761091f614ad0565b5b015461092a611135565b6109349190614aff565b82846109409190614979565b8560060160010160016002811061095a57610959614ad0565b5b01546109669190614aff565b11610a9657600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81866000806040516109bc93929190614b41565b60405180910390a183600f0160029054906101000a900460ff1615610a89578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a44959493929190614c11565b6020604051808303816000875af1158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614c80565b505b6000945050505050611130565b83600601600301600060028110610ab057610aaf614ad0565b5b01548284610abe9190614979565b610ac89190614aff565b84600601600301600160028110610ae257610ae1614ad0565b5b015484610aef9190614aff565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b6093929190614b41565b60405180910390a1600085610b755782610b77565b835b905060008060005b8760050154811015610c7f5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c72576000606489600601600501548760020154610bd99190614aff565b610be391906149dc565b90508860060160060160009054906101000a900460ff1615610c4157610c2e8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612360565b8084610c3a9190614979565b9350610c70565b610c6f8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612585565b5b505b8080600101915050610b7f565b508715610e815760028760030154610c9791906149dc565b82610ca29190614979565b915060005b8760050154811015610d8d5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cff57508460010160009054906101000a900460ff161515891515145b15610d805760006064896006016005015486886002015487610d219190614aff565b610d2b91906149dc565b610d359190614aff565b610d3f91906149dc565b90508083610d4d9190614979565b9250610d7e308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610ca7565b5060008183610d9c9190614cad565b9050600060028960030154610db19190614a0d565b14610dc657600181610dc39190614979565b90505b610e7a886001018054610dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e04906148ad565b8015610e515780601f10610e2657610100808354040283529160200191610e51565b820191906000526020600020905b815481529060010190602001808311610e3457829003601f168201915b50505050508260028b60030154610e6891906149dc565b610e729190614979565b600080612607565b5050610f99565b866003015482610e919190614979565b915060005b8760050154811015610f975787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eee57508460010160009054906101000a900460ff161515891515145b15610f8a5760006064896006016005015460028b60030154610f1091906149dc565b87610f1b9190614cad565b886002015487610f2b9190614aff565b610f3591906149dc565b610f3f9190614aff565b610f4991906149dc565b90508083610f579190614979565b9250610f88308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610e96565b505b60005b6006548110156110625760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fe8611135565b610ff1836112c2565b8b600d01546110009190614aff565b61100a91906149dc565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611052573d6000803e3d6000fd5b5050508080600101915050610f9c565b5086600f0160029054906101000a900460ff1615611128578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b81526004016110e3959493929190614c11565b6020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190614c80565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390614d2d565b60405180910390fd5b6000600d6000858152602001908152602001600020905061119f813385856131af565b50505050565b60006009905090565b600981815481106111be57600080fd5b9060005260206000200160009150905080546111d9906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611205906148ad565b80156112525780601f1061122757610100808354040283529160200191611252565b820191906000526020600020905b81548152906001019060200180831161123557829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112988333836132a5565b6112b78383836112a88787611d04565b6112b29190614979565b61234e565b505050565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061132b33858561131c3389611d04565b6113269190614979565b61234e565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161136893929190614d4d565b600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546113b4906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546113e0906148ad565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b5050505050905090565b6000600d60008681526020019081526020016000209050826114598533611d04565b101561146c576114698433611d04565b92505b6114778433856132a5565b611483818585856131af565b5050505050565b60008034116114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614df6565b60405180910390fd5b6001891015611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614e62565b60405180910390fd5b651cae8c13e00089111561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614ece565b60405180910390fd5b8760016002811061156f5761156e614ad0565b5b6020020135600f60006002811061158957611588614ad0565b5b01546115959190614aff565b886000600281106115a9576115a8614ad0565b5b6020020135600f6001600281106115c3576115c2614ad0565b5b01546115cf9190614aff565b1015611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614f3a565b60405180910390fd5b8760016002811061162457611623614ad0565b5b60200201358860006002811061163d5761163c614ad0565b5b60200201351115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614fa6565b60405180910390fd5b8660016002811061169757611696614ad0565b5b6020020135876000600281106116b0576116af614ad0565b5b602002013511156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90615012565b60405180910390fd5b606486111561173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061507e565b60405180910390fd5b600060088c8c60405161174e9291906150ce565b9081526020016040518091039020905060008160020180549050036117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90615133565b60405180910390fd5b600e60008154809291906117bb90615153565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c82600101918261182e929190615352565b503481600d0181905550898160060160010190600261184e929190613b16565b508881600601600301906002611865929190613b16565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a426118a99190614979565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118e9929190615473565b506118f43034613339565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161192c9190613d52565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d60205280600052604060002060009150905080600001549080600101805461198d906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546119b9906148ad565b8015611a065780601f106119db57610100808354040283529160200191611a06565b820191906000526020600020905b8154815290600101906020018083116119e957829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611a93576020028201915b815481526020019060010190808311611a7f575b5050505050815260200160038201600280602002604051908101604052809291908260028015611ad8576020028201915b815481526020019060010190808311611ac4575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611b5b906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611b87906148ad565b8015611bd45780601f10611ba957610100808354040283529160200191611bd4565b820191906000526020600020905b815481529060010190602001808311611bb757829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290614d2d565b60405180910390fd5b6060600060088484604051611c319291906150ce565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611cf75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611c65565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906155b5565b60405180910390fd5b600a6000815480929190611de490615153565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611e26929190615352565b50600060088585604051611e3b9291906150ce565b908152602001604051809103902090506000816002018054905014611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90615647565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611eeb929190615352565b50600080600090505b88889050811015611f8a57888882818110611f1257611f11614ad0565b5b9050604002016000013582611f279190614979565b915082600201898983818110611f4057611f3f614ad0565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f7b91906157f4565b50508080600101915050611ef4565b50620f42408114611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790615874565b60405180910390fd5b60005b8484905081101561204b5782600301858583818110611ff557611ff4614ad0565b5b905060200281019061200791906158a3565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161203c9190615a0a565b50508080600101915050611fd3565b5060008060005b846003018054905081101561216f57600085600301828154811061207957612078614ad0565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc08112156120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790615a8a565b60405180910390fd5b620f4240811315612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90615b1c565b60405180910390fd5b600081131561215257808461214b9190615b3c565b9350612161565b808361215e9190615b3c565b92505b508080600101915050612052565b50620f42408213156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90615bf2565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090615c84565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af249727888860405161224a929190615cd1565b60405180910390a150505050505050505050565b600881805160208101820180518482526020830160208501208183528095505050505050600091509050806000018054612297906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546122c3906148ad565b80156123105780601f106122e557610100808354040283529160200191612310565b820191906000526020600020905b8154815290600101906020018083116122f357829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b61235b83838360016133bb565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b25780600260008282546123a69190614979565b92505081905550612485565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561243e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161243593929190614d4d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ce578060026000828254039250508190555061251b565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125789190613d52565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f75760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125ee9190613eb2565b60405180910390fd5b61260382600083612360565b5050565b6000600c54821061261a578390506131a7565b600060088660405161262c9190615d26565b90815260200160405180910390209050600081600201805490500361265457849150506131a7565b60005b816003018054905081101561278857600082600301828154811061267e5761267d614ad0565b5b906000526020600020906002020160000154121561277b5761276d878360030183815481106126b0576126af614ad0565b5b9060005260206000209060020201604051806040016040529081600082015481526020016001820180546126e3906148ad565b80601f016020809104026020016040519081016040528092919081815260200182805461270f906148ad565b801561275c5780601f106127315761010080835404028352916020019161275c565b820191906000526020600020905b81548152906001019060200180831161273f57829003601f168201915b505050505081525050888888613592565b866127789190615d3d565b95505b8080600101915050612657565b5060005b81600301805490508110156128bd5760008260030182815481106127b3576127b2614ad0565b5b90600052602060002090600202016000015413156128b0576128a2878360030183815481106127e5576127e4614ad0565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612818906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612844906148ad565b80156128915780601f1061286657610100808354040283529160200191612891565b820191906000526020600020905b81548152906001019060200180831161287457829003601f168201915b505050505081525050888888613592565b866128ad9190615d3d565b95505b808060010191505061278c565b506000851315612ba957612b88816040518060a00160405290816000820180546128e6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612912906148ad565b801561295f5780601f106129345761010080835404028352916020019161295f565b820191906000526020600020905b81548152906001019060200180831161294257829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612a755783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050815260200190600101906129e3565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612b70578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612adf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0b906148ad565b8015612b585780601f10612b2d57610100808354040283529160200191612b58565b820191906000526020600020905b815481529060010190602001808311612b3b57829003601f168201915b50505050508152505081526020019060010190612aa2565b5050505081526020016004820154815250508661375d565b5084816004016000828254612b9d9190614979565b925050819055506131a5565b6000858260040154612bbb9190615b3c565b12612eac57612e81816040518060a0016040529081600082018054612bdf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612c0b906148ad565b8015612c585780601f10612c2d57610100808354040283529160200191612c58565b820191906000526020600020905b815481529060010190602001808311612c3b57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612d6e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612cdc565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612e69578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612e04906148ad565b8015612e515780601f10612e2657610100808354040283529160200191612e51565b820191906000526020600020905b815481529060010190602001808311612e3457829003601f168201915b50505050508152505081526020019060010190612d9b565b5050505081526020016004820154815250508661375d565b915084612e8d90615d80565b816004016000828254612ea09190614cad565b925050819055506131a4565b848160040154612ebc9190615b3c565b915061318c816040518060a0016040529081600082018054612edd906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612f09906148ad565b8015612f565780601f10612f2b57610100808354040283529160200191612f56565b820191906000526020600020905b815481529060010190602001808311612f3957829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561306c5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612fda565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131675783829060005260206000209060020201604051806040016040529081600082015481526020016001820180546130d6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054613102906148ad565b801561314f5780601f106131245761010080835404028352916020019161314f565b820191906000526020600020905b81548152906001019060200180831161313257829003601f168201915b50505050508152505081526020019060010190613099565b505050508152602001600482015481525050826004015461318790615d80565b61375d565b826131979190615b3c565b9150600081600401819055505b5b505b949350505050565b83600e01544211156131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90615e14565b60405180910390fd5b600084600501600081548092919061320d90615153565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006132b18484611d04565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146133335781811015613323578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161331a93929190614d4d565b60405180910390fd5b613332848484840360006133bb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133ab5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016133a29190613eb2565b60405180910390fd5b6133b760008383612360565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361342d5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016134249190613eb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361349f5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016134969190613eb2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561358c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516135839190613d52565b60405180910390a35b50505050565b6000620f42408560000151856135a89190615e34565b6135b29190615eac565b9050600085602001515103613614576000811215613605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fc90615f88565b60405180910390fd5b61360f3082612585565b613754565b6000600b876040516136269190615d26565b908152602001604051809103902086602001516040516136469190615d26565b908152602001604051809103902054905083156136b357600082121561368e578061367090615d80565b8213613685578061368090615d80565b613687565b815b91506136b2565b8061369890615d80565b82126136ad57806136a890615d80565b6136af565b815b91505b5b60006136ec87602001518487806136da57506000871480156136d9575060008a60000151125b5b6001886136e79190614979565b612607565b905080836136fa9190615d3d565b925082600b8960405161370d9190615d26565b9081526020016040518091039020886020015160405161372d9190615d26565b9081526020016040518091039020600082825461374a9190615b3c565b9250508190555050505b95945050505050565b60008060005b8460400151518110156138b75760008560400151828151811061378957613788614ad0565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138a95780600560006006600081548092919061380090615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508080600101915050613763565b5060005b846040015151811015613b0e576000856040015182815181106138e1576138e0614ad0565b5b60200260200101519050600060018760400151516138ff9190614cad565b83101561393957620f424082600001518761391a9190615e34565b6139249190615eac565b905080846139329190615b3c565b9350613948565b83866139459190615d3d565b90505b6000811315613a835761396030836020015183612360565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a7e57816020015160056000600660008154809291906139d190615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613aff565b80613a8d90615d80565b613a9a83602001516112c2565b1015613ae557613aad82602001516112c2565b81613ab89190615b3c565b85613ac39190615b3c565b9450613ae0826020015130613adb85602001516112c2565b612360565b613afe565b613afd82602001513083613af890615d80565b612360565b5b5b505080806001019150506138bb565b505092915050565b8260028101928215613b45579160200282015b82811115613b44578235825591602001919060010190613b29565b5b509050613b529190613b56565b5090565b5b80821115613b6f576000816000905550600101613b57565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bad578082015181840152602081019050613b92565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bd582613b73565b613bdf8185613b7e565b9350613bef818560208601613b8f565b613bf881613bb9565b840191505092915050565b60006020820190508181036000830152613c1d8184613bca565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6482613c39565b9050919050565b613c7481613c59565b8114613c7f57600080fd5b50565b600081359050613c9181613c6b565b92915050565b6000819050919050565b613caa81613c97565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b60008060408385031215613ce457613ce3613c2f565b5b6000613cf285828601613c82565b9250506020613d0385828601613cb8565b9150509250929050565b60008115159050919050565b613d2281613d0d565b82525050565b6000602082019050613d3d6000830184613d19565b92915050565b613d4c81613c97565b82525050565b6000602082019050613d676000830184613d43565b92915050565b600060208284031215613d8357613d82613c2f565b5b6000613d9184828501613cb8565b91505092915050565b600080600060608486031215613db357613db2613c2f565b5b6000613dc186828701613c82565b9350506020613dd286828701613c82565b9250506040613de386828701613cb8565b9150509250925092565b613df681613d0d565b8114613e0157600080fd5b50565b600081359050613e1381613ded565b92915050565b600080600060608486031215613e3257613e31613c2f565b5b6000613e4086828701613cb8565b9350506020613e5186828701613cb8565b9250506040613e6286828701613e04565b9150509250925092565b600060ff82169050919050565b613e8281613e6c565b82525050565b6000602082019050613e9d6000830184613e79565b92915050565b613eac81613c59565b82525050565b6000602082019050613ec76000830184613ea3565b92915050565b600060208284031215613ee357613ee2613c2f565b5b6000613ef184828501613c82565b91505092915050565b600080600060608486031215613f1357613f12613c2f565b5b6000613f2186828701613c82565b9350506020613f3286828701613cb8565b9250506040613f4386828701613cb8565b9150509250925092565b60008060008060808587031215613f6757613f66613c2f565b5b6000613f7587828801613cb8565b9450506020613f8687828801613c82565b9350506040613f9787828801613cb8565b9250506060613fa887828801613e04565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613fd957613fd8613fb4565b5b8235905067ffffffffffffffff811115613ff657613ff5613fb9565b5b60208301915083600182028301111561401257614011613fbe565b5b9250929050565b60008190508260206002028201111561403557614034613fbe565b5b92915050565b60008083601f84011261405157614050613fb4565b5b8235905067ffffffffffffffff81111561406e5761406d613fb9565b5b60208301915083600182028301111561408a57614089613fbe565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140b5576140b4613c2f565b5b60008b013567ffffffffffffffff8111156140d3576140d2613c34565b5b6140df8d828e01613fc3565b9a509a505060206140f28d828e01613cb8565b98505060406141038d828e01614019565b97505060806141148d828e01614019565b96505060c06141258d828e01613cb8565b95505060e06141368d828e01613e04565b9450506101006141488d828e01613e04565b9350506101208b013567ffffffffffffffff81111561416a57614169613c34565b5b6141768d828e0161403b565b92509250509295989b9194979a5092959850565b61419381613c97565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b60006141c5838361418a565b60208301905092915050565b6000602082019050919050565b6141e781614199565b6141f181846141a4565b92506141fc826141af565b8060005b8381101561422d57815161421487826141b9565b965061421f836141d1565b925050600181019050614200565b505050505050565b61423e81613d0d565b82525050565b60e08201600082015161425a600085018261418a565b50602082015161426d60208501826141de565b50604082015161428060608501826141de565b50606082015161429360a085018261418a565b5060808201516142a660c0850182614235565b50505050565b600081519050919050565b600082825260208201905092915050565b60006142d3826142ac565b6142dd81856142b7565b93506142ed818560208601613b8f565b6142f681613bb9565b840191505092915050565b600061024082019050614317600083018f613d43565b8181036020830152614329818e613bca565b9050614338604083018d613ea3565b614345606083018c613d43565b614352608083018b613d43565b61435f60a083018a614244565b61436d610180830189613d43565b61437b6101a0830188613d43565b6143896101c0830187613d19565b6143976101e0830186613d19565b6143a5610200830185613d19565b8181036102208301526143b881846142c8565b90509d9c50505050505050505050505050565b600080602083850312156143e2576143e1613c2f565b5b600083013567ffffffffffffffff811115614400576143ff613c34565b5b61440c85828601613fc3565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61444d81613c59565b82525050565b604082016000820151614469600085018261418a565b50602082015161447c6020850182614444565b50505050565b600061448e8383614453565b60408301905092915050565b6000602082019050919050565b60006144b282614418565b6144bc8185614423565b93506144c783614434565b8060005b838110156144f85781516144df8882614482565b97506144ea8361449a565b9250506001810190506144cb565b5085935050505092915050565b6000602082019050818103600083015261451f81846144a7565b905092915050565b6000806040838503121561453e5761453d613c2f565b5b600061454c85828601613c82565b925050602061455d85828601613c82565b9150509250929050565b60008083601f84011261457d5761457c613fb4565b5b8235905067ffffffffffffffff81111561459a57614599613fb9565b5b6020830191508360408202830111156145b6576145b5613fbe565b5b9250929050565b60008083601f8401126145d3576145d2613fb4565b5b8235905067ffffffffffffffff8111156145f0576145ef613fb9565b5b60208301915083602082028301111561460c5761460b613fbe565b5b9250929050565b600080600080600080606087890312156146305761462f613c2f565b5b600087013567ffffffffffffffff81111561464e5761464d613c34565b5b61465a89828a01614567565b9650965050602087013567ffffffffffffffff81111561467d5761467c613c34565b5b61468989828a01613fc3565b9450945050604087013567ffffffffffffffff8111156146ac576146ab613c34565b5b6146b889828a016145bd565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61470482613bb9565b810181811067ffffffffffffffff82111715614723576147226146cc565b5b80604052505050565b6000614736613c25565b905061474282826146fb565b919050565b600067ffffffffffffffff821115614762576147616146cc565b5b61476b82613bb9565b9050602081019050919050565b82818337600083830152505050565b600061479a61479584614747565b61472c565b9050828152602081018484840111156147b6576147b56146c7565b5b6147c1848285614778565b509392505050565b600082601f8301126147de576147dd613fb4565b5b81356147ee848260208601614787565b91505092915050565b60006020828403121561480d5761480c613c2f565b5b600082013567ffffffffffffffff81111561482b5761482a613c34565b5b614837848285016147c9565b91505092915050565b6000606082019050818103600083015261485a8186613bca565b90506148696020830185613ea3565b6148766040830184613d43565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148c557607f821691505b6020821081036148d8576148d761487e565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000614914601883613b7e565b915061491f826148de565b602082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061498482613c97565b915061498f83613c97565b92508282019050808211156149a7576149a661494a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149e782613c97565b91506149f283613c97565b925082614a0257614a016149ad565b5b828204905092915050565b6000614a1882613c97565b9150614a2383613c97565b925082614a3357614a326149ad565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602183613b7e565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b0a82613c97565b9150614b1583613c97565b9250828202614b2381613c97565b91508282048414831517614b3a57614b3961494a565b5b5092915050565b6000606082019050614b566000830186613d43565b614b636020830185613d19565b614b706040830184613d19565b949350505050565b60008190508160005260206000209050919050565b60008154614b9a816148ad565b614ba481866142b7565b94506001821660008114614bbf5760018114614bd557614c08565b60ff198316865281151560200286019350614c08565b614bde85614b78565b60005b83811015614c0057815481890152600182019150602081019050614be1565b808801955050505b50505092915050565b600060a082019050614c266000830188613d19565b614c336020830187613d19565b614c406040830186613d43565b614c4d6060830185613d43565b8181036080830152614c5f8184614b8d565b90509695505050505050565b600081519050614c7a81613ca1565b92915050565b600060208284031215614c9657614c95613c2f565b5b6000614ca484828501614c6b565b91505092915050565b6000614cb882613c97565b9150614cc383613c97565b9250828203905081811115614cdb57614cda61494a565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614d17601b83613b7e565b9150614d2282614ce1565b602082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b6000606082019050614d626000830186613ea3565b614d6f6020830185613d43565b614d7c6040830184613d43565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614de0602b83613b7e565b9150614deb82614d84565b604082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614e4c601583613b7e565b9150614e5782614e16565b602082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614eb8601483613b7e565b9150614ec382614e82565b602082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614f24601783613b7e565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614f90601a83613b7e565b9150614f9b82614f5a565b602082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614ffc601d83613b7e565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000615068601e83613b7e565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b600081905092915050565b60006150b5838561509e565b93506150c2838584614778565b82840190509392505050565b60006150db8284866150a9565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b600061511d601583613b7e565b9150615128826150e7565b602082019050919050565b6000602082019050818103600083015261514c81615110565b9050919050565b600061515e82613c97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151905761518f61494a565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026152087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826151cb565b61521286836151cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061524f61524a61524584613c97565b61522a565b613c97565b9050919050565b6000819050919050565b61526983615234565b61527d61527582615256565b8484546151d8565b825550505050565b600090565b615292615285565b61529d818484615260565b505050565b5b818110156152c1576152b660008261528a565b6001810190506152a3565b5050565b601f821115615306576152d7816151a6565b6152e0846151bb565b810160208510156152ef578190505b6153036152fb856151bb565b8301826152a2565b50505b505050565b600082821c905092915050565b60006153296000198460080261530b565b1980831691505092915050565b60006153428383615318565b9150826002028217905092915050565b61535c838361519b565b67ffffffffffffffff811115615375576153746146cc565b5b61537f82546148ad565b61538a8282856152c5565b6000601f8311600181146153b957600084156153a7578287013590505b6153b18582615336565b865550615419565b601f1984166153c7866151a6565b60005b828110156153ef578489013582556001820191506020850194506020810190506153ca565b8683101561540c5784890135615408601f891682615318565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f82111561546e5761543f81614b78565b615448846151bb565b81016020851015615457578190505b61546b615463856151bb565b8301826152a2565b50505b505050565b61547d8383615422565b67ffffffffffffffff811115615496576154956146cc565b5b6154a082546148ad565b6154ab82828561542d565b6000601f8311600181146154da57600084156154c8578287013590505b6154d28582615336565b86555061553a565b601f1984166154e886614b78565b60005b82811015615510578489013582556001820191506020850194506020810190506154eb565b8683101561552d5784890135615529601f891682615318565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b600061559f602583613b7e565b91506155aa82615543565b604082019050919050565b600060208201905081810360008301526155ce81615592565b9050919050565b7f4120706f73742077697468207468697320706f7374496420616c72656164792060008201527f6578697374730000000000000000000000000000000000000000000000000000602082015250565b6000615631602683613b7e565b915061563c826155d5565b604082019050919050565b6000602082019050818103600083015261566081615624565b9050919050565b6000813561567481613ca1565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6156b68461567d565b9350801983169250808416831791505092915050565b6156d582615234565b6156e86156e182615256565b835461568a565b8255505050565b600081356156fc81613c6b565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff6157258461567d565b9350801983169250808416831791505092915050565b600061575661575161574c84613c39565b61522a565b613c39565b9050919050565b60006157688261573b565b9050919050565b600061577a8261575d565b9050919050565b6000819050919050565b6157948261576f565b6157a76157a082615781565b8354615705565b8255505050565b6000810160008301806157c081615667565b90506157cc81846156cc565b5050506001810160208301806157e1816156ef565b90506157ed818461578b565b5050505050565b6157fe82826157ae565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061585e602283613b7e565b915061586982615802565b604082019050919050565b6000602082019050818103600083015261588d81615851565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126158bf576158be615894565b5b80830191505092915050565b6000819050919050565b6158de816158cb565b81146158e957600080fd5b50565b600081356158f9816158d5565b80915050919050565b600061591d615918615913846158cb565b61522a565b6158cb565b9050919050565b6000819050919050565b61593782615902565b61594a61594382615924565b835461568a565b8255505050565b6000808335600160200384360303811261596e5761596d615894565b5b80840192508235915067ffffffffffffffff8211156159905761598f615899565b5b6020830192506001820236038313156159ac576159ab61589e565b5b509250929050565b6159bf838383615352565b505050565b6000810160008301806159d6816158ec565b90506159e2818461592e565b50505060018101602083016159f78185615951565b615a028183866159b4565b505050505050565b615a1482826159c4565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b6000615a74602883613b7e565b9150615a7f82615a18565b604082019050919050565b60006020820190508181036000830152615aa381615a67565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615b06602783613b7e565b9150615b1182615aaa565b604082019050919050565b60006020820190508181036000830152615b3581615af9565b9050919050565b6000615b47826158cb565b9150615b52836158cb565b925082820190508281121560008312168382126000841215161715615b7a57615b7961494a565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615bdc602c83613b7e565b9150615be782615b80565b604082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615c6e602d83613b7e565b9150615c7982615c12565b604082019050919050565b60006020820190508181036000830152615c9d81615c61565b9050919050565b6000615cb08385613b7e565b9350615cbd838584614778565b615cc683613bb9565b840190509392505050565b60006020820190508181036000830152615cec818486615ca4565b90509392505050565b6000615d0082613b73565b615d0a818561509e565b9350615d1a818560208601613b8f565b80840191505092915050565b6000615d328284615cf5565b915081905092915050565b6000615d48826158cb565b9150615d53836158cb565b9250828203905081811260008412168282136000851215161715615d7a57615d7961494a565b5b92915050565b6000615d8b826158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008203615dbd57615dbc61494a565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615dfe601883613b7e565b9150615e0982615dc8565b602082019050919050565b60006020820190508181036000830152615e2d81615df1565b9050919050565b6000615e3f826158cb565b9150615e4a836158cb565b9250828202615e58816158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615e9057615e8f61494a565b5b8282058414831517615ea557615ea461494a565b5b5092915050565b6000615eb7826158cb565b9150615ec2836158cb565b925082615ed257615ed16149ad565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615f0b57615f0a61494a565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615f72602683613b7e565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b905091905056fea2646970667358221220faf895315a09bcb24dd1abf25a07e4361dd9f821afce5330ad7d41f7fcaa92d764736f6c63430008180033",
"deployedBytecode": "0x6080604052600436106101665760003560e01c8063642b5bfb116100d1578063a230c5241161008a578063da66863a11610064578063da66863a146105b0578063dd62ed3e146105ed578063e5b4d8271461062a578063f8300fca1461065357610166565b8063a230c524146104ee578063a23362791461052b578063a9059cbb1461057357610166565b8063642b5bfb146103c557806370a08231146103f0578063883802741461042d57806395d89b411461046a578063975762b3146104955780639fbe7c73146104be57610166565b806323b872dd1161012357806323b872dd146102915780632d17c062146102ce578063313ce567146102f757806350cde8ef146103225780635daf08ca1461035f5780635ffc70041461039c57610166565b806306fdde031461016b578063095ea7b31461019657806311aee380146101d357806317906c2e146101fe57806317c182171461022957806318160ddd14610266575b600080fd5b34801561017757600080fd5b50610180610692565b60405161018d9190613c03565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190613ccd565b610724565b6040516101ca9190613d28565b60405180910390f35b3480156101df57600080fd5b506101e8610747565b6040516101f59190613d52565b60405180910390f35b34801561020a57600080fd5b5061021361074d565b6040516102209190613d52565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613d6d565b610753565b60405161025d9190613d28565b60405180910390f35b34801561027257600080fd5b5061027b611135565b6040516102889190613d52565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190613d9a565b61113f565b6040516102c59190613d28565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613e19565b61117c565b005b34801561030357600080fd5b5061030c6111a5565b6040516103199190613e88565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613d6d565b6111ae565b6040516103569190613c03565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613d6d565b61125a565b6040516103939190613eb2565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613d9a565b61128d565b005b3480156103d157600080fd5b506103da6112bc565b6040516103e79190613d52565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613ecd565b6112c2565b6040516104249190613d52565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613efa565b61130a565b6040516104619190613d28565b60405180910390f35b34801561047657600080fd5b5061047f6113a5565b60405161048c9190613c03565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613f4d565b611437565b005b6104d860048036038101906104d39190614091565b61148a565b6040516104e59190613d52565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613ecd565b611944565b6040516105229190613d28565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613d6d565b611964565b60405161056a9c9b9a99989796959493929190614301565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613ccd565b611bde565b6040516105a79190613d28565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906143cb565b611c1b565b6040516105e49190614505565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190614527565b611d04565b6040516106219190613d52565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190614613565b611d8b565b005b34801561065f57600080fd5b5061067a600480360381019061067591906147f7565b61225e565b60405161068993929190614840565b60405180910390f35b6060600380546106a1906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546106cd906148ad565b801561071a5780601f106106ef5761010080835404028352916020019161071a565b820191906000526020600020905b8154815290600101906020018083116106fd57829003601f168201915b5050505050905090565b60008061072f612346565b905061073c81858561234e565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff161515146107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba9061492a565b60405180910390fd5b600080600080600090505b846005015481101561083f5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561081f578160020154846108189190614979565b9350610832565b81600201548361082f9190614979565b92505b80806001019150506107ce565b506002846003015461085191906149dc565b8361085c9190614979565b92506002846003015461086f91906149dc565b8261087a9190614979565b915060006002856003015461088f9190614a0d565b146108a4576001836108a19190614979565b92505b83600e01544211806108c757506108b9611135565b82846108c59190614979565b145b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90614ab0565b60405180910390fd5b836006016001016000600281106109205761091f614ad0565b5b015461092a611135565b6109349190614aff565b82846109409190614979565b8560060160010160016002811061095a57610959614ad0565b5b01546109669190614aff565b11610a9657600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81866000806040516109bc93929190614b41565b60405180910390a183600f0160029054906101000a900460ff1615610a89578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a44959493929190614c11565b6020604051808303816000875af1158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614c80565b505b6000945050505050611130565b83600601600301600060028110610ab057610aaf614ad0565b5b01548284610abe9190614979565b610ac89190614aff565b84600601600301600160028110610ae257610ae1614ad0565b5b015484610aef9190614aff565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b6093929190614b41565b60405180910390a1600085610b755782610b77565b835b905060008060005b8760050154811015610c7f5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c72576000606489600601600501548760020154610bd99190614aff565b610be391906149dc565b90508860060160060160009054906101000a900460ff1615610c4157610c2e8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612360565b8084610c3a9190614979565b9350610c70565b610c6f8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612585565b5b505b8080600101915050610b7f565b508715610e815760028760030154610c9791906149dc565b82610ca29190614979565b915060005b8760050154811015610d8d5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cff57508460010160009054906101000a900460ff161515891515145b15610d805760006064896006016005015486886002015487610d219190614aff565b610d2b91906149dc565b610d359190614aff565b610d3f91906149dc565b90508083610d4d9190614979565b9250610d7e308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610ca7565b5060008183610d9c9190614cad565b9050600060028960030154610db19190614a0d565b14610dc657600181610dc39190614979565b90505b610e7a886001018054610dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e04906148ad565b8015610e515780601f10610e2657610100808354040283529160200191610e51565b820191906000526020600020905b815481529060010190602001808311610e3457829003601f168201915b50505050508260028b60030154610e6891906149dc565b610e729190614979565b600080612607565b5050610f99565b866003015482610e919190614979565b915060005b8760050154811015610f975787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eee57508460010160009054906101000a900460ff161515891515145b15610f8a5760006064896006016005015460028b60030154610f1091906149dc565b87610f1b9190614cad565b886002015487610f2b9190614aff565b610f3591906149dc565b610f3f9190614aff565b610f4991906149dc565b90508083610f579190614979565b9250610f88308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610e96565b505b60005b6006548110156110625760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fe8611135565b610ff1836112c2565b8b600d01546110009190614aff565b61100a91906149dc565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611052573d6000803e3d6000fd5b5050508080600101915050610f9c565b5086600f0160029054906101000a900460ff1615611128578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b81526004016110e3959493929190614c11565b6020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190614c80565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390614d2d565b60405180910390fd5b6000600d6000858152602001908152602001600020905061119f813385856131af565b50505050565b60006009905090565b600981815481106111be57600080fd5b9060005260206000200160009150905080546111d9906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611205906148ad565b80156112525780601f1061122757610100808354040283529160200191611252565b820191906000526020600020905b81548152906001019060200180831161123557829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112988333836132a5565b6112b78383836112a88787611d04565b6112b29190614979565b61234e565b505050565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061132b33858561131c3389611d04565b6113269190614979565b61234e565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161136893929190614d4d565b600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546113b4906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546113e0906148ad565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b5050505050905090565b6000600d60008681526020019081526020016000209050826114598533611d04565b101561146c576114698433611d04565b92505b6114778433856132a5565b611483818585856131af565b5050505050565b60008034116114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614df6565b60405180910390fd5b6001891015611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614e62565b60405180910390fd5b651cae8c13e00089111561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614ece565b60405180910390fd5b8760016002811061156f5761156e614ad0565b5b6020020135600f60006002811061158957611588614ad0565b5b01546115959190614aff565b886000600281106115a9576115a8614ad0565b5b6020020135600f6001600281106115c3576115c2614ad0565b5b01546115cf9190614aff565b1015611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614f3a565b60405180910390fd5b8760016002811061162457611623614ad0565b5b60200201358860006002811061163d5761163c614ad0565b5b60200201351115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614fa6565b60405180910390fd5b8660016002811061169757611696614ad0565b5b6020020135876000600281106116b0576116af614ad0565b5b602002013511156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90615012565b60405180910390fd5b606486111561173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061507e565b60405180910390fd5b600060088c8c60405161174e9291906150ce565b9081526020016040518091039020905060008160020180549050036117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90615133565b60405180910390fd5b600e60008154809291906117bb90615153565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c82600101918261182e929190615352565b503481600d0181905550898160060160010190600261184e929190613b16565b508881600601600301906002611865929190613b16565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a426118a99190614979565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118e9929190615473565b506118f43034613339565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161192c9190613d52565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d60205280600052604060002060009150905080600001549080600101805461198d906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546119b9906148ad565b8015611a065780601f106119db57610100808354040283529160200191611a06565b820191906000526020600020905b8154815290600101906020018083116119e957829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611a93576020028201915b815481526020019060010190808311611a7f575b5050505050815260200160038201600280602002604051908101604052809291908260028015611ad8576020028201915b815481526020019060010190808311611ac4575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611b5b906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611b87906148ad565b8015611bd45780601f10611ba957610100808354040283529160200191611bd4565b820191906000526020600020905b815481529060010190602001808311611bb757829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290614d2d565b60405180910390fd5b6060600060088484604051611c319291906150ce565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611cf75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611c65565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906155b5565b60405180910390fd5b600a6000815480929190611de490615153565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611e26929190615352565b50600060088585604051611e3b9291906150ce565b908152602001604051809103902090506000816002018054905014611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90615647565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611eeb929190615352565b50600080600090505b88889050811015611f8a57888882818110611f1257611f11614ad0565b5b9050604002016000013582611f279190614979565b915082600201898983818110611f4057611f3f614ad0565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f7b91906157f4565b50508080600101915050611ef4565b50620f42408114611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790615874565b60405180910390fd5b60005b8484905081101561204b5782600301858583818110611ff557611ff4614ad0565b5b905060200281019061200791906158a3565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161203c9190615a0a565b50508080600101915050611fd3565b5060008060005b846003018054905081101561216f57600085600301828154811061207957612078614ad0565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc08112156120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790615a8a565b60405180910390fd5b620f4240811315612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90615b1c565b60405180910390fd5b600081131561215257808461214b9190615b3c565b9350612161565b808361215e9190615b3c565b92505b508080600101915050612052565b50620f42408213156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90615bf2565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090615c84565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af249727888860405161224a929190615cd1565b60405180910390a150505050505050505050565b600881805160208101820180518482526020830160208501208183528095505050505050600091509050806000018054612297906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546122c3906148ad565b80156123105780601f106122e557610100808354040283529160200191612310565b820191906000526020600020905b8154815290600101906020018083116122f357829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b61235b83838360016133bb565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b25780600260008282546123a69190614979565b92505081905550612485565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561243e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161243593929190614d4d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ce578060026000828254039250508190555061251b565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125789190613d52565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f75760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125ee9190613eb2565b60405180910390fd5b61260382600083612360565b5050565b6000600c54821061261a578390506131a7565b600060088660405161262c9190615d26565b90815260200160405180910390209050600081600201805490500361265457849150506131a7565b60005b816003018054905081101561278857600082600301828154811061267e5761267d614ad0565b5b906000526020600020906002020160000154121561277b5761276d878360030183815481106126b0576126af614ad0565b5b9060005260206000209060020201604051806040016040529081600082015481526020016001820180546126e3906148ad565b80601f016020809104026020016040519081016040528092919081815260200182805461270f906148ad565b801561275c5780601f106127315761010080835404028352916020019161275c565b820191906000526020600020905b81548152906001019060200180831161273f57829003601f168201915b505050505081525050888888613592565b866127789190615d3d565b95505b8080600101915050612657565b5060005b81600301805490508110156128bd5760008260030182815481106127b3576127b2614ad0565b5b90600052602060002090600202016000015413156128b0576128a2878360030183815481106127e5576127e4614ad0565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612818906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612844906148ad565b80156128915780601f1061286657610100808354040283529160200191612891565b820191906000526020600020905b81548152906001019060200180831161287457829003601f168201915b505050505081525050888888613592565b866128ad9190615d3d565b95505b808060010191505061278c565b506000851315612ba957612b88816040518060a00160405290816000820180546128e6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612912906148ad565b801561295f5780601f106129345761010080835404028352916020019161295f565b820191906000526020600020905b81548152906001019060200180831161294257829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612a755783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050815260200190600101906129e3565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612b70578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612adf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0b906148ad565b8015612b585780601f10612b2d57610100808354040283529160200191612b58565b820191906000526020600020905b815481529060010190602001808311612b3b57829003601f168201915b50505050508152505081526020019060010190612aa2565b5050505081526020016004820154815250508661375d565b5084816004016000828254612b9d9190614979565b925050819055506131a5565b6000858260040154612bbb9190615b3c565b12612eac57612e81816040518060a0016040529081600082018054612bdf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612c0b906148ad565b8015612c585780601f10612c2d57610100808354040283529160200191612c58565b820191906000526020600020905b815481529060010190602001808311612c3b57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612d6e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612cdc565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612e69578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612e04906148ad565b8015612e515780601f10612e2657610100808354040283529160200191612e51565b820191906000526020600020905b815481529060010190602001808311612e3457829003601f168201915b50505050508152505081526020019060010190612d9b565b5050505081526020016004820154815250508661375d565b915084612e8d90615d80565b816004016000828254612ea09190614cad565b925050819055506131a4565b848160040154612ebc9190615b3c565b915061318c816040518060a0016040529081600082018054612edd906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612f09906148ad565b8015612f565780601f10612f2b57610100808354040283529160200191612f56565b820191906000526020600020905b815481529060010190602001808311612f3957829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561306c5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612fda565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131675783829060005260206000209060020201604051806040016040529081600082015481526020016001820180546130d6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054613102906148ad565b801561314f5780601f106131245761010080835404028352916020019161314f565b820191906000526020600020905b81548152906001019060200180831161313257829003601f168201915b50505050508152505081526020019060010190613099565b505050508152602001600482015481525050826004015461318790615d80565b61375d565b826131979190615b3c565b9150600081600401819055505b5b505b949350505050565b83600e01544211156131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90615e14565b60405180910390fd5b600084600501600081548092919061320d90615153565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006132b18484611d04565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146133335781811015613323578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161331a93929190614d4d565b60405180910390fd5b613332848484840360006133bb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133ab5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016133a29190613eb2565b60405180910390fd5b6133b760008383612360565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361342d5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016134249190613eb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361349f5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016134969190613eb2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561358c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516135839190613d52565b60405180910390a35b50505050565b6000620f42408560000151856135a89190615e34565b6135b29190615eac565b9050600085602001515103613614576000811215613605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fc90615f88565b60405180910390fd5b61360f3082612585565b613754565b6000600b876040516136269190615d26565b908152602001604051809103902086602001516040516136469190615d26565b908152602001604051809103902054905083156136b357600082121561368e578061367090615d80565b8213613685578061368090615d80565b613687565b815b91506136b2565b8061369890615d80565b82126136ad57806136a890615d80565b6136af565b815b91505b5b60006136ec87602001518487806136da57506000871480156136d9575060008a60000151125b5b6001886136e79190614979565b612607565b905080836136fa9190615d3d565b925082600b8960405161370d9190615d26565b9081526020016040518091039020886020015160405161372d9190615d26565b9081526020016040518091039020600082825461374a9190615b3c565b9250508190555050505b95945050505050565b60008060005b8460400151518110156138b75760008560400151828151811061378957613788614ad0565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138a95780600560006006600081548092919061380090615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508080600101915050613763565b5060005b846040015151811015613b0e576000856040015182815181106138e1576138e0614ad0565b5b60200260200101519050600060018760400151516138ff9190614cad565b83101561393957620f424082600001518761391a9190615e34565b6139249190615eac565b905080846139329190615b3c565b9350613948565b83866139459190615d3d565b90505b6000811315613a835761396030836020015183612360565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a7e57816020015160056000600660008154809291906139d190615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613aff565b80613a8d90615d80565b613a9a83602001516112c2565b1015613ae557613aad82602001516112c2565b81613ab89190615b3c565b85613ac39190615b3c565b9450613ae0826020015130613adb85602001516112c2565b612360565b613afe565b613afd82602001513083613af890615d80565b612360565b5b5b505080806001019150506138bb565b505092915050565b8260028101928215613b45579160200282015b82811115613b44578235825591602001919060010190613b29565b5b509050613b529190613b56565b5090565b5b80821115613b6f576000816000905550600101613b57565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bad578082015181840152602081019050613b92565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bd582613b73565b613bdf8185613b7e565b9350613bef818560208601613b8f565b613bf881613bb9565b840191505092915050565b60006020820190508181036000830152613c1d8184613bca565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6482613c39565b9050919050565b613c7481613c59565b8114613c7f57600080fd5b50565b600081359050613c9181613c6b565b92915050565b6000819050919050565b613caa81613c97565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b60008060408385031215613ce457613ce3613c2f565b5b6000613cf285828601613c82565b9250506020613d0385828601613cb8565b9150509250929050565b60008115159050919050565b613d2281613d0d565b82525050565b6000602082019050613d3d6000830184613d19565b92915050565b613d4c81613c97565b82525050565b6000602082019050613d676000830184613d43565b92915050565b600060208284031215613d8357613d82613c2f565b5b6000613d9184828501613cb8565b91505092915050565b600080600060608486031215613db357613db2613c2f565b5b6000613dc186828701613c82565b9350506020613dd286828701613c82565b9250506040613de386828701613cb8565b9150509250925092565b613df681613d0d565b8114613e0157600080fd5b50565b600081359050613e1381613ded565b92915050565b600080600060608486031215613e3257613e31613c2f565b5b6000613e4086828701613cb8565b9350506020613e5186828701613cb8565b9250506040613e6286828701613e04565b9150509250925092565b600060ff82169050919050565b613e8281613e6c565b82525050565b6000602082019050613e9d6000830184613e79565b92915050565b613eac81613c59565b82525050565b6000602082019050613ec76000830184613ea3565b92915050565b600060208284031215613ee357613ee2613c2f565b5b6000613ef184828501613c82565b91505092915050565b600080600060608486031215613f1357613f12613c2f565b5b6000613f2186828701613c82565b9350506020613f3286828701613cb8565b9250506040613f4386828701613cb8565b9150509250925092565b60008060008060808587031215613f6757613f66613c2f565b5b6000613f7587828801613cb8565b9450506020613f8687828801613c82565b9350506040613f9787828801613cb8565b9250506060613fa887828801613e04565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613fd957613fd8613fb4565b5b8235905067ffffffffffffffff811115613ff657613ff5613fb9565b5b60208301915083600182028301111561401257614011613fbe565b5b9250929050565b60008190508260206002028201111561403557614034613fbe565b5b92915050565b60008083601f84011261405157614050613fb4565b5b8235905067ffffffffffffffff81111561406e5761406d613fb9565b5b60208301915083600182028301111561408a57614089613fbe565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140b5576140b4613c2f565b5b60008b013567ffffffffffffffff8111156140d3576140d2613c34565b5b6140df8d828e01613fc3565b9a509a505060206140f28d828e01613cb8565b98505060406141038d828e01614019565b97505060806141148d828e01614019565b96505060c06141258d828e01613cb8565b95505060e06141368d828e01613e04565b9450506101006141488d828e01613e04565b9350506101208b013567ffffffffffffffff81111561416a57614169613c34565b5b6141768d828e0161403b565b92509250509295989b9194979a5092959850565b61419381613c97565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b60006141c5838361418a565b60208301905092915050565b6000602082019050919050565b6141e781614199565b6141f181846141a4565b92506141fc826141af565b8060005b8381101561422d57815161421487826141b9565b965061421f836141d1565b925050600181019050614200565b505050505050565b61423e81613d0d565b82525050565b60e08201600082015161425a600085018261418a565b50602082015161426d60208501826141de565b50604082015161428060608501826141de565b50606082015161429360a085018261418a565b5060808201516142a660c0850182614235565b50505050565b600081519050919050565b600082825260208201905092915050565b60006142d3826142ac565b6142dd81856142b7565b93506142ed818560208601613b8f565b6142f681613bb9565b840191505092915050565b600061024082019050614317600083018f613d43565b8181036020830152614329818e613bca565b9050614338604083018d613ea3565b614345606083018c613d43565b614352608083018b613d43565b61435f60a083018a614244565b61436d610180830189613d43565b61437b6101a0830188613d43565b6143896101c0830187613d19565b6143976101e0830186613d19565b6143a5610200830185613d19565b8181036102208301526143b881846142c8565b90509d9c50505050505050505050505050565b600080602083850312156143e2576143e1613c2f565b5b600083013567ffffffffffffffff811115614400576143ff613c34565b5b61440c85828601613fc3565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61444d81613c59565b82525050565b604082016000820151614469600085018261418a565b50602082015161447c6020850182614444565b50505050565b600061448e8383614453565b60408301905092915050565b6000602082019050919050565b60006144b282614418565b6144bc8185614423565b93506144c783614434565b8060005b838110156144f85781516144df8882614482565b97506144ea8361449a565b9250506001810190506144cb565b5085935050505092915050565b6000602082019050818103600083015261451f81846144a7565b905092915050565b6000806040838503121561453e5761453d613c2f565b5b600061454c85828601613c82565b925050602061455d85828601613c82565b9150509250929050565b60008083601f84011261457d5761457c613fb4565b5b8235905067ffffffffffffffff81111561459a57614599613fb9565b5b6020830191508360408202830111156145b6576145b5613fbe565b5b9250929050565b60008083601f8401126145d3576145d2613fb4565b5b8235905067ffffffffffffffff8111156145f0576145ef613fb9565b5b60208301915083602082028301111561460c5761460b613fbe565b5b9250929050565b600080600080600080606087890312156146305761462f613c2f565b5b600087013567ffffffffffffffff81111561464e5761464d613c34565b5b61465a89828a01614567565b9650965050602087013567ffffffffffffffff81111561467d5761467c613c34565b5b61468989828a01613fc3565b9450945050604087013567ffffffffffffffff8111156146ac576146ab613c34565b5b6146b889828a016145bd565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61470482613bb9565b810181811067ffffffffffffffff82111715614723576147226146cc565b5b80604052505050565b6000614736613c25565b905061474282826146fb565b919050565b600067ffffffffffffffff821115614762576147616146cc565b5b61476b82613bb9565b9050602081019050919050565b82818337600083830152505050565b600061479a61479584614747565b61472c565b9050828152602081018484840111156147b6576147b56146c7565b5b6147c1848285614778565b509392505050565b600082601f8301126147de576147dd613fb4565b5b81356147ee848260208601614787565b91505092915050565b60006020828403121561480d5761480c613c2f565b5b600082013567ffffffffffffffff81111561482b5761482a613c34565b5b614837848285016147c9565b91505092915050565b6000606082019050818103600083015261485a8186613bca565b90506148696020830185613ea3565b6148766040830184613d43565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148c557607f821691505b6020821081036148d8576148d761487e565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000614914601883613b7e565b915061491f826148de565b602082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061498482613c97565b915061498f83613c97565b92508282019050808211156149a7576149a661494a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149e782613c97565b91506149f283613c97565b925082614a0257614a016149ad565b5b828204905092915050565b6000614a1882613c97565b9150614a2383613c97565b925082614a3357614a326149ad565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602183613b7e565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b0a82613c97565b9150614b1583613c97565b9250828202614b2381613c97565b91508282048414831517614b3a57614b3961494a565b5b5092915050565b6000606082019050614b566000830186613d43565b614b636020830185613d19565b614b706040830184613d19565b949350505050565b60008190508160005260206000209050919050565b60008154614b9a816148ad565b614ba481866142b7565b94506001821660008114614bbf5760018114614bd557614c08565b60ff198316865281151560200286019350614c08565b614bde85614b78565b60005b83811015614c0057815481890152600182019150602081019050614be1565b808801955050505b50505092915050565b600060a082019050614c266000830188613d19565b614c336020830187613d19565b614c406040830186613d43565b614c4d6060830185613d43565b8181036080830152614c5f8184614b8d565b90509695505050505050565b600081519050614c7a81613ca1565b92915050565b600060208284031215614c9657614c95613c2f565b5b6000614ca484828501614c6b565b91505092915050565b6000614cb882613c97565b9150614cc383613c97565b9250828203905081811115614cdb57614cda61494a565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614d17601b83613b7e565b9150614d2282614ce1565b602082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b6000606082019050614d626000830186613ea3565b614d6f6020830185613d43565b614d7c6040830184613d43565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614de0602b83613b7e565b9150614deb82614d84565b604082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614e4c601583613b7e565b9150614e5782614e16565b602082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614eb8601483613b7e565b9150614ec382614e82565b602082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614f24601783613b7e565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614f90601a83613b7e565b9150614f9b82614f5a565b602082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614ffc601d83613b7e565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000615068601e83613b7e565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b600081905092915050565b60006150b5838561509e565b93506150c2838584614778565b82840190509392505050565b60006150db8284866150a9565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b600061511d601583613b7e565b9150615128826150e7565b602082019050919050565b6000602082019050818103600083015261514c81615110565b9050919050565b600061515e82613c97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151905761518f61494a565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026152087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826151cb565b61521286836151cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061524f61524a61524584613c97565b61522a565b613c97565b9050919050565b6000819050919050565b61526983615234565b61527d61527582615256565b8484546151d8565b825550505050565b600090565b615292615285565b61529d818484615260565b505050565b5b818110156152c1576152b660008261528a565b6001810190506152a3565b5050565b601f821115615306576152d7816151a6565b6152e0846151bb565b810160208510156152ef578190505b6153036152fb856151bb565b8301826152a2565b50505b505050565b600082821c905092915050565b60006153296000198460080261530b565b1980831691505092915050565b60006153428383615318565b9150826002028217905092915050565b61535c838361519b565b67ffffffffffffffff811115615375576153746146cc565b5b61537f82546148ad565b61538a8282856152c5565b6000601f8311600181146153b957600084156153a7578287013590505b6153b18582615336565b865550615419565b601f1984166153c7866151a6565b60005b828110156153ef578489013582556001820191506020850194506020810190506153ca565b8683101561540c5784890135615408601f891682615318565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f82111561546e5761543f81614b78565b615448846151bb565b81016020851015615457578190505b61546b615463856151bb565b8301826152a2565b50505b505050565b61547d8383615422565b67ffffffffffffffff811115615496576154956146cc565b5b6154a082546148ad565b6154ab82828561542d565b6000601f8311600181146154da57600084156154c8578287013590505b6154d28582615336565b86555061553a565b601f1984166154e886614b78565b60005b82811015615510578489013582556001820191506020850194506020810190506154eb565b8683101561552d5784890135615529601f891682615318565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b600061559f602583613b7e565b91506155aa82615543565b604082019050919050565b600060208201905081810360008301526155ce81615592565b9050919050565b7f4120706f73742077697468207468697320706f7374496420616c72656164792060008201527f6578697374730000000000000000000000000000000000000000000000000000602082015250565b6000615631602683613b7e565b915061563c826155d5565b604082019050919050565b6000602082019050818103600083015261566081615624565b9050919050565b6000813561567481613ca1565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6156b68461567d565b9350801983169250808416831791505092915050565b6156d582615234565b6156e86156e182615256565b835461568a565b8255505050565b600081356156fc81613c6b565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff6157258461567d565b9350801983169250808416831791505092915050565b600061575661575161574c84613c39565b61522a565b613c39565b9050919050565b60006157688261573b565b9050919050565b600061577a8261575d565b9050919050565b6000819050919050565b6157948261576f565b6157a76157a082615781565b8354615705565b8255505050565b6000810160008301806157c081615667565b90506157cc81846156cc565b5050506001810160208301806157e1816156ef565b90506157ed818461578b565b5050505050565b6157fe82826157ae565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061585e602283613b7e565b915061586982615802565b604082019050919050565b6000602082019050818103600083015261588d81615851565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126158bf576158be615894565b5b80830191505092915050565b6000819050919050565b6158de816158cb565b81146158e957600080fd5b50565b600081356158f9816158d5565b80915050919050565b600061591d615918615913846158cb565b61522a565b6158cb565b9050919050565b6000819050919050565b61593782615902565b61594a61594382615924565b835461568a565b8255505050565b6000808335600160200384360303811261596e5761596d615894565b5b80840192508235915067ffffffffffffffff8211156159905761598f615899565b5b6020830192506001820236038313156159ac576159ab61589e565b5b509250929050565b6159bf838383615352565b505050565b6000810160008301806159d6816158ec565b90506159e2818461592e565b50505060018101602083016159f78185615951565b615a028183866159b4565b505050505050565b615a1482826159c4565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b6000615a74602883613b7e565b9150615a7f82615a18565b604082019050919050565b60006020820190508181036000830152615aa381615a67565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615b06602783613b7e565b9150615b1182615aaa565b604082019050919050565b60006020820190508181036000830152615b3581615af9565b9050919050565b6000615b47826158cb565b9150615b52836158cb565b925082820190508281121560008312168382126000841215161715615b7a57615b7961494a565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615bdc602c83613b7e565b9150615be782615b80565b604082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615c6e602d83613b7e565b9150615c7982615c12565b604082019050919050565b60006020820190508181036000830152615c9d81615c61565b9050919050565b6000615cb08385613b7e565b9350615cbd838584614778565b615cc683613bb9565b840190509392505050565b60006020820190508181036000830152615cec818486615ca4565b90509392505050565b6000615d0082613b73565b615d0a818561509e565b9350615d1a818560208601613b8f565b80840191505092915050565b6000615d328284615cf5565b915081905092915050565b6000615d48826158cb565b9150615d53836158cb565b9250828203905081811260008412168282136000851215161715615d7a57615d7961494a565b5b92915050565b6000615d8b826158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008203615dbd57615dbc61494a565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615dfe601883613b7e565b9150615e0982615dc8565b602082019050919050565b60006020820190508181036000830152615e2d81615df1565b9050919050565b6000615e3f826158cb565b9150615e4a836158cb565b9250828202615e58816158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615e9057615e8f61494a565b5b8282058414831517615ea557615ea461494a565b5b5092915050565b6000615eb7826158cb565b9150615ec2836158cb565b925082615ed257615ed16149ad565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615f0b57615f0a61494a565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615f72602683613b7e565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b905091905056fea2646970667358221220faf895315a09bcb24dd1abf25a07e4361dd9f821afce5330ad7d41f7fcaa92d764736f6c63430008180033",
"linkReferences": {},
"deployedLinkReferences": {}
}