dgf-prototype/backend/contractArtifacts/DAO.json

828 lines
115 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": "weightPercent",
"type": "uint256"
},
{
"internalType": "address",
"name": "authorAddress",
"type": "address"
}
],
"internalType": "struct Author[]",
"name": "authors",
"type": "tuple[]"
},
{
"internalType": "string",
"name": "contentId",
"type": "string"
},
{
"components": [
{
"internalType": "int256",
"name": "weightPercent",
"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": "string",
"name": "postId",
"type": "string"
}
],
"name": "getPostAuthors",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "weightPercent",
"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": "0x60806040526003600c556040518060400160405280600160ff168152602001600a60ff16815250600f90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b615f1780620004b96000396000f3fe60806040526004361061014b5760003560e01c806370a08231116100b6578063a23362791161006f578063a2336279146104e7578063a9059cbb1461052f578063da66863a1461056c578063dd62ed3e146105a9578063e5b4d827146105e6578063f8300fca1461060f5761014b565b806370a08231146103ac57806388380274146103e957806395d89b4114610426578063975762b3146104515780639fbe7c731461047a578063a230c524146104aa5761014b565b806323b872dd1161010857806323b872dd146102765780632d17c062146102b3578063313ce567146102dc57806350cde8ef146103075780635daf08ca14610344578063642b5bfb146103815761014b565b806306fdde0314610150578063095ea7b31461017b57806311aee380146101b857806317906c2e146101e357806317c182171461020e57806318160ddd1461024b575b600080fd5b34801561015c57600080fd5b5061016561064e565b6040516101729190613b62565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190613c2c565b6106e0565b6040516101af9190613c87565b60405180910390f35b3480156101c457600080fd5b506101cd610703565b6040516101da9190613cb1565b60405180910390f35b3480156101ef57600080fd5b506101f8610709565b6040516102059190613cb1565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613ccc565b61070f565b6040516102429190613c87565b60405180910390f35b34801561025757600080fd5b506102606110ed565b60405161026d9190613cb1565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613cf9565b6110f7565b6040516102aa9190613c87565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613d78565b611134565b005b3480156102e857600080fd5b506102f161115d565b6040516102fe9190613de7565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613ccc565b611166565b60405161033b9190613b62565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613ccc565b611212565b6040516103789190613e11565b60405180910390f35b34801561038d57600080fd5b50610396611245565b6040516103a39190613cb1565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613e2c565b61124b565b6040516103e09190613cb1565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613e59565b611293565b60405161041d9190613c87565b60405180910390f35b34801561043257600080fd5b5061043b61131a565b6040516104489190613b62565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613eac565b6113ac565b005b610494600480360381019061048f9190613ff0565b6113e1565b6040516104a19190613cb1565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613e2c565b61189b565b6040516104de9190613c87565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613ccc565b6118bb565b6040516105269c9b9a99989796959493929190614260565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613c2c565b611b35565b6040516105639190613c87565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e919061432a565b611b72565b6040516105a09190614464565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614486565b611c5b565b6040516105dd9190613cb1565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190614572565b611ce2565b005b34801561061b57600080fd5b5061063660048036038101906106319190614756565b6121af565b6040516106459392919061479f565b60405180910390f35b60606003805461065d9061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546106899061480c565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b6000806106eb612297565b90506106f881858561229f565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff1615151461077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690614889565b60405180910390fd5b600080600080600090505b84600501548110156107fb5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107db578160020154846107d491906148d8565b93506107ee565b8160020154836107eb91906148d8565b92505b808060010191505061078a565b506002846003015461080d919061493b565b8361081891906148d8565b92506002846003015461082b919061493b565b8261083691906148d8565b915060006002856003015461084b919061496c565b146108605760018361085d91906148d8565b92505b83600e015442118061088357506108756110ed565b828461088191906148d8565b145b6108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990614a0f565b60405180910390fd5b836006016001016000600281106108dc576108db614a2f565b5b01546108e66110ed565b6108f09190614a5e565b82846108fc91906148d8565b8560060160010160016002811061091657610915614a2f565b5b01546109229190614a5e565b11610a5257600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de818660008060405161097893929190614aa0565b60405180910390a183600f0160029054906101000a900460ff1615610a45578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a00959493929190614b70565b6020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614bdf565b505b60009450505050506110e8565b83600601600301600060028110610a6c57610a6b614a2f565b5b01548284610a7a91906148d8565b610a849190614a5e565b84600601600301600160028110610a9e57610a9d614a2f565b5b015484610aab9190614a5e565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b1c93929190614aa0565b60405180910390a1600085610b315782610b33565b835b905060008060005b8760050154811015610c3b5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c2e576000606489600601600501548760020154610b959190614a5e565b610b9f919061493b565b90508860060160060160009054906101000a900460ff1615610bfd57610bea8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630836122b1565b8084610bf691906148d8565b9350610c2c565b610c2b8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124d6565b5b505b8080600101915050610b3b565b508715610e395760028760030154610c53919061493b565b82610c5e91906148d8565b915060005b8760050154811015610d495787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cbb57508460010160009054906101000a900460ff161515891515145b15610d3c5760006064896006016005015486886002015487610cdd9190614a5e565b610ce7919061493b565b610cf19190614a5e565b610cfb919061493b565b90508083610d0991906148d8565b9250610d3a308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122b1565b505b8080600101915050610c63565b5060008183610d589190614c0c565b9050600060028960030154610d6d919061496c565b14610d8257600181610d7f91906148d8565b90505b610e33886001018054610d949061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc09061480c565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b50505050508260028b60030154610e24919061493b565b610e2e91906148d8565b612558565b50610f51565b866003015482610e4991906148d8565b915060005b8760050154811015610f4f5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610ea657508460010160009054906101000a900460ff161515891515145b15610f425760006064896006016005015460028b60030154610ec8919061493b565b87610ed39190614c0c565b886002015487610ee39190614a5e565b610eed919061493b565b610ef79190614a5e565b610f01919061493b565b90508083610f0f91906148d8565b9250610f40308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122b1565b505b8080600101915050610e4e565b505b60005b60065481101561101a5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fa06110ed565b610fa98361124b565b8b600d0154610fb89190614a5e565b610fc2919061493b565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561100a573d6000803e3d6000fd5b5050508080600101915050610f54565b5086600f0160029054906101000a900460ff16156110e0578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b815260040161109b959493929190614b70565b6020604051808303816000875af11580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190614bdf565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90614c8c565b60405180910390fd5b6000600d600085815260200190815260200160002090506111578133858561256a565b50505050565b60006009905090565b6009818154811061117657600080fd5b9060005260206000200160009150905080546111919061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546111bd9061480c565b801561120a5780601f106111df5761010080835404028352916020019161120a565b820191906000526020600020905b8154815290600101906020018083116111ed57829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a033858561229f565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016112dd93929190614cac565b600060405180830381600087803b1580156112f757600080fd5b505af115801561130b573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546113299061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546113559061480c565b80156113a25780601f10611377576101008083540402835291602001916113a2565b820191906000526020600020905b81548152906001019060200180831161138557829003601f168201915b5050505050905090565b6000600d600086815260200190815260200160002090506113ce843385612660565b6113da8185858561256a565b5050505050565b6000803411611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614d55565b60405180910390fd5b6001891015611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090614dc1565b60405180910390fd5b651cae8c13e0008911156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614e2d565b60405180910390fd5b876001600281106114c6576114c5614a2f565b5b6020020135600f6000600281106114e0576114df614a2f565b5b01546114ec9190614a5e565b88600060028110611500576114ff614a2f565b5b6020020135600f60016002811061151a57611519614a2f565b5b01546115269190614a5e565b1015611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614e99565b60405180910390fd5b8760016002811061157b5761157a614a2f565b5b60200201358860006002811061159457611593614a2f565b5b602002013511156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614f05565b60405180910390fd5b866001600281106115ee576115ed614a2f565b5b60200201358760006002811061160757611606614a2f565b5b6020020135111561164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490614f71565b60405180910390fd5b6064861115611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168890614fdd565b60405180910390fd5b600060088c8c6040516116a592919061502d565b9081526020016040518091039020905060008160020180549050036116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690615092565b60405180910390fd5b600e6000815480929190611712906150b2565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c8260010191826117859291906152b1565b503481600d018190555089816006016001019060026117a5929190613a75565b5088816006016003019060026117bc929190613a75565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a4261180091906148d8565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118409291906153d2565b5061184b30346126f4565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118839190613cb1565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090508060000154908060010180546118e49061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546119109061480c565b801561195d5780601f106119325761010080835404028352916020019161195d565b820191906000526020600020905b81548152906001019060200180831161194057829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156119ea576020028201915b8154815260200190600101908083116119d6575b5050505050815260200160038201600280602002604051908101604052809291908260028015611a2f576020028201915b815481526020019060010190808311611a1b575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ab29061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ade9061480c565b8015611b2b5780601f10611b0057610100808354040283529160200191611b2b565b820191906000526020600020905b815481529060010190602001808311611b0e57829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614c8c565b60405180910390fd5b6060600060088484604051611b8892919061502d565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611c4e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611bbc565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f90615514565b60405180910390fd5b600a6000815480929190611d3b906150b2565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611d7d9291906152b1565b50600060088585604051611d9292919061502d565b908152602001604051809103902090506000816002018054905014611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de3906155a6565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611e429291906152b1565b50600080600090505b88889050811015611ee157888882818110611e6957611e68614a2f565b5b9050604002016000013582611e7e91906148d8565b915082600201898983818110611e9757611e96614a2f565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611ed29190615753565b50508080600101915050611e4b565b5060648114611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906157ad565b60405180910390fd5b60005b84849050811015611fa05782600301858583818110611f4a57611f49614a2f565b5b9050602002810190611f5c91906157dc565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f919190615943565b50508080600101915050611f28565b5060008060005b84600301805490508110156120c2576000856003018281548110611fce57611fcd614a2f565b5b90600052602060002090600202016000015490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c811215612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c906159c3565b60405180910390fd5b6064811315612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090615a55565b60405180910390fd5b60008113156120a557808461209e9190615a75565b93506120b4565b80836120b19190615a75565b92505b508080600101915050611fa7565b506064821315612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90615b2b565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c81121561216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190615bbd565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af249727888860405161219b929190615c0a565b60405180910390a150505050505050505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546121e89061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546122149061480c565b80156122615780601f1061223657610100808354040283529160200191612261565b820191906000526020600020905b81548152906001019060200180831161224457829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b6122ac8383836001612776565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123035780600260008282546122f791906148d8565b925050819055506123d6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561238f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161238693929190614cac565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361241f578060026000828254039250508190555061246c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124c99190613cb1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125485760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161253f9190613e11565b60405180910390fd5b612554826000836122b1565b5050565b612565828260008061294d565b505050565b83600e01544211156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890615c7a565b60405180910390fd5b60008460050160008154809291906125c8906150b2565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600061266c8484611c5b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126ee57818110156126de578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016126d593929190614cac565b60405180910390fd5b6126ed84848484036000612776565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127665760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161275d9190613e11565b60405180910390fd5b612772600083836122b1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127e85760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016127df9190613e11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285a5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016128519190613e11565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612947578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161293e9190613cb1565b60405180910390a35b50505050565b6000600c548210612960578390506134ed565b60006008866040516129729190615ccb565b90815260200160405180910390209050600081600201805490500361299a57849150506134ed565b60005b8160030180549050811015612ace5760008260030182815481106129c4576129c3614a2f565b5b9060005260206000209060020201600001541215612ac157612ab3878360030183815481106129f6576129f5614a2f565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a299061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612a559061480c565b8015612aa25780601f10612a7757610100808354040283529160200191612aa2565b820191906000526020600020905b815481529060010190602001808311612a8557829003601f168201915b5050505050815250508888886134f5565b86612abe9190615ce2565b95505b808060010191505061299d565b5060005b8160030180549050811015612c03576000826003018281548110612af957612af8614a2f565b5b9060005260206000209060020201600001541315612bf657612be887836003018381548110612b2b57612b2a614a2f565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612b5e9061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612b8a9061480c565b8015612bd75780601f10612bac57610100808354040283529160200191612bd7565b820191906000526020600020905b815481529060010190602001808311612bba57829003601f168201915b5050505050815250508888886134f5565b86612bf39190615ce2565b95505b8080600101915050612ad2565b506000851315612eef57612ece816040518060a0016040529081600082018054612c2c9061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c589061480c565b8015612ca55780601f10612c7a57610100808354040283529160200191612ca5565b820191906000526020600020905b815481529060010190602001808311612c8857829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612dbb5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612d29565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612eb6578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612e259061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612e519061480c565b8015612e9e5780601f10612e7357610100808354040283529160200191612e9e565b820191906000526020600020905b815481529060010190602001808311612e8157829003601f168201915b50505050508152505081526020019060010190612de8565b505050508152602001600482015481525050866136be565b5084816004016000828254612ee391906148d8565b925050819055506134eb565b6000858260040154612f019190615a75565b126131f2576131c7816040518060a0016040529081600082018054612f259061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f519061480c565b8015612f9e5780601f10612f7357610100808354040283529160200191612f9e565b820191906000526020600020905b815481529060010190602001808311612f8157829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156130b45783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190613022565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131af57838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461311e9061480c565b80601f016020809104026020016040519081016040528092919081815260200182805461314a9061480c565b80156131975780601f1061316c57610100808354040283529160200191613197565b820191906000526020600020905b81548152906001019060200180831161317a57829003601f168201915b505050505081525050815260200190600101906130e1565b505050508152602001600482015481525050866136be565b9150846131d390615d25565b8160040160008282546131e69190614c0c565b925050819055506134ea565b8481600401546132029190615a75565b91506134d2816040518060a00160405290816000820180546132239061480c565b80601f016020809104026020016040519081016040528092919081815260200182805461324f9061480c565b801561329c5780601f106132715761010080835404028352916020019161329c565b820191906000526020600020905b81548152906001019060200180831161327f57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156133b25783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190613320565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156134ad57838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461341c9061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546134489061480c565b80156134955780601f1061346a57610100808354040283529160200191613495565b820191906000526020600020905b81548152906001019060200180831161347857829003601f168201915b505050505081525050815260200190600101906133df565b50505050815260200160048201548152505082600401546134cd90615d25565b6136be565b826134dd9190615a75565b9150600081600401819055505b5b505b949350505050565b600060648560000151856135099190615d6d565b6135139190615de5565b9050600085602001515103613575576000811215613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90615ec1565b60405180910390fd5b61357030826124d6565b6136b5565b6000600b876040516135879190615ccb565b908152602001604051809103902086602001516040516135a79190615ccb565b908152602001604051809103902054905083156136145760008212156135ef57806135d190615d25565b82136135e657806135e190615d25565b6135e8565b815b9150613613565b806135f990615d25565b821261360e578061360990615d25565b613610565b815b91505b5b600061364d876020015184878061363b575060008714801561363a575060008a60000151125b5b60018861364891906148d8565b61294d565b9050808361365b9190615ce2565b925082600b8960405161366e9190615ccb565b9081526020016040518091039020886020015160405161368e9190615ccb565b908152602001604051809103902060008282546136ab9190615a75565b9250508190555050505b95945050505050565b60008060005b846040015151811015613818576000856040015182815181106136ea576136e9614a2f565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661380a57806005600060066000815480929190613761906150b2565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806001019150506136c4565b5060005b846040015151811015613a6d5760008560400151828151811061384257613841614a2f565b5b60200260200101519050600060018760400151516138609190614c0c565b8310156138985760648260000151876138799190615d6d565b6138839190615de5565b905080846138919190615a75565b93506138a7565b83866138a49190615ce2565b90505b60008113156139e2576138bf308360200151836122b1565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139dd5781602001516005600060066000815480929190613930906150b2565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613a5e565b806139ec90615d25565b6139f9836020015161124b565b1015613a4457613a0c826020015161124b565b81613a179190615a75565b85613a229190615a75565b9450613a3f826020015130613a3a856020015161124b565b6122b1565b613a5d565b613a5c82602001513083613a5790615d25565b6122b1565b5b5b5050808060010191505061381c565b505092915050565b8260028101928215613aa4579160200282015b82811115613aa3578235825591602001919060010190613a88565b5b509050613ab19190613ab5565b5090565b5b80821115613ace576000816000905550600101613ab6565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b0c578082015181840152602081019050613af1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b3482613ad2565b613b3e8185613add565b9350613b4e818560208601613aee565b613b5781613b18565b840191505092915050565b60006020820190508181036000830152613b7c8184613b29565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bc382613b98565b9050919050565b613bd381613bb8565b8114613bde57600080fd5b50565b600081359050613bf081613bca565b92915050565b6000819050919050565b613c0981613bf6565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b60008060408385031215613c4357613c42613b8e565b5b6000613c5185828601613be1565b9250506020613c6285828601613c17565b9150509250929050565b60008115159050919050565b613c8181613c6c565b82525050565b6000602082019050613c9c6000830184613c78565b92915050565b613cab81613bf6565b82525050565b6000602082019050613cc66000830184613ca2565b92915050565b600060208284031215613ce257613ce1613b8e565b5b6000613cf084828501613c17565b91505092915050565b600080600060608486031215613d1257613d11613b8e565b5b6000613d2086828701613be1565b9350506020613d3186828701613be1565b9250506040613d4286828701613c17565b9150509250925092565b613d5581613c6c565b8114613d6057600080fd5b50565b600081359050613d7281613d4c565b92915050565b600080600060608486031215613d9157613d90613b8e565b5b6000613d9f86828701613c17565b9350506020613db086828701613c17565b9250506040613dc186828701613d63565b9150509250925092565b600060ff82169050919050565b613de181613dcb565b82525050565b6000602082019050613dfc6000830184613dd8565b92915050565b613e0b81613bb8565b82525050565b6000602082019050613e266000830184613e02565b92915050565b600060208284031215613e4257613e41613b8e565b5b6000613e5084828501613be1565b91505092915050565b600080600060608486031215613e7257613e71613b8e565b5b6000613e8086828701613be1565b9350506020613e9186828701613c17565b9250506040613ea286828701613c17565b9150509250925092565b60008060008060808587031215613ec657613ec5613b8e565b5b6000613ed487828801613c17565b9450506020613ee587828801613be1565b9350506040613ef687828801613c17565b9250506060613f0787828801613d63565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613f3857613f37613f13565b5b8235905067ffffffffffffffff811115613f5557613f54613f18565b5b602083019150836001820283011115613f7157613f70613f1d565b5b9250929050565b600081905082602060020282011115613f9457613f93613f1d565b5b92915050565b60008083601f840112613fb057613faf613f13565b5b8235905067ffffffffffffffff811115613fcd57613fcc613f18565b5b602083019150836001820283011115613fe957613fe8613f1d565b5b9250929050565b6000806000806000806000806000806101408b8d03121561401457614013613b8e565b5b60008b013567ffffffffffffffff81111561403257614031613b93565b5b61403e8d828e01613f22565b9a509a505060206140518d828e01613c17565b98505060406140628d828e01613f78565b97505060806140738d828e01613f78565b96505060c06140848d828e01613c17565b95505060e06140958d828e01613d63565b9450506101006140a78d828e01613d63565b9350506101208b013567ffffffffffffffff8111156140c9576140c8613b93565b5b6140d58d828e01613f9a565b92509250509295989b9194979a5092959850565b6140f281613bf6565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061412483836140e9565b60208301905092915050565b6000602082019050919050565b614146816140f8565b6141508184614103565b925061415b8261410e565b8060005b8381101561418c5781516141738782614118565b965061417e83614130565b92505060018101905061415f565b505050505050565b61419d81613c6c565b82525050565b60e0820160008201516141b960008501826140e9565b5060208201516141cc602085018261413d565b5060408201516141df606085018261413d565b5060608201516141f260a08501826140e9565b50608082015161420560c0850182614194565b50505050565b600081519050919050565b600082825260208201905092915050565b60006142328261420b565b61423c8185614216565b935061424c818560208601613aee565b61425581613b18565b840191505092915050565b600061024082019050614276600083018f613ca2565b8181036020830152614288818e613b29565b9050614297604083018d613e02565b6142a4606083018c613ca2565b6142b1608083018b613ca2565b6142be60a083018a6141a3565b6142cc610180830189613ca2565b6142da6101a0830188613ca2565b6142e86101c0830187613c78565b6142f66101e0830186613c78565b614304610200830185613c78565b8181036102208301526143178184614227565b90509d9c50505050505050505050505050565b6000806020838503121561434157614340613b8e565b5b600083013567ffffffffffffffff81111561435f5761435e613b93565b5b61436b85828601613f22565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143ac81613bb8565b82525050565b6040820160008201516143c860008501826140e9565b5060208201516143db60208501826143a3565b50505050565b60006143ed83836143b2565b60408301905092915050565b6000602082019050919050565b600061441182614377565b61441b8185614382565b935061442683614393565b8060005b8381101561445757815161443e88826143e1565b9750614449836143f9565b92505060018101905061442a565b5085935050505092915050565b6000602082019050818103600083015261447e8184614406565b905092915050565b6000806040838503121561449d5761449c613b8e565b5b60006144ab85828601613be1565b92505060206144bc85828601613be1565b9150509250929050565b60008083601f8401126144dc576144db613f13565b5b8235905067ffffffffffffffff8111156144f9576144f8613f18565b5b60208301915083604082028301111561451557614514613f1d565b5b9250929050565b60008083601f84011261453257614531613f13565b5b8235905067ffffffffffffffff81111561454f5761454e613f18565b5b60208301915083602082028301111561456b5761456a613f1d565b5b9250929050565b6000806000806000806060878903121561458f5761458e613b8e565b5b600087013567ffffffffffffffff8111156145ad576145ac613b93565b5b6145b989828a016144c6565b9650965050602087013567ffffffffffffffff8111156145dc576145db613b93565b5b6145e889828a01613f22565b9450945050604087013567ffffffffffffffff81111561460b5761460a613b93565b5b61461789828a0161451c565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61466382613b18565b810181811067ffffffffffffffff821117156146825761468161462b565b5b80604052505050565b6000614695613b84565b90506146a1828261465a565b919050565b600067ffffffffffffffff8211156146c1576146c061462b565b5b6146ca82613b18565b9050602081019050919050565b82818337600083830152505050565b60006146f96146f4846146a6565b61468b565b90508281526020810184848401111561471557614714614626565b5b6147208482856146d7565b509392505050565b600082601f83011261473d5761473c613f13565b5b813561474d8482602086016146e6565b91505092915050565b60006020828403121561476c5761476b613b8e565b5b600082013567ffffffffffffffff81111561478a57614789613b93565b5b61479684828501614728565b91505092915050565b600060608201905081810360008301526147b98186613b29565b90506147c86020830185613e02565b6147d56040830184613ca2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482457607f821691505b602082108103614837576148366147dd565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000614873601883613add565b915061487e8261483d565b602082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148e382613bf6565b91506148ee83613bf6565b9250828201905080821115614906576149056148a9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061494682613bf6565b915061495183613bf6565b9250826149615761496061490c565b5b828204905092915050565b600061497782613bf6565b915061498283613bf6565b9250826149925761499161490c565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f9602183613add565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a6982613bf6565b9150614a7483613bf6565b9250828202614a8281613bf6565b91508282048414831517614a9957614a986148a9565b5b5092915050565b6000606082019050614ab56000830186613ca2565b614ac26020830185613c78565b614acf6040830184613c78565b949350505050565b60008190508160005260206000209050919050565b60008154614af98161480c565b614b038186614216565b94506001821660008114614b1e5760018114614b3457614b67565b60ff198316865281151560200286019350614b67565b614b3d85614ad7565b60005b83811015614b5f57815481890152600182019150602081019050614b40565b808801955050505b50505092915050565b600060a082019050614b856000830188613c78565b614b926020830187613c78565b614b9f6040830186613ca2565b614bac6060830185613ca2565b8181036080830152614bbe8184614aec565b90509695505050505050565b600081519050614bd981613c00565b92915050565b600060208284031215614bf557614bf4613b8e565b5b6000614c0384828501614bca565b91505092915050565b6000614c1782613bf6565b9150614c2283613bf6565b9250828203905081811115614c3a57614c396148a9565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614c76601b83613add565b9150614c8182614c40565b602082019050919050565b60006020820190508181036000830152614ca581614c69565b9050919050565b6000606082019050614cc16000830186613e02565b614cce6020830185613ca2565b614cdb6040830184613ca2565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614d3f602b83613add565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614dab601583613add565b9150614db682614d75565b602082019050919050565b60006020820190508181036000830152614dda81614d9e565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614e17601483613add565b9150614e2282614de1565b602082019050919050565b60006020820190508181036000830152614e4681614e0a565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614e83601783613add565b9150614e8e82614e4d565b602082019050919050565b60006020820190508181036000830152614eb281614e76565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614eef601a83613add565b9150614efa82614eb9565b602082019050919050565b60006020820190508181036000830152614f1e81614ee2565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614f5b601d83613add565b9150614f6682614f25565b602082019050919050565b60006020820190508181036000830152614f8a81614f4e565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614fc7601e83613add565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b600081905092915050565b60006150148385614ffd565b93506150218385846146d7565b82840190509392505050565b600061503a828486615008565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b600061507c601583613add565b915061508782615046565b602082019050919050565b600060208201905081810360008301526150ab8161506f565b9050919050565b60006150bd82613bf6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150ef576150ee6148a9565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261512a565b615171868361512a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151ae6151a96151a484613bf6565b615189565b613bf6565b9050919050565b6000819050919050565b6151c883615193565b6151dc6151d4826151b5565b848454615137565b825550505050565b600090565b6151f16151e4565b6151fc8184846151bf565b505050565b5b81811015615220576152156000826151e9565b600181019050615202565b5050565b601f8211156152655761523681615105565b61523f8461511a565b8101602085101561524e578190505b61526261525a8561511a565b830182615201565b50505b505050565b600082821c905092915050565b60006152886000198460080261526a565b1980831691505092915050565b60006152a18383615277565b9150826002028217905092915050565b6152bb83836150fa565b67ffffffffffffffff8111156152d4576152d361462b565b5b6152de825461480c565b6152e9828285615224565b6000601f8311600181146153185760008415615306578287013590505b6153108582615295565b865550615378565b601f19841661532686615105565b60005b8281101561534e57848901358255600182019150602085019450602081019050615329565b8683101561536b5784890135615367601f891682615277565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f8211156153cd5761539e81614ad7565b6153a78461511a565b810160208510156153b6578190505b6153ca6153c28561511a565b830182615201565b50505b505050565b6153dc8383615381565b67ffffffffffffffff8111156153f5576153f461462b565b5b6153ff825461480c565b61540a82828561538c565b6000601f8311600181146154395760008415615427578287013590505b6154318582615295565b865550615499565b601f19841661544786614ad7565b60005b8281101561546f5784890135825560018201915060208501945060208101905061544a565b8683101561548c5784890135615488601f891682615277565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b60006154fe602583613add565b9150615509826154a2565b604082019050919050565b6000602082019050818103600083015261552d816154f1565b9050919050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b6000615590602983613add565b915061559b82615534565b604082019050919050565b600060208201905081810360008301526155bf81615583565b9050919050565b600081356155d381613c00565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615615846155dc565b9350801983169250808416831791505092915050565b61563482615193565b615647615640826151b5565b83546155e9565b8255505050565b6000813561565b81613bca565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff615684846155dc565b9350801983169250808416831791505092915050565b60006156b56156b06156ab84613b98565b615189565b613b98565b9050919050565b60006156c78261569a565b9050919050565b60006156d9826156bc565b9050919050565b6000819050919050565b6156f3826156ce565b6157066156ff826156e0565b8354615664565b8255505050565b60008101600083018061571f816155c6565b905061572b818461562b565b5050506001810160208301806157408161564e565b905061574c81846156ea565b5050505050565b61575d828261570d565b5050565b7f417574686f722077656967687473206d7573742073756d20746f203130302500600082015250565b6000615797601f83613add565b91506157a282615761565b602082019050919050565b600060208201905081810360008301526157c68161578a565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126157f8576157f76157cd565b5b80830191505092915050565b6000819050919050565b61581781615804565b811461582257600080fd5b50565b600081356158328161580e565b80915050919050565b600061585661585161584c84615804565b615189565b615804565b9050919050565b6000819050919050565b6158708261583b565b61588361587c8261585d565b83546155e9565b8255505050565b600080833560016020038436030381126158a7576158a66157cd565b5b80840192508235915067ffffffffffffffff8211156158c9576158c86157d2565b5b6020830192506001820236038313156158e5576158e46157d7565b5b509250929050565b6158f88383836152b1565b505050565b60008101600083018061590f81615825565b905061591b8184615867565b5050506001810160208301615930818561588a565b61593b8183866158ed565b505050505050565b61594d82826158fd565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303000000000000000000000000000000000000000000000000000000000602082015250565b60006159ad602483613add565b91506159b882615951565b604082019050919050565b600060208201905081810360008301526159dc816159a0565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b6000615a3f602383613add565b9150615a4a826159e3565b604082019050919050565b60006020820190508181036000830152615a6e81615a32565b9050919050565b6000615a8082615804565b9150615a8b83615804565b925082820190508281121560008312168382126000841215161715615ab357615ab26148a9565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030000000000000000000000000000000000000000000000000602082015250565b6000615b15602883613add565b9150615b2082615ab9565b604082019050919050565b60006020820190508181036000830152615b4481615b08565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130300000000000000000000000000000000000000000000000602082015250565b6000615ba7602983613add565b9150615bb282615b4b565b604082019050919050565b60006020820190508181036000830152615bd681615b9a565b9050919050565b6000615be98385613add565b9350615bf68385846146d7565b615bff83613b18565b840190509392505050565b60006020820190508181036000830152615c25818486615bdd565b90509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615c64601883613add565b9150615c6f82615c2e565b602082019050919050565b60006020820190508181036000830152615c9381615c57565b9050919050565b6000615ca582613ad2565b615caf8185614ffd565b9350615cbf818560208601613aee565b80840191505092915050565b6000615cd78284615c9a565b915081905092915050565b6000615ced82615804565b9150615cf883615804565b9250828203905081811260008412168282136000851215161715615d1f57615d1e6148a9565b5b92915050565b6000615d3082615804565b91507f80000000000000000000000000000000000000000000000000000000000000008203615d6257615d616148a9565b5b816000039050919050565b6000615d7882615804565b9150615d8383615804565b9250828202615d9181615804565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615dc957615dc86148a9565b5b8282058414831517615dde57615ddd6148a9565b5b5092915050565b6000615df082615804565b9150615dfb83615804565b925082615e0b57615e0a61490c565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615e4457615e436148a9565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615eab602683613add565b9150615eb682615e4f565b604082019050919050565b60006020820190508181036000830152615eda81615e9e565b905091905056fea264697066735822122048c08bdaea49553e2208fbc1bf2e1fde118c383db153ba6213c58f673267d60964736f6c63430008180033",
"deployedBytecode": "0x60806040526004361061014b5760003560e01c806370a08231116100b6578063a23362791161006f578063a2336279146104e7578063a9059cbb1461052f578063da66863a1461056c578063dd62ed3e146105a9578063e5b4d827146105e6578063f8300fca1461060f5761014b565b806370a08231146103ac57806388380274146103e957806395d89b4114610426578063975762b3146104515780639fbe7c731461047a578063a230c524146104aa5761014b565b806323b872dd1161010857806323b872dd146102765780632d17c062146102b3578063313ce567146102dc57806350cde8ef146103075780635daf08ca14610344578063642b5bfb146103815761014b565b806306fdde0314610150578063095ea7b31461017b57806311aee380146101b857806317906c2e146101e357806317c182171461020e57806318160ddd1461024b575b600080fd5b34801561015c57600080fd5b5061016561064e565b6040516101729190613b62565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190613c2c565b6106e0565b6040516101af9190613c87565b60405180910390f35b3480156101c457600080fd5b506101cd610703565b6040516101da9190613cb1565b60405180910390f35b3480156101ef57600080fd5b506101f8610709565b6040516102059190613cb1565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613ccc565b61070f565b6040516102429190613c87565b60405180910390f35b34801561025757600080fd5b506102606110ed565b60405161026d9190613cb1565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613cf9565b6110f7565b6040516102aa9190613c87565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613d78565b611134565b005b3480156102e857600080fd5b506102f161115d565b6040516102fe9190613de7565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613ccc565b611166565b60405161033b9190613b62565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613ccc565b611212565b6040516103789190613e11565b60405180910390f35b34801561038d57600080fd5b50610396611245565b6040516103a39190613cb1565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613e2c565b61124b565b6040516103e09190613cb1565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613e59565b611293565b60405161041d9190613c87565b60405180910390f35b34801561043257600080fd5b5061043b61131a565b6040516104489190613b62565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613eac565b6113ac565b005b610494600480360381019061048f9190613ff0565b6113e1565b6040516104a19190613cb1565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613e2c565b61189b565b6040516104de9190613c87565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613ccc565b6118bb565b6040516105269c9b9a99989796959493929190614260565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613c2c565b611b35565b6040516105639190613c87565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e919061432a565b611b72565b6040516105a09190614464565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614486565b611c5b565b6040516105dd9190613cb1565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190614572565b611ce2565b005b34801561061b57600080fd5b5061063660048036038101906106319190614756565b6121af565b6040516106459392919061479f565b60405180910390f35b60606003805461065d9061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546106899061480c565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b6000806106eb612297565b90506106f881858561229f565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff1615151461077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690614889565b60405180910390fd5b600080600080600090505b84600501548110156107fb5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107db578160020154846107d491906148d8565b93506107ee565b8160020154836107eb91906148d8565b92505b808060010191505061078a565b506002846003015461080d919061493b565b8361081891906148d8565b92506002846003015461082b919061493b565b8261083691906148d8565b915060006002856003015461084b919061496c565b146108605760018361085d91906148d8565b92505b83600e015442118061088357506108756110ed565b828461088191906148d8565b145b6108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990614a0f565b60405180910390fd5b836006016001016000600281106108dc576108db614a2f565b5b01546108e66110ed565b6108f09190614a5e565b82846108fc91906148d8565b8560060160010160016002811061091657610915614a2f565b5b01546109229190614a5e565b11610a5257600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de818660008060405161097893929190614aa0565b60405180910390a183600f0160029054906101000a900460ff1615610a45578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a00959493929190614b70565b6020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614bdf565b505b60009450505050506110e8565b83600601600301600060028110610a6c57610a6b614a2f565b5b01548284610a7a91906148d8565b610a849190614a5e565b84600601600301600160028110610a9e57610a9d614a2f565b5b015484610aab9190614a5e565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b1c93929190614aa0565b60405180910390a1600085610b315782610b33565b835b905060008060005b8760050154811015610c3b5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c2e576000606489600601600501548760020154610b959190614a5e565b610b9f919061493b565b90508860060160060160009054906101000a900460ff1615610bfd57610bea8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630836122b1565b8084610bf691906148d8565b9350610c2c565b610c2b8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124d6565b5b505b8080600101915050610b3b565b508715610e395760028760030154610c53919061493b565b82610c5e91906148d8565b915060005b8760050154811015610d495787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cbb57508460010160009054906101000a900460ff161515891515145b15610d3c5760006064896006016005015486886002015487610cdd9190614a5e565b610ce7919061493b565b610cf19190614a5e565b610cfb919061493b565b90508083610d0991906148d8565b9250610d3a308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122b1565b505b8080600101915050610c63565b5060008183610d589190614c0c565b9050600060028960030154610d6d919061496c565b14610d8257600181610d7f91906148d8565b90505b610e33886001018054610d949061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc09061480c565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b50505050508260028b60030154610e24919061493b565b610e2e91906148d8565b612558565b50610f51565b866003015482610e4991906148d8565b915060005b8760050154811015610f4f5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610ea657508460010160009054906101000a900460ff161515891515145b15610f425760006064896006016005015460028b60030154610ec8919061493b565b87610ed39190614c0c565b886002015487610ee39190614a5e565b610eed919061493b565b610ef79190614a5e565b610f01919061493b565b90508083610f0f91906148d8565b9250610f40308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122b1565b505b8080600101915050610e4e565b505b60005b60065481101561101a5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fa06110ed565b610fa98361124b565b8b600d0154610fb89190614a5e565b610fc2919061493b565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561100a573d6000803e3d6000fd5b5050508080600101915050610f54565b5086600f0160029054906101000a900460ff16156110e0578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b815260040161109b959493929190614b70565b6020604051808303816000875af11580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190614bdf565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90614c8c565b60405180910390fd5b6000600d600085815260200190815260200160002090506111578133858561256a565b50505050565b60006009905090565b6009818154811061117657600080fd5b9060005260206000200160009150905080546111919061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546111bd9061480c565b801561120a5780601f106111df5761010080835404028352916020019161120a565b820191906000526020600020905b8154815290600101906020018083116111ed57829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a033858561229f565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016112dd93929190614cac565b600060405180830381600087803b1580156112f757600080fd5b505af115801561130b573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546113299061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546113559061480c565b80156113a25780601f10611377576101008083540402835291602001916113a2565b820191906000526020600020905b81548152906001019060200180831161138557829003601f168201915b5050505050905090565b6000600d600086815260200190815260200160002090506113ce843385612660565b6113da8185858561256a565b5050505050565b6000803411611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614d55565b60405180910390fd5b6001891015611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090614dc1565b60405180910390fd5b651cae8c13e0008911156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614e2d565b60405180910390fd5b876001600281106114c6576114c5614a2f565b5b6020020135600f6000600281106114e0576114df614a2f565b5b01546114ec9190614a5e565b88600060028110611500576114ff614a2f565b5b6020020135600f60016002811061151a57611519614a2f565b5b01546115269190614a5e565b1015611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614e99565b60405180910390fd5b8760016002811061157b5761157a614a2f565b5b60200201358860006002811061159457611593614a2f565b5b602002013511156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614f05565b60405180910390fd5b866001600281106115ee576115ed614a2f565b5b60200201358760006002811061160757611606614a2f565b5b6020020135111561164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490614f71565b60405180910390fd5b6064861115611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168890614fdd565b60405180910390fd5b600060088c8c6040516116a592919061502d565b9081526020016040518091039020905060008160020180549050036116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690615092565b60405180910390fd5b600e6000815480929190611712906150b2565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c8260010191826117859291906152b1565b503481600d018190555089816006016001019060026117a5929190613a75565b5088816006016003019060026117bc929190613a75565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a4261180091906148d8565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118409291906153d2565b5061184b30346126f4565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118839190613cb1565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090508060000154908060010180546118e49061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546119109061480c565b801561195d5780601f106119325761010080835404028352916020019161195d565b820191906000526020600020905b81548152906001019060200180831161194057829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156119ea576020028201915b8154815260200190600101908083116119d6575b5050505050815260200160038201600280602002604051908101604052809291908260028015611a2f576020028201915b815481526020019060010190808311611a1b575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ab29061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ade9061480c565b8015611b2b5780601f10611b0057610100808354040283529160200191611b2b565b820191906000526020600020905b815481529060010190602001808311611b0e57829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614c8c565b60405180910390fd5b6060600060088484604051611b8892919061502d565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611c4e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611bbc565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f90615514565b60405180910390fd5b600a6000815480929190611d3b906150b2565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611d7d9291906152b1565b50600060088585604051611d9292919061502d565b908152602001604051809103902090506000816002018054905014611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de3906155a6565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611e429291906152b1565b50600080600090505b88889050811015611ee157888882818110611e6957611e68614a2f565b5b9050604002016000013582611e7e91906148d8565b915082600201898983818110611e9757611e96614a2f565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611ed29190615753565b50508080600101915050611e4b565b5060648114611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906157ad565b60405180910390fd5b60005b84849050811015611fa05782600301858583818110611f4a57611f49614a2f565b5b9050602002810190611f5c91906157dc565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f919190615943565b50508080600101915050611f28565b5060008060005b84600301805490508110156120c2576000856003018281548110611fce57611fcd614a2f565b5b90600052602060002090600202016000015490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c811215612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c906159c3565b60405180910390fd5b6064811315612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090615a55565b60405180910390fd5b60008113156120a557808461209e9190615a75565b93506120b4565b80836120b19190615a75565b92505b508080600101915050611fa7565b506064821315612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90615b2b565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c81121561216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190615bbd565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af249727888860405161219b929190615c0a565b60405180910390a150505050505050505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546121e89061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546122149061480c565b80156122615780601f1061223657610100808354040283529160200191612261565b820191906000526020600020905b81548152906001019060200180831161224457829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b6122ac8383836001612776565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123035780600260008282546122f791906148d8565b925050819055506123d6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561238f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161238693929190614cac565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361241f578060026000828254039250508190555061246c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124c99190613cb1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125485760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161253f9190613e11565b60405180910390fd5b612554826000836122b1565b5050565b612565828260008061294d565b505050565b83600e01544211156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890615c7a565b60405180910390fd5b60008460050160008154809291906125c8906150b2565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600061266c8484611c5b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126ee57818110156126de578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016126d593929190614cac565b60405180910390fd5b6126ed84848484036000612776565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127665760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161275d9190613e11565b60405180910390fd5b612772600083836122b1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127e85760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016127df9190613e11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285a5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016128519190613e11565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612947578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161293e9190613cb1565b60405180910390a35b50505050565b6000600c548210612960578390506134ed565b60006008866040516129729190615ccb565b90815260200160405180910390209050600081600201805490500361299a57849150506134ed565b60005b8160030180549050811015612ace5760008260030182815481106129c4576129c3614a2f565b5b9060005260206000209060020201600001541215612ac157612ab3878360030183815481106129f6576129f5614a2f565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a299061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612a559061480c565b8015612aa25780601f10612a7757610100808354040283529160200191612aa2565b820191906000526020600020905b815481529060010190602001808311612a8557829003601f168201915b5050505050815250508888886134f5565b86612abe9190615ce2565b95505b808060010191505061299d565b5060005b8160030180549050811015612c03576000826003018281548110612af957612af8614a2f565b5b9060005260206000209060020201600001541315612bf657612be887836003018381548110612b2b57612b2a614a2f565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612b5e9061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612b8a9061480c565b8015612bd75780601f10612bac57610100808354040283529160200191612bd7565b820191906000526020600020905b815481529060010190602001808311612bba57829003601f168201915b5050505050815250508888886134f5565b86612bf39190615ce2565b95505b8080600101915050612ad2565b506000851315612eef57612ece816040518060a0016040529081600082018054612c2c9061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c589061480c565b8015612ca55780601f10612c7a57610100808354040283529160200191612ca5565b820191906000526020600020905b815481529060010190602001808311612c8857829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612dbb5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612d29565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612eb6578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612e259061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612e519061480c565b8015612e9e5780601f10612e7357610100808354040283529160200191612e9e565b820191906000526020600020905b815481529060010190602001808311612e8157829003601f168201915b50505050508152505081526020019060010190612de8565b505050508152602001600482015481525050866136be565b5084816004016000828254612ee391906148d8565b925050819055506134eb565b6000858260040154612f019190615a75565b126131f2576131c7816040518060a0016040529081600082018054612f259061480c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f519061480c565b8015612f9e5780601f10612f7357610100808354040283529160200191612f9e565b820191906000526020600020905b815481529060010190602001808311612f8157829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156130b45783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190613022565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131af57838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461311e9061480c565b80601f016020809104026020016040519081016040528092919081815260200182805461314a9061480c565b80156131975780601f1061316c57610100808354040283529160200191613197565b820191906000526020600020905b81548152906001019060200180831161317a57829003601f168201915b505050505081525050815260200190600101906130e1565b505050508152602001600482015481525050866136be565b9150846131d390615d25565b8160040160008282546131e69190614c0c565b925050819055506134ea565b8481600401546132029190615a75565b91506134d2816040518060a00160405290816000820180546132239061480c565b80601f016020809104026020016040519081016040528092919081815260200182805461324f9061480c565b801561329c5780601f106132715761010080835404028352916020019161329c565b820191906000526020600020905b81548152906001019060200180831161327f57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156133b25783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190613320565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156134ad57838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461341c9061480c565b80601f01602080910402602001604051908101604052809291908181526020018280546134489061480c565b80156134955780601f1061346a57610100808354040283529160200191613495565b820191906000526020600020905b81548152906001019060200180831161347857829003601f168201915b505050505081525050815260200190600101906133df565b50505050815260200160048201548152505082600401546134cd90615d25565b6136be565b826134dd9190615a75565b9150600081600401819055505b5b505b949350505050565b600060648560000151856135099190615d6d565b6135139190615de5565b9050600085602001515103613575576000811215613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90615ec1565b60405180910390fd5b61357030826124d6565b6136b5565b6000600b876040516135879190615ccb565b908152602001604051809103902086602001516040516135a79190615ccb565b908152602001604051809103902054905083156136145760008212156135ef57806135d190615d25565b82136135e657806135e190615d25565b6135e8565b815b9150613613565b806135f990615d25565b821261360e578061360990615d25565b613610565b815b91505b5b600061364d876020015184878061363b575060008714801561363a575060008a60000151125b5b60018861364891906148d8565b61294d565b9050808361365b9190615ce2565b925082600b8960405161366e9190615ccb565b9081526020016040518091039020886020015160405161368e9190615ccb565b908152602001604051809103902060008282546136ab9190615a75565b9250508190555050505b95945050505050565b60008060005b846040015151811015613818576000856040015182815181106136ea576136e9614a2f565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661380a57806005600060066000815480929190613761906150b2565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806001019150506136c4565b5060005b846040015151811015613a6d5760008560400151828151811061384257613841614a2f565b5b60200260200101519050600060018760400151516138609190614c0c565b8310156138985760648260000151876138799190615d6d565b6138839190615de5565b905080846138919190615a75565b93506138a7565b83866138a49190615ce2565b90505b60008113156139e2576138bf308360200151836122b1565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139dd5781602001516005600060066000815480929190613930906150b2565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613a5e565b806139ec90615d25565b6139f9836020015161124b565b1015613a4457613a0c826020015161124b565b81613a179190615a75565b85613a229190615a75565b9450613a3f826020015130613a3a856020015161124b565b6122b1565b613a5d565b613a5c82602001513083613a5790615d25565b6122b1565b5b5b5050808060010191505061381c565b505092915050565b8260028101928215613aa4579160200282015b82811115613aa3578235825591602001919060010190613a88565b5b509050613ab19190613ab5565b5090565b5b80821115613ace576000816000905550600101613ab6565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b0c578082015181840152602081019050613af1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b3482613ad2565b613b3e8185613add565b9350613b4e818560208601613aee565b613b5781613b18565b840191505092915050565b60006020820190508181036000830152613b7c8184613b29565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bc382613b98565b9050919050565b613bd381613bb8565b8114613bde57600080fd5b50565b600081359050613bf081613bca565b92915050565b6000819050919050565b613c0981613bf6565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b60008060408385031215613c4357613c42613b8e565b5b6000613c5185828601613be1565b9250506020613c6285828601613c17565b9150509250929050565b60008115159050919050565b613c8181613c6c565b82525050565b6000602082019050613c9c6000830184613c78565b92915050565b613cab81613bf6565b82525050565b6000602082019050613cc66000830184613ca2565b92915050565b600060208284031215613ce257613ce1613b8e565b5b6000613cf084828501613c17565b91505092915050565b600080600060608486031215613d1257613d11613b8e565b5b6000613d2086828701613be1565b9350506020613d3186828701613be1565b9250506040613d4286828701613c17565b9150509250925092565b613d5581613c6c565b8114613d6057600080fd5b50565b600081359050613d7281613d4c565b92915050565b600080600060608486031215613d9157613d90613b8e565b5b6000613d9f86828701613c17565b9350506020613db086828701613c17565b9250506040613dc186828701613d63565b9150509250925092565b600060ff82169050919050565b613de181613dcb565b82525050565b6000602082019050613dfc6000830184613dd8565b92915050565b613e0b81613bb8565b82525050565b6000602082019050613e266000830184613e02565b92915050565b600060208284031215613e4257613e41613b8e565b5b6000613e5084828501613be1565b91505092915050565b600080600060608486031215613e7257613e71613b8e565b5b6000613e8086828701613be1565b9350506020613e9186828701613c17565b9250506040613ea286828701613c17565b9150509250925092565b60008060008060808587031215613ec657613ec5613b8e565b5b6000613ed487828801613c17565b9450506020613ee587828801613be1565b9350506040613ef687828801613c17565b9250506060613f0787828801613d63565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613f3857613f37613f13565b5b8235905067ffffffffffffffff811115613f5557613f54613f18565b5b602083019150836001820283011115613f7157613f70613f1d565b5b9250929050565b600081905082602060020282011115613f9457613f93613f1d565b5b92915050565b60008083601f840112613fb057613faf613f13565b5b8235905067ffffffffffffffff811115613fcd57613fcc613f18565b5b602083019150836001820283011115613fe957613fe8613f1d565b5b9250929050565b6000806000806000806000806000806101408b8d03121561401457614013613b8e565b5b60008b013567ffffffffffffffff81111561403257614031613b93565b5b61403e8d828e01613f22565b9a509a505060206140518d828e01613c17565b98505060406140628d828e01613f78565b97505060806140738d828e01613f78565b96505060c06140848d828e01613c17565b95505060e06140958d828e01613d63565b9450506101006140a78d828e01613d63565b9350506101208b013567ffffffffffffffff8111156140c9576140c8613b93565b5b6140d58d828e01613f9a565b92509250509295989b9194979a5092959850565b6140f281613bf6565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061412483836140e9565b60208301905092915050565b6000602082019050919050565b614146816140f8565b6141508184614103565b925061415b8261410e565b8060005b8381101561418c5781516141738782614118565b965061417e83614130565b92505060018101905061415f565b505050505050565b61419d81613c6c565b82525050565b60e0820160008201516141b960008501826140e9565b5060208201516141cc602085018261413d565b5060408201516141df606085018261413d565b5060608201516141f260a08501826140e9565b50608082015161420560c0850182614194565b50505050565b600081519050919050565b600082825260208201905092915050565b60006142328261420b565b61423c8185614216565b935061424c818560208601613aee565b61425581613b18565b840191505092915050565b600061024082019050614276600083018f613ca2565b8181036020830152614288818e613b29565b9050614297604083018d613e02565b6142a4606083018c613ca2565b6142b1608083018b613ca2565b6142be60a083018a6141a3565b6142cc610180830189613ca2565b6142da6101a0830188613ca2565b6142e86101c0830187613c78565b6142f66101e0830186613c78565b614304610200830185613c78565b8181036102208301526143178184614227565b90509d9c50505050505050505050505050565b6000806020838503121561434157614340613b8e565b5b600083013567ffffffffffffffff81111561435f5761435e613b93565b5b61436b85828601613f22565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143ac81613bb8565b82525050565b6040820160008201516143c860008501826140e9565b5060208201516143db60208501826143a3565b50505050565b60006143ed83836143b2565b60408301905092915050565b6000602082019050919050565b600061441182614377565b61441b8185614382565b935061442683614393565b8060005b8381101561445757815161443e88826143e1565b9750614449836143f9565b92505060018101905061442a565b5085935050505092915050565b6000602082019050818103600083015261447e8184614406565b905092915050565b6000806040838503121561449d5761449c613b8e565b5b60006144ab85828601613be1565b92505060206144bc85828601613be1565b9150509250929050565b60008083601f8401126144dc576144db613f13565b5b8235905067ffffffffffffffff8111156144f9576144f8613f18565b5b60208301915083604082028301111561451557614514613f1d565b5b9250929050565b60008083601f84011261453257614531613f13565b5b8235905067ffffffffffffffff81111561454f5761454e613f18565b5b60208301915083602082028301111561456b5761456a613f1d565b5b9250929050565b6000806000806000806060878903121561458f5761458e613b8e565b5b600087013567ffffffffffffffff8111156145ad576145ac613b93565b5b6145b989828a016144c6565b9650965050602087013567ffffffffffffffff8111156145dc576145db613b93565b5b6145e889828a01613f22565b9450945050604087013567ffffffffffffffff81111561460b5761460a613b93565b5b61461789828a0161451c565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61466382613b18565b810181811067ffffffffffffffff821117156146825761468161462b565b5b80604052505050565b6000614695613b84565b90506146a1828261465a565b919050565b600067ffffffffffffffff8211156146c1576146c061462b565b5b6146ca82613b18565b9050602081019050919050565b82818337600083830152505050565b60006146f96146f4846146a6565b61468b565b90508281526020810184848401111561471557614714614626565b5b6147208482856146d7565b509392505050565b600082601f83011261473d5761473c613f13565b5b813561474d8482602086016146e6565b91505092915050565b60006020828403121561476c5761476b613b8e565b5b600082013567ffffffffffffffff81111561478a57614789613b93565b5b61479684828501614728565b91505092915050565b600060608201905081810360008301526147b98186613b29565b90506147c86020830185613e02565b6147d56040830184613ca2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482457607f821691505b602082108103614837576148366147dd565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000614873601883613add565b915061487e8261483d565b602082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148e382613bf6565b91506148ee83613bf6565b9250828201905080821115614906576149056148a9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061494682613bf6565b915061495183613bf6565b9250826149615761496061490c565b5b828204905092915050565b600061497782613bf6565b915061498283613bf6565b9250826149925761499161490c565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f9602183613add565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a6982613bf6565b9150614a7483613bf6565b9250828202614a8281613bf6565b91508282048414831517614a9957614a986148a9565b5b5092915050565b6000606082019050614ab56000830186613ca2565b614ac26020830185613c78565b614acf6040830184613c78565b949350505050565b60008190508160005260206000209050919050565b60008154614af98161480c565b614b038186614216565b94506001821660008114614b1e5760018114614b3457614b67565b60ff198316865281151560200286019350614b67565b614b3d85614ad7565b60005b83811015614b5f57815481890152600182019150602081019050614b40565b808801955050505b50505092915050565b600060a082019050614b856000830188613c78565b614b926020830187613c78565b614b9f6040830186613ca2565b614bac6060830185613ca2565b8181036080830152614bbe8184614aec565b90509695505050505050565b600081519050614bd981613c00565b92915050565b600060208284031215614bf557614bf4613b8e565b5b6000614c0384828501614bca565b91505092915050565b6000614c1782613bf6565b9150614c2283613bf6565b9250828203905081811115614c3a57614c396148a9565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614c76601b83613add565b9150614c8182614c40565b602082019050919050565b60006020820190508181036000830152614ca581614c69565b9050919050565b6000606082019050614cc16000830186613e02565b614cce6020830185613ca2565b614cdb6040830184613ca2565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614d3f602b83613add565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614dab601583613add565b9150614db682614d75565b602082019050919050565b60006020820190508181036000830152614dda81614d9e565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614e17601483613add565b9150614e2282614de1565b602082019050919050565b60006020820190508181036000830152614e4681614e0a565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614e83601783613add565b9150614e8e82614e4d565b602082019050919050565b60006020820190508181036000830152614eb281614e76565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614eef601a83613add565b9150614efa82614eb9565b602082019050919050565b60006020820190508181036000830152614f1e81614ee2565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614f5b601d83613add565b9150614f6682614f25565b602082019050919050565b60006020820190508181036000830152614f8a81614f4e565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614fc7601e83613add565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b600081905092915050565b60006150148385614ffd565b93506150218385846146d7565b82840190509392505050565b600061503a828486615008565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b600061507c601583613add565b915061508782615046565b602082019050919050565b600060208201905081810360008301526150ab8161506f565b9050919050565b60006150bd82613bf6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150ef576150ee6148a9565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261512a565b615171868361512a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151ae6151a96151a484613bf6565b615189565b613bf6565b9050919050565b6000819050919050565b6151c883615193565b6151dc6151d4826151b5565b848454615137565b825550505050565b600090565b6151f16151e4565b6151fc8184846151bf565b505050565b5b81811015615220576152156000826151e9565b600181019050615202565b5050565b601f8211156152655761523681615105565b61523f8461511a565b8101602085101561524e578190505b61526261525a8561511a565b830182615201565b50505b505050565b600082821c905092915050565b60006152886000198460080261526a565b1980831691505092915050565b60006152a18383615277565b9150826002028217905092915050565b6152bb83836150fa565b67ffffffffffffffff8111156152d4576152d361462b565b5b6152de825461480c565b6152e9828285615224565b6000601f8311600181146153185760008415615306578287013590505b6153108582615295565b865550615378565b601f19841661532686615105565b60005b8281101561534e57848901358255600182019150602085019450602081019050615329565b8683101561536b5784890135615367601f891682615277565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f8211156153cd5761539e81614ad7565b6153a78461511a565b810160208510156153b6578190505b6153ca6153c28561511a565b830182615201565b50505b505050565b6153dc8383615381565b67ffffffffffffffff8111156153f5576153f461462b565b5b6153ff825461480c565b61540a82828561538c565b6000601f8311600181146154395760008415615427578287013590505b6154318582615295565b865550615499565b601f19841661544786614ad7565b60005b8281101561546f5784890135825560018201915060208501945060208101905061544a565b8683101561548c5784890135615488601f891682615277565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b60006154fe602583613add565b9150615509826154a2565b604082019050919050565b6000602082019050818103600083015261552d816154f1565b9050919050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b6000615590602983613add565b915061559b82615534565b604082019050919050565b600060208201905081810360008301526155bf81615583565b9050919050565b600081356155d381613c00565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615615846155dc565b9350801983169250808416831791505092915050565b61563482615193565b615647615640826151b5565b83546155e9565b8255505050565b6000813561565b81613bca565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff615684846155dc565b9350801983169250808416831791505092915050565b60006156b56156b06156ab84613b98565b615189565b613b98565b9050919050565b60006156c78261569a565b9050919050565b60006156d9826156bc565b9050919050565b6000819050919050565b6156f3826156ce565b6157066156ff826156e0565b8354615664565b8255505050565b60008101600083018061571f816155c6565b905061572b818461562b565b5050506001810160208301806157408161564e565b905061574c81846156ea565b5050505050565b61575d828261570d565b5050565b7f417574686f722077656967687473206d7573742073756d20746f203130302500600082015250565b6000615797601f83613add565b91506157a282615761565b602082019050919050565b600060208201905081810360008301526157c68161578a565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126157f8576157f76157cd565b5b80830191505092915050565b6000819050919050565b61581781615804565b811461582257600080fd5b50565b600081356158328161580e565b80915050919050565b600061585661585161584c84615804565b615189565b615804565b9050919050565b6000819050919050565b6158708261583b565b61588361587c8261585d565b83546155e9565b8255505050565b600080833560016020038436030381126158a7576158a66157cd565b5b80840192508235915067ffffffffffffffff8211156158c9576158c86157d2565b5b6020830192506001820236038313156158e5576158e46157d7565b5b509250929050565b6158f88383836152b1565b505050565b60008101600083018061590f81615825565b905061591b8184615867565b5050506001810160208301615930818561588a565b61593b8183866158ed565b505050505050565b61594d82826158fd565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303000000000000000000000000000000000000000000000000000000000602082015250565b60006159ad602483613add565b91506159b882615951565b604082019050919050565b600060208201905081810360008301526159dc816159a0565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b6000615a3f602383613add565b9150615a4a826159e3565b604082019050919050565b60006020820190508181036000830152615a6e81615a32565b9050919050565b6000615a8082615804565b9150615a8b83615804565b925082820190508281121560008312168382126000841215161715615ab357615ab26148a9565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030000000000000000000000000000000000000000000000000602082015250565b6000615b15602883613add565b9150615b2082615ab9565b604082019050919050565b60006020820190508181036000830152615b4481615b08565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130300000000000000000000000000000000000000000000000602082015250565b6000615ba7602983613add565b9150615bb282615b4b565b604082019050919050565b60006020820190508181036000830152615bd681615b9a565b9050919050565b6000615be98385613add565b9350615bf68385846146d7565b615bff83613b18565b840190509392505050565b60006020820190508181036000830152615c25818486615bdd565b90509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615c64601883613add565b9150615c6f82615c2e565b602082019050919050565b60006020820190508181036000830152615c9381615c57565b9050919050565b6000615ca582613ad2565b615caf8185614ffd565b9350615cbf818560208601613aee565b80840191505092915050565b6000615cd78284615c9a565b915081905092915050565b6000615ced82615804565b9150615cf883615804565b9250828203905081811260008412168282136000851215161715615d1f57615d1e6148a9565b5b92915050565b6000615d3082615804565b91507f80000000000000000000000000000000000000000000000000000000000000008203615d6257615d616148a9565b5b816000039050919050565b6000615d7882615804565b9150615d8383615804565b9250828202615d9181615804565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615dc957615dc86148a9565b5b8282058414831517615dde57615ddd6148a9565b5b5092915050565b6000615df082615804565b9150615dfb83615804565b925082615e0b57615e0a61490c565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615e4457615e436148a9565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615eab602683613add565b9150615eb682615e4f565b604082019050919050565b60006020820190508181036000830152615eda81615e9e565b905091905056fea264697066735822122048c08bdaea49553e2208fbc1bf2e1fde118c383db153ba6213c58f673267d60964736f6c63430008180033",
"linkReferences": {},
"deployedLinkReferences": {}
}