Repository URL to install this package:
|
Version:
0.0.0 ▾
|
{
"_format": "hh-sol-artifact-1",
"contractName": "BentoBoxV1",
"sourceName": "contracts/flat/BentoBoxV1Flat.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "wethToken_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "masterContract",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"indexed": true,
"internalType": "address",
"name": "cloneAddress",
"type": "address"
}
],
"name": "LogDeploy",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "LogDeposit",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "borrower",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "feeAmount",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "LogFlashLoan",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "protocol",
"type": "address"
}
],
"name": "LogRegisterProtocol",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "masterContract",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "LogSetMasterContractApproval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LogStrategyDivest",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LogStrategyInvest",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LogStrategyLoss",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LogStrategyProfit",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IStrategy",
"name": "strategy",
"type": "address"
}
],
"name": "LogStrategyQueued",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IStrategy",
"name": "strategy",
"type": "address"
}
],
"name": "LogStrategySet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "targetPercentage",
"type": "uint256"
}
],
"name": "LogStrategyTargetPercentage",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "LogTransfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "masterContract",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "LogWhiteListMasterContract",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "LogWithdraw",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "calls",
"type": "bytes[]"
},
{
"internalType": "bool",
"name": "revertOnFail",
"type": "bool"
}
],
"name": "batch",
"outputs": [
{
"internalType": "bool[]",
"name": "successes",
"type": "bool[]"
},
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IBatchFlashBorrower",
"name": "borrower",
"type": "address"
},
{
"internalType": "address[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "batchFlashLoan",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "claimOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "masterContract",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bool",
"name": "useCreate2",
"type": "bool"
}
],
"name": "deploy",
"outputs": [
{
"internalType": "address",
"name": "cloneAddress",
"type": "address"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token_",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "deposit",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "shareOut",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IFlashBorrower",
"name": "borrower",
"type": "address"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "flashLoan",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "bool",
"name": "balance",
"type": "bool"
},
{
"internalType": "uint256",
"name": "maxChangeAmount",
"type": "uint256"
}
],
"name": "harvest",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "masterContractApproved",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "masterContractOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"name": "pendingStrategy",
"outputs": [
{
"internalType": "contract IStrategy",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "permitToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "registerProtocol",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "address",
"name": "masterContract",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "setMasterContractApproval",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "contract IStrategy",
"name": "newStrategy",
"type": "address"
}
],
"name": "setStrategy",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint64",
"name": "targetPercentage_",
"type": "uint64"
}
],
"name": "setStrategyTargetPercentage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"name": "strategy",
"outputs": [
{
"internalType": "contract IStrategy",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"name": "strategyData",
"outputs": [
{
"internalType": "uint64",
"name": "strategyStartDate",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "targetPercentage",
"type": "uint64"
},
{
"internalType": "uint128",
"name": "balance",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "share",
"type": "uint256"
},
{
"internalType": "bool",
"name": "roundUp",
"type": "bool"
}
],
"name": "toAmount",
"outputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "roundUp",
"type": "bool"
}
],
"name": "toShare",
"outputs": [
{
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"name": "totals",
"outputs": [
{
"internalType": "uint128",
"name": "elastic",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "base",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address[]",
"name": "tos",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
}
],
"name": "transferMultiple",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
},
{
"internalType": "bool",
"name": "direct",
"type": "bool"
},
{
"internalType": "bool",
"name": "renounce",
"type": "bool"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "masterContract",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "whitelistMasterContract",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "whitelistedMasterContracts",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token_",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "shareOut",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60e06040523480156200001157600080fd5b5060405162005ad838038062005ad8833981016040819052620000349162000116565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a34660a081905262000084816200009e565b6080525060601b6001600160601b03191660c0526200016a565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fd7df266aff736d415a9dc14b4158201d612e70d75b9c7f4e375ccfd20aa5166f8330604051602001620000f9949392919062000146565b604051602081830303815290604052805190602001209050919050565b60006020828403121562000128578081fd5b81516001600160a01b03811681146200013f578182fd5b9392505050565b938452602084019290925260408301526001600160a01b0316606082015260800190565b60805160a05160c05160601c61592f620001a9600039806107615280610b3752806129105280612bd65250806114845250806114b9525061592f6000f3fe6080604052600436106101dc5760003560e01c80637c516e9411610102578063d2423b5111610095578063f1676d3711610064578063f1676d3714610555578063f18d03cc14610575578063f483b3da14610595578063f7888aec146105b5576101e3565b8063d2423b51146104d0578063da5139ca146104f1578063df23b45b14610511578063e30c397814610540576101e3565b806397da6d30116100d157806397da6d301461045b578063aee4d1b21461047b578063bafe4f1414610490578063c0a47c93146104b0576101e3565b80637c516e94146103e65780637ecebe00146104065780638da5cb5b1461042657806391e0eab51461043b576101e3565b80633e2a9d4e1161017a5780635662311811610149578063566231181461036657806366c6bb0b1461038657806372cb5d97146103a6578063733a9d7c146103c6576101e3565b80633e2a9d4e146102e35780634e71e0c8146103035780634ffe34db146103185780635108a55814610346576101e3565b806312a90c8a116101b657806312a90c8a146102545780631f54245b14610281578063228bfd9f146102a15780633644e515146102c1576101e3565b806302b9446c146101e8578063078dfbe7146102125780630fca884314610234576101e3565b366101e357005b600080fd5b6101fb6101f6366004614929565b6105d5565b6040516102099291906157da565b60405180910390f35b34801561021e57600080fd5b5061023261022d3660046146dd565b610c8c565b005b34801561024057600080fd5b5061023261024f366004614a04565b610e17565b34801561026057600080fd5b5061027461026f3660046145f0565b6111d9565b6040516102099190615066565b61029461028f366004614727565b6111ee565b6040516102099190614dc7565b3480156102ad57600080fd5b506102946102bc3660046145f0565b611457565b3480156102cd57600080fd5b506102d661147f565b6040516102099190615071565b3480156102ef57600080fd5b506102326102fe366004614b0c565b6114df565b34801561030f57600080fd5b50610232611613565b34801561032457600080fd5b506103386103333660046145f0565b6116f9565b6040516102099291906157b7565b34801561035257600080fd5b506102946103613660046145f0565b611735565b34801561037257600080fd5b506102d6610381366004614ad6565b61175d565b34801561039257600080fd5b506102326103a1366004614a96565b6117d4565b3480156103b257600080fd5b506102326103c13660046148c7565b611f89565b3480156103d257600080fd5b506102326103e13660046146b0565b612588565b3480156103f257600080fd5b50610232610401366004614983565b6126a5565b34801561041257600080fd5b506102d66104213660046145f0565b61273f565b34801561043257600080fd5b50610294612751565b34801561044757600080fd5b5061027461045636600461460c565b61276d565b34801561046757600080fd5b506101fb610476366004614929565b61278d565b34801561048757600080fd5b50610232612d7d565b34801561049c57600080fd5b506102946104ab3660046145f0565b612ddc565b3480156104bc57600080fd5b506102326104cb366004614644565b612e04565b6104e36104de36600461478d565b61325d565b604051610209929190614fcc565b3480156104fd57600080fd5b506102d661050c366004614ad6565b613409565b34801561051d57600080fd5b5061053161052c3660046145f0565b613478565b604051610209939291906157fd565b34801561054c57600080fd5b506102946134cd565b34801561056157600080fd5b50610232610570366004614b45565b6134e9565b34801561058157600080fd5b506102326105903660046148d9565b6136c4565b3480156105a157600080fd5b506102326105b03660046147f3565b61391e565b3480156105c157600080fd5b506102d66105d03660046148c7565b613c69565b6000808573ffffffffffffffffffffffffffffffffffffffff81163314801590610615575073ffffffffffffffffffffffffffffffffffffffff81163014155b156106ee573360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610680576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155ae565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80821660009081526003602090815260408083209386168352929052205460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615431565b505b73ffffffffffffffffffffffffffffffffffffffff861661073b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061538e565b600073ffffffffffffffffffffffffffffffffffffffff89161561075f5788610781565b7f00000000000000000000000000000000000000000000000000000000000000005b905061078b614514565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600760209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff808216808552700100000000000000000000000000000000909204169183019190915215158061087c575060008273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087a9190614bb6565b115b6108b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906152b2565b8561091c576108c381886000613c86565b95506103e86108f16108d488613d44565b60208401516fffffffffffffffffffffffffffffffff1690613d94565b6fffffffffffffffffffffffffffffffff16101561091757600080945094505050610c81565b61092b565b61092881876001613dec565b96505b73ffffffffffffffffffffffffffffffffffffffff891630141580610964575073ffffffffffffffffffffffffffffffffffffffff8a16155b8061099557508051610991906fffffffffffffffffffffffffffffffff1661098b84613e8f565b90613f73565b8711155b6109cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615168565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600660209081526040808320938c1683529290522054610a089087613fb0565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600660209081526040808320938d1683529290522055610a64610a4787613d44565b60208301516fffffffffffffffffffffffffffffffff1690613d94565b6fffffffffffffffffffffffffffffffff166020820152610aa1610a8788613d44565b82516fffffffffffffffffffffffffffffffff1690613d94565b6fffffffffffffffffffffffffffffffff908116825273ffffffffffffffffffffffffffffffffffffffff808416600090815260076020908152604090912084518154928601518516700100000000000000000000000000000000029085167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090931692909217909316179091558a16610bbb577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b9d57600080fd5b505af1158015610bb1573d6000803e3d6000fd5b5050505050610bfa565b73ffffffffffffffffffffffffffffffffffffffff89163014610bfa57610bfa73ffffffffffffffffffffffffffffffffffffffff83168a308a613fed565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb2346165e782564f17f5b7e555c21f4fd96fbc93458572bf0113ea35a958fc558a8a604051610c709291906157da565b60405180910390a486945085935050505b509550959350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153fc565b8115610dd15773ffffffffffffffffffffffffffffffffffffffff8316151580610d045750805b610d3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061527b565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600180549091169055610e12565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b505050565b8473ffffffffffffffffffffffffffffffffffffffff81163314801590610e54575073ffffffffffffffffffffffffffffffffffffffff81163014155b15610f24573360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155ae565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526003602090815260408083209386168352929052205460ff16610f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615431565b505b600085858281610f3057fe5b9050602002016020810190610f4591906145f0565b73ffffffffffffffffffffffffffffffffffffffff161415610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615357565b600084815b81811015611157576000888883818110610fae57fe5b9050602002016020810190610fc391906145f0565b9050611066878784818110610fd457fe5b90506020020135600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613fb090919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff808d166000908152600660209081526040808320938616835292905220556110be8787848181106110a857fe5b9050602002013585613fb090919063ffffffff16565b93508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a8a8a8781811061113257fe5b905060200201356040516111469190615071565b60405180910390a450600101610f98565b5073ffffffffffffffffffffffffffffffffffffffff808a166000908152600660209081526040808320938c16835292905220546111959083613f73565b73ffffffffffffffffffffffffffffffffffffffff998a1660009081526006602090815260408083209b909c16825299909952989097209790975550505050505050565b60046020526000908152604090205460ff1681565b600073ffffffffffffffffffffffffffffffffffffffff851661123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615542565b606085901b82156112c6576000858560405161125a929190614d71565b604051809103902090506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152816037826000f593505050611322565b6040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250505b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600260205260409081902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016938a169390931790925590517f4ddf47d4000000000000000000000000000000000000000000000000000000008152634ddf47d49034906113b5908990899060040161510a565b6000604051808303818588803b1580156113ce57600080fd5b505af11580156113e2573d6000803e3d6000fd5b50505050508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fd62166f3c2149208e51788b1401cc356bf5da1fc6c7886a32e18570f57d88b3b878760405161144692919061510a565b60405180910390a350949350505050565b60086020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6000467f000000000000000000000000000000000000000000000000000000000000000081146114b7576114b281614158565b6114d9565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314611530576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153fc565b605f8167ffffffffffffffff161115611575576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061572d565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600a60205260409081902080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff861602179055517f7543af99b5602c06e62da0631b5308489a5ff859150105a623b6eb15e8deae0b906116079084906157e8565b60405180910390a25050565b60015473ffffffffffffffffffffffffffffffffffffffff16338114611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615468565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600180549091169055565b6007602052600090815260409020546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff831660009081526007602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416918101919091526117cc908484613dec565b949350505050565b6117dc61452b565b5073ffffffffffffffffffffffffffffffffffffffff8381166000818152600a602090815260408083208151606081018352905467ffffffffffffffff8082168352680100000000000000008204168285015270010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16818301908152948452600890925280832054935190517f18fccc760000000000000000000000000000000000000000000000000000000081529194939093169283916318fccc76916118ab91339060040161577f565b602060405180830381600087803b1580156118c557600080fd5b505af11580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd9190614bb6565b90508015801561190b575084155b1561191857505050610e12565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600760205260408120546fffffffffffffffffffffffffffffffff1690821315611a1257816119638282613fb0565b915061196e82613d44565b73ffffffffffffffffffffffffffffffffffffffff89166000818152600760205260409081902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff949094169390931790925590517f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d290611a04908490615071565b60405180910390a250611b2d565b6000821215611b2d576000829003611a2a8282613f73565b9150611a3582613d44565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260076020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055611ac2611aa582613d44565b60408701516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff166040808701919091525173ffffffffffffffffffffffffffffffffffffffff8916907f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf9790611b23908490615071565b60405180910390a2505b8515611eb15760006064611b58866020015167ffffffffffffffff168461422190919063ffffffff16565b81611b5f57fe5b0490508085604001516fffffffffffffffffffffffffffffffff161015611cfe576000611bab86604001516fffffffffffffffffffffffffffffffff1683613f7390919063ffffffff16565b90508615801590611bbb57508681115b15611bc35750855b611be473ffffffffffffffffffffffffffffffffffffffff8a168683614272565b611c0d611bf082613d44565b60408801516fffffffffffffffffffffffffffffffff1690613d94565b6fffffffffffffffffffffffffffffffff16604080880191909152517f6939aaf500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690636939aaf590611c78908490600401615071565b600060405180830381600087803b158015611c9257600080fd5b505af1158015611ca6573d6000803e3d6000fd5b505050508873ffffffffffffffffffffffffffffffffffffffff167fb18e7e4f6eac147a63a3bb6beb2d9039c88698623aff3efc4febbc20b0164ee582604051611cf09190615071565b60405180910390a250611eaf565b8085604001516fffffffffffffffffffffffffffffffff161115611eaf576000611d47611d2a83613d44565b60408801516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff1690508615801590611d6957508681115b15611d715750855b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff871690632e1a7d4d90611dc6908590600401615071565b602060405180830381600087803b158015611de057600080fd5b505af1158015611df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e189190614bb6565b9050611e43611e2682613d44565b60408901516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff166040808901919091525173ffffffffffffffffffffffffffffffffffffffff8b16907f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a90611ea4908490615071565b60405180910390a250505b505b50505073ffffffffffffffffffffffffffffffffffffffff84166000908152600a6020908152604091829020835181549285015193909401516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff94851668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff959096167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090941693909317939093169390931791909116179055505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153fc565b611fe261452b565b5073ffffffffffffffffffffffffffffffffffffffff8281166000818152600a602090815260408083208151606081018352905467ffffffffffffffff80821683526801000000000000000082048116838601527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff16828401529484526009909252909120548151919316911615806120ac57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156121645773ffffffffffffffffffffffffffffffffffffffff848116600090815260096020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691851691909117905561210d426143da565b67ffffffffffffffff16825260405173ffffffffffffffffffffffffffffffffffffffff80851691908616907f6f7ccdf3f86039e5a1dcf6028bf7b4773cbf7a234716ba2e5392b12bb0f8558f90600090a36124b4565b815167ffffffffffffffff16158015906121895750815167ffffffffffffffff164210155b6121bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153c5565b73ffffffffffffffffffffffffffffffffffffffff84811660009081526008602052604090205416156124185773ffffffffffffffffffffffffffffffffffffffff808516600090815260086020526040808220548582015191517f7f8661a100000000000000000000000000000000000000000000000000000000815292931691637f8661a19161225391600401615762565b602060405180830381600087803b15801561226d57600080fd5b505af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614bb6565b905060008113156123365773ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902081906122e1908261441e565b508573ffffffffffffffffffffffffffffffffffffffff167f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d2826040516123289190615071565b60405180910390a2506123c4565b60008112156123c45773ffffffffffffffffffffffffffffffffffffffff851660009081526007602052604081209082900390612373908261448c565b508573ffffffffffffffffffffffffffffffffffffffff167f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf97826040516123ba9190615071565b60405180910390a2505b8473ffffffffffffffffffffffffffffffffffffffff167f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a846040015160405161240e9190615762565b60405180910390a2505b73ffffffffffffffffffffffffffffffffffffffff808516600081815260086020908152604080832080548688167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091558388528782018490528484526009909252808320805490921690915551928616927f03e6352a885adc4cc54767592939c3b1bbd65685658c3beaaba66a888120e2179190a35b5073ffffffffffffffffffffffffffffffffffffffff929092166000908152600a6020908152604091829020845181549286015193909501517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff958616177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000009590931694909402919091176fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000091909216021790915550565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153fc565b73ffffffffffffffffffffffffffffffffffffffff8216612626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061519f565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016841515179055517f31a1e0eac44b54ac6c2a2efa87e92c83405ffcf33fceef02a7bca695130e260090611607908490615066565b6040517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169063d505accf90612703908a908a908a908a908a908a908a90600401614f58565b600060405180830381600087803b15801561271d57600080fd5b505af1158015612731573d6000803e3d6000fd5b505050505050505050505050565b60056020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600360209081526000928352604080842090915290825290205460ff1681565b6000808573ffffffffffffffffffffffffffffffffffffffff811633148015906127cd575073ffffffffffffffffffffffffffffffffffffffff81163014155b1561289d573360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff168061282f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155ae565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526003602090815260408083209386168352929052205460ff1661289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615431565b505b73ffffffffffffffffffffffffffffffffffffffff86166128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061538e565b600073ffffffffffffffffffffffffffffffffffffffff89161561290e5788612930565b7f00000000000000000000000000000000000000000000000000000000000000005b905061293a614514565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600760209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff80821684527001000000000000000000000000000000009091041690820152856129b5576129ae81886001613c86565b95506129c4565b6129c181876000613dec565b96505b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600660209081526040808320938d1683529290522054612a019087613f73565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600660209081526040808320938e1683529290522055612a5a612a4088613d44565b82516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff168152612a97612a7a87613d44565b60208301516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff16602082018190526103e8111580612ad4575060208101516fffffffffffffffffffffffffffffffff16155b612b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615244565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260076020908152604090912083518154928501517fffffffffffffffffffffffffffffffff000000000000000000000000000000009093166fffffffffffffffffffffffffffffffff91821617811670010000000000000000000000000000000091909316029190911790558a16612ce6576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90612c0b908a90600401615071565b600060405180830381600087803b158015612c2557600080fd5b505af1158015612c39573d6000803e3d6000fd5b5050505060008873ffffffffffffffffffffffffffffffffffffffff1688604051612c6390614dc4565b60006040518083038185875af1925050503d8060008114612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b5050905080612ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906156bf565b50612d07565b612d0773ffffffffffffffffffffffffffffffffffffffff83168989614272565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fad9ab9ee6953d4d177f4a03b3a3ac3178ffcb9816319f348060194aa76b144868a8a604051610c709291906157da565b3360008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fdfb44ffabf0d3a8f650d3ce43eff98f6d050e7ea1a396d5794f014e7dadabacb9190a2565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff8516612e51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615577565b81158015612e5d575080155b8015612e6a575060ff8316155b15612f815773ffffffffffffffffffffffffffffffffffffffff86163314612ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906151d6565b73ffffffffffffffffffffffffffffffffffffffff8681166000908152600260205260409020541615612f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906154d4565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604090205460ff16612f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615688565b6131be565b73ffffffffffffffffffffffffffffffffffffffff8616612fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061561a565b60006040518060400160405280600281526020017f190100000000000000000000000000000000000000000000000000000000000081525061300e61147f565b7f1962bc9f5484cb7a998701b81090e966ee1fce5771af884cceee7c081b14ade28761305a577fb426802f1f7dc850a7b6b38805edea2442f3992878a9ab985abfe8091d95d0b161307c565b7f422ac5323fe049241dee67716229a1cc1bc7b313b23dfe3ef6d42ab177a3b2845b73ffffffffffffffffffffffffffffffffffffffff8b1660009081526005602090815260409182902080546001810190915591516130c39493928e928e928e92910161507a565b604051602081830303815290604052805190602001206040516020016130eb93929190614d9d565b60405160208183030381529060405280519060200120905060006001828686866040516000815260200160405260405161312894939291906150ec565b6020604051602081039080840390855afa15801561314a573d6000803e3d6000fd5b5050506020604051035190508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146131bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061550b565b50505b73ffffffffffffffffffffffffffffffffffffffff8581166000818152600360209081526040808320948b16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016881515179055517f5f6ebb64ba012a851c6f014e6cad458ddf213d1512049b31cd06365c2b0592579061324d908890615066565b60405180910390a3505050505050565b6060808367ffffffffffffffff8111801561327757600080fd5b506040519080825280602002602001820160405280156132a1578160200160208202803683370190505b5091508367ffffffffffffffff811180156132bb57600080fd5b506040519080825280602002602001820160405280156132ef57816020015b60608152602001906001900390816132da5790505b50905060005b8481101561340057600060603088888581811061330e57fe5b90506020028101906133209190615833565b60405161332e929190614d71565b600060405180830381855af49150503d8060008114613369576040519150601f19603f3d011682016040523d82523d6000602084013e61336e565b606091505b5091509150818061337d575085155b613386826144b4565b906133be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677919061511e565b50818584815181106133cc57fe5b602002602001019015159081151581525050808484815181106133eb57fe5b602090810291909101015250506001016132f5565b50935093915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526007602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416918101919091526117cc908484613c86565b600a6020526000908152604090205467ffffffffffffffff808216916801000000000000000081049091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000620186a06134fa856032614221565b8161350157fe5b04905061352573ffffffffffffffffffffffffffffffffffffffff86168786614272565b6040517f23e30c8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816906323e30c8b906135819033908990899087908a908a90600401614ed5565b600060405180830381600087803b15801561359b57600080fd5b505af11580156135af573d6000803e3d6000fd5b505050506135fc6135bf82613d44565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600760205260409020906fffffffffffffffffffffffffffffffff1661441e565b61360586613e8f565b101561363d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615651565b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a22320487856040516136b39291906157da565b60405180910390a450505050505050565b8273ffffffffffffffffffffffffffffffffffffffff81163314801590613701575073ffffffffffffffffffffffffffffffffffffffff81163014155b156137d1573360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680613763576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155ae565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526003602090815260408083209386168352929052205460ff166137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615431565b505b73ffffffffffffffffffffffffffffffffffffffff831661381e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061538e565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526006602090815260408083209388168352929052205461385b9083613f73565b73ffffffffffffffffffffffffffffffffffffffff8681166000908152600660209081526040808320898516845290915280822093909355908516815220546138a49083613fb0565b73ffffffffffffffffffffffffffffffffffffffff80871660008181526006602090815260408083208986168085529252918290209490945551918716917f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a9061390f908790615071565b60405180910390a45050505050565b60608567ffffffffffffffff8111801561393757600080fd5b50604051908082528060200260200182016040528015613961578160200160208202803683370190505b5090508560005b81811015613a3d57600087878381811061397e57fe5b905060200201359050620186a061399f60328361422190919063ffffffff16565b816139a657fe5b048483815181106139b357fe5b602002602001018181525050613a348c8c848181106139ce57fe5b90506020020160208101906139e391906145f0565b8989858181106139ef57fe5b905060200201358c8c86818110613a0257fe5b9050602002016020810190613a1791906145f0565b73ffffffffffffffffffffffffffffffffffffffff169190614272565b50600101613968565b506040517fd9d1762300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c169063d9d1762390613a9e9033908c908c908c908c908a908d908d90600401614de8565b600060405180830381600087803b158015613ab857600080fd5b505af1158015613acc573d6000803e3d6000fd5b5050505060005b81811015612731576000898983818110613ae957fe5b9050602002016020810190613afe91906145f0565b9050613b5c613b1f858481518110613b1257fe5b6020026020010151613d44565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600760205260409020906fffffffffffffffffffffffffffffffff1661441e565b613b6582613e8f565b1015613b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615651565b8b8b83818110613ba957fe5b9050602002016020810190613bbe91906145f0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a2232048b8b87818110613c2f57fe5b90506020020135888781518110613c4257fe5b6020026020010151604051613c589291906157da565b60405180910390a450600101613ad3565b600660209081526000928352604080842090915290825290205481565b82516000906fffffffffffffffffffffffffffffffff16613ca8575081613d3d565b835160208501516fffffffffffffffffffffffffffffffff91821691613cd091869116614221565b81613cd757fe5b049050818015613d2d57508284602001516fffffffffffffffffffffffffffffffff16613d2386600001516fffffffffffffffffffffffffffffffff168461422190919063ffffffff16565b81613d2a57fe5b04105b15613d3d576117cc816001613fb0565b9392505050565b60006fffffffffffffffffffffffffffffffff821115613d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906152e9565b5090565b8181016fffffffffffffffffffffffffffffffff8083169082161015613de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615320565b92915050565b600083602001516fffffffffffffffffffffffffffffffff1660001415613e14575081613d3d565b602084015184516fffffffffffffffffffffffffffffffff91821691613e3c91869116614221565b81613e4357fe5b049050818015613d2d57508284600001516fffffffffffffffffffffffffffffffff16613d2386602001516fffffffffffffffffffffffffffffffff168461422190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff81166000818152600a60205260408082205490517f70a082310000000000000000000000000000000000000000000000000000000081529192613de6927001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff16916370a0823190613f1d903090600401614dc7565b60206040518083038186803b158015613f3557600080fd5b505afa158015613f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f6d9190614bb6565b90613fb0565b80820382811115613de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615131565b81810181811015613de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615320565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b86868660405160240161402593929190614f27565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516140ae9190614d81565b6000604051808303816000865af19150503d80600081146140eb576040519150601f19603f3d011682016040523d82523d6000602084013e6140f0565b606091505b509150915081801561411a57508051158061411a57508080602001905181019061411a91906147d7565b614150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155e5565b505050505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fd7df266aff736d415a9dc14b4158201d612e70d75b9c7f4e375ccfd20aa5166f83306040516020016141b194939291906150bb565b6040516020818303038152906040528051906020012090505b919050565b8082036fffffffffffffffffffffffffffffffff8084169082161115613de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615131565b600081158061423c5750508082028282828161423957fe5b04145b613de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906156f6565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b85856040516024016142a8929190614fa6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516143319190614d81565b6000604051808303816000865af19150503d806000811461436e576040519150601f19603f3d011682016040523d82523d6000602084013e614373565b606091505b509150915081801561439d57508051158061439d57508080602001905181019061439d91906147d7565b6143d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061520d565b5050505050565b600067ffffffffffffffff821115613d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061549d565b600061444661442c83613d44565b84546fffffffffffffffffffffffffffffffff1690613d94565b83547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091169081179093555090919050565b600061444661449a83613d44565b84546fffffffffffffffffffffffffffffffff16906141cf565b60606044825110156144fa575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526141ca565b60048201915081806020019051810190613de69190614bce565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261455c578182fd5b50813567ffffffffffffffff811115614573578182fd5b602083019150836020808302850101111561458d57600080fd5b9250929050565b60008083601f8401126145a5578182fd5b50813567ffffffffffffffff8111156145bc578182fd5b60208301915083602082850101111561458d57600080fd5b8035613de6816158c6565b803560ff81168114613de657600080fd5b600060208284031215614601578081fd5b8135613d3d816158c6565b6000806040838503121561461e578081fd5b8235614629816158c6565b91506020830135614639816158c6565b809150509250929050565b60008060008060008060c0878903121561465c578182fd5b8635614667816158c6565b95506020870135614677816158c6565b94506040870135614687816158eb565b935061469688606089016145df565b92506080870135915060a087013590509295509295509295565b600080604083850312156146c2578182fd5b82356146cd816158c6565b91506020830135614639816158eb565b6000806000606084860312156146f1578283fd5b83356146fc816158c6565b9250602084013561470c816158eb565b9150604084013561471c816158eb565b809150509250925092565b6000806000806060858703121561473c578384fd5b8435614747816158c6565b9350602085013567ffffffffffffffff811115614762578384fd5b61476e87828801614594565b9094509250506040850135614782816158eb565b939692955090935050565b6000806000604084860312156147a1578081fd5b833567ffffffffffffffff8111156147b7578182fd5b6147c38682870161454b565b909450925050602084013561471c816158eb565b6000602082840312156147e8578081fd5b8151613d3d816158eb565b600080600080600080600080600060a08a8c031215614810578687fd5b893561481b816158c6565b985060208a013567ffffffffffffffff80821115614837578889fd5b6148438d838e0161454b565b909a50985060408c013591508082111561485b578485fd5b6148678d838e0161454b565b909850965060608c013591508082111561487f578485fd5b61488b8d838e0161454b565b909650945060808c01359150808211156148a3578384fd5b506148b08c828d01614594565b915080935050809150509295985092959850929598565b6000806040838503121561461e578182fd5b600080600080608085870312156148ee578182fd5b84356148f9816158c6565b93506020850135614909816158c6565b92506040850135614919816158c6565b9396929550929360600135925050565b600080600080600060a08688031215614940578283fd5b853561494b816158c6565b9450602086013561495b816158c6565b9350604086013561496b816158c6565b94979396509394606081013594506080013592915050565b600080600080600080600080610100898b03121561499f578182fd5b88356149aa816158c6565b975060208901356149ba816158c6565b965060408901356149ca816158c6565b955060608901359450608089013593506149e78a60a08b016145df565b925060c0890135915060e089013590509295985092959890939650565b60008060008060008060808789031215614a1c578384fd5b8635614a27816158c6565b95506020870135614a37816158c6565b9450604087013567ffffffffffffffff80821115614a53578586fd5b614a5f8a838b0161454b565b90965094506060890135915080821115614a77578384fd5b50614a8489828a0161454b565b979a9699509497509295939492505050565b600080600060608486031215614aaa578081fd5b8335614ab5816158c6565b92506020840135614ac5816158eb565b929592945050506040919091013590565b600080600060608486031215614aea578081fd5b8335614af5816158c6565b925060208401359150604084013561471c816158eb565b60008060408385031215614b1e578182fd5b8235614b29816158c6565b9150602083013567ffffffffffffffff81168114614639578182fd5b60008060008060008060a08789031215614b5d578384fd5b8635614b68816158c6565b95506020870135614b78816158c6565b94506040870135614b88816158c6565b935060608701359250608087013567ffffffffffffffff811115614baa578283fd5b614a8489828a01614594565b600060208284031215614bc7578081fd5b5051919050565b600060208284031215614bdf578081fd5b815167ffffffffffffffff80821115614bf6578283fd5b818401915084601f830112614c09578283fd5b815181811115614c17578384fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401168201018181108482111715614c55578586fd5b604052818152838201602001871015614c6c578485fd5b614c7d826020830160208701615896565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff16815260200190565b6000815180845260208085019450808401835b83811015614cd457815187529582019590820190600101614cb8565b509495945050505050565b600082845282826020860137806020848601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011685010190509392505050565b60008151808452614d3f816020860160208601615896565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b60008251614d93818460208701615896565b9190910192915050565b60008451614daf818460208901615896565b91909101928352506020820152604001919050565b90565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600060a0820173ffffffffffffffffffffffffffffffffffffffff8b168352602060a08185015281614e1a8b84615071565b90508b9250835b8b811015614e4c57828401614e3f83614e3a83886145d4565b614c87565b9094509150600101614e21565b5084810360408601528881527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff891115614e84578384fd5b8189029250828a8383013782810192505080820183815281858403016060860152614eaf8189614ca5565b925050508281036080840152614ec6818587614cdf565b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a06080830152614f1b60a083018486614cdf565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff97881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015615007578151151584529284019290840190600101614fe9565b5050508381038285015280855161501e8184615071565b91508192508381028201848801865b83811015615057578583038552615045838351614d27565b9487019492509086019060010161502d565b50909998505050505050505050565b901515815260200190565b90815260200190565b958652602086019490945273ffffffffffffffffffffffffffffffffffffffff9283166040860152911660608401521515608083015260a082015260c00190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526117cc602083018486614cdf565b600060208252613d3d6020830184614d27565b60208082526015908201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20536b696d20746f6f206d756368000000000000000000604082015260600190565b6020808252601c908201527f4d6173746572434d67723a2043616e6e6f7420617070726f7665203000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a2075736572206e6f742073656e6465720000000000604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526016908201527f42656e746f426f783a2063616e6e6f7420656d70747900000000000000000000604082015260600190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b60208082526013908201527f42656e746f426f783a204e6f20746f6b656e7300000000000000000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20746f5b305d206e6f7420736574000000000000000000604082015260600190565b60208082526014908201527f42656e746f426f783a20746f206e6f7420736574000000000000000000000000604082015260600190565b6020808252601a908201527f53747261746567794d616e616765723a20546f6f206561726c79000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f42656e746f426f783a205472616e73666572206e6f7420617070726f76656400604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526019908201527f4d6173746572434d67723a207573657220697320636c6f6e6500000000000000604082015260600190565b6020808252601d908201527f4d6173746572434d67723a20496e76616c6964205369676e6174757265000000604082015260600190565b6020808252818101527f426f72696e67466163746f72793a204e6f206d6173746572436f6e7472616374604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206d617374657243206e6f74207365740000000000604082015260600190565b6020808252601b908201527f42656e746f426f783a206e6f206d6173746572436f6e74726163740000000000604082015260600190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b6020808252601c908201527f4d6173746572434d67723a20557365722063616e6e6f74206265203000000000604082015260600190565b60208082526016908201527f42656e746f426f783a2057726f6e6720616d6f756e7400000000000000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206e6f742077686974656c69737465640000000000604082015260600190565b6020808252601d908201527f42656e746f426f783a20455448207472616e73666572206661696c6564000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f53747261746567794d616e616765723a2054617267657420746f6f2068696768604082015260600190565b6fffffffffffffffffffffffffffffffff91909116815260200190565b6fffffffffffffffffffffffffffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b6fffffffffffffffffffffffffffffffff92831681529116602082015260400190565b918252602082015260400190565b67ffffffffffffffff91909116815260200190565b67ffffffffffffffff93841681529190921660208201526fffffffffffffffffffffffffffffffff909116604082015260600190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615867578283fd5b83018035915067ffffffffffffffff821115615881578283fd5b60200191503681900382131561458d57600080fd5b60005b838110156158b1578181015183820152602001615899565b838111156158c0576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff811681146158e857600080fd5b50565b80151581146158e857600080fdfea26469706673582212201c1cd58cbd270e1115889d02f475226920decb3991c2ad3329ed440a7ddfcc3564736f6c634300060c0033",
"deployedBytecode": "0x6080604052600436106101dc5760003560e01c80637c516e9411610102578063d2423b5111610095578063f1676d3711610064578063f1676d3714610555578063f18d03cc14610575578063f483b3da14610595578063f7888aec146105b5576101e3565b8063d2423b51146104d0578063da5139ca146104f1578063df23b45b14610511578063e30c397814610540576101e3565b806397da6d30116100d157806397da6d301461045b578063aee4d1b21461047b578063bafe4f1414610490578063c0a47c93146104b0576101e3565b80637c516e94146103e65780637ecebe00146104065780638da5cb5b1461042657806391e0eab51461043b576101e3565b80633e2a9d4e1161017a5780635662311811610149578063566231181461036657806366c6bb0b1461038657806372cb5d97146103a6578063733a9d7c146103c6576101e3565b80633e2a9d4e146102e35780634e71e0c8146103035780634ffe34db146103185780635108a55814610346576101e3565b806312a90c8a116101b657806312a90c8a146102545780631f54245b14610281578063228bfd9f146102a15780633644e515146102c1576101e3565b806302b9446c146101e8578063078dfbe7146102125780630fca884314610234576101e3565b366101e357005b600080fd5b6101fb6101f6366004614929565b6105d5565b6040516102099291906157da565b60405180910390f35b34801561021e57600080fd5b5061023261022d3660046146dd565b610c8c565b005b34801561024057600080fd5b5061023261024f366004614a04565b610e17565b34801561026057600080fd5b5061027461026f3660046145f0565b6111d9565b6040516102099190615066565b61029461028f366004614727565b6111ee565b6040516102099190614dc7565b3480156102ad57600080fd5b506102946102bc3660046145f0565b611457565b3480156102cd57600080fd5b506102d661147f565b6040516102099190615071565b3480156102ef57600080fd5b506102326102fe366004614b0c565b6114df565b34801561030f57600080fd5b50610232611613565b34801561032457600080fd5b506103386103333660046145f0565b6116f9565b6040516102099291906157b7565b34801561035257600080fd5b506102946103613660046145f0565b611735565b34801561037257600080fd5b506102d6610381366004614ad6565b61175d565b34801561039257600080fd5b506102326103a1366004614a96565b6117d4565b3480156103b257600080fd5b506102326103c13660046148c7565b611f89565b3480156103d257600080fd5b506102326103e13660046146b0565b612588565b3480156103f257600080fd5b50610232610401366004614983565b6126a5565b34801561041257600080fd5b506102d66104213660046145f0565b61273f565b34801561043257600080fd5b50610294612751565b34801561044757600080fd5b5061027461045636600461460c565b61276d565b34801561046757600080fd5b506101fb610476366004614929565b61278d565b34801561048757600080fd5b50610232612d7d565b34801561049c57600080fd5b506102946104ab3660046145f0565b612ddc565b3480156104bc57600080fd5b506102326104cb366004614644565b612e04565b6104e36104de36600461478d565b61325d565b604051610209929190614fcc565b3480156104fd57600080fd5b506102d661050c366004614ad6565b613409565b34801561051d57600080fd5b5061053161052c3660046145f0565b613478565b604051610209939291906157fd565b34801561054c57600080fd5b506102946134cd565b34801561056157600080fd5b50610232610570366004614b45565b6134e9565b34801561058157600080fd5b506102326105903660046148d9565b6136c4565b3480156105a157600080fd5b506102326105b03660046147f3565b61391e565b3480156105c157600080fd5b506102d66105d03660046148c7565b613c69565b6000808573ffffffffffffffffffffffffffffffffffffffff81163314801590610615575073ffffffffffffffffffffffffffffffffffffffff81163014155b156106ee573360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610680576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155ae565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80821660009081526003602090815260408083209386168352929052205460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615431565b505b73ffffffffffffffffffffffffffffffffffffffff861661073b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061538e565b600073ffffffffffffffffffffffffffffffffffffffff89161561075f5788610781565b7f00000000000000000000000000000000000000000000000000000000000000005b905061078b614514565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600760209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff808216808552700100000000000000000000000000000000909204169183019190915215158061087c575060008273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087a9190614bb6565b115b6108b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906152b2565b8561091c576108c381886000613c86565b95506103e86108f16108d488613d44565b60208401516fffffffffffffffffffffffffffffffff1690613d94565b6fffffffffffffffffffffffffffffffff16101561091757600080945094505050610c81565b61092b565b61092881876001613dec565b96505b73ffffffffffffffffffffffffffffffffffffffff891630141580610964575073ffffffffffffffffffffffffffffffffffffffff8a16155b8061099557508051610991906fffffffffffffffffffffffffffffffff1661098b84613e8f565b90613f73565b8711155b6109cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615168565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600660209081526040808320938c1683529290522054610a089087613fb0565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600660209081526040808320938d1683529290522055610a64610a4787613d44565b60208301516fffffffffffffffffffffffffffffffff1690613d94565b6fffffffffffffffffffffffffffffffff166020820152610aa1610a8788613d44565b82516fffffffffffffffffffffffffffffffff1690613d94565b6fffffffffffffffffffffffffffffffff908116825273ffffffffffffffffffffffffffffffffffffffff808416600090815260076020908152604090912084518154928601518516700100000000000000000000000000000000029085167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090931692909217909316179091558a16610bbb577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b9d57600080fd5b505af1158015610bb1573d6000803e3d6000fd5b5050505050610bfa565b73ffffffffffffffffffffffffffffffffffffffff89163014610bfa57610bfa73ffffffffffffffffffffffffffffffffffffffff83168a308a613fed565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb2346165e782564f17f5b7e555c21f4fd96fbc93458572bf0113ea35a958fc558a8a604051610c709291906157da565b60405180910390a486945085935050505b509550959350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153fc565b8115610dd15773ffffffffffffffffffffffffffffffffffffffff8316151580610d045750805b610d3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061527b565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600180549091169055610e12565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b505050565b8473ffffffffffffffffffffffffffffffffffffffff81163314801590610e54575073ffffffffffffffffffffffffffffffffffffffff81163014155b15610f24573360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155ae565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526003602090815260408083209386168352929052205460ff16610f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615431565b505b600085858281610f3057fe5b9050602002016020810190610f4591906145f0565b73ffffffffffffffffffffffffffffffffffffffff161415610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615357565b600084815b81811015611157576000888883818110610fae57fe5b9050602002016020810190610fc391906145f0565b9050611066878784818110610fd457fe5b90506020020135600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613fb090919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff808d166000908152600660209081526040808320938616835292905220556110be8787848181106110a857fe5b9050602002013585613fb090919063ffffffff16565b93508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a8a8a8781811061113257fe5b905060200201356040516111469190615071565b60405180910390a450600101610f98565b5073ffffffffffffffffffffffffffffffffffffffff808a166000908152600660209081526040808320938c16835292905220546111959083613f73565b73ffffffffffffffffffffffffffffffffffffffff998a1660009081526006602090815260408083209b909c16825299909952989097209790975550505050505050565b60046020526000908152604090205460ff1681565b600073ffffffffffffffffffffffffffffffffffffffff851661123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615542565b606085901b82156112c6576000858560405161125a929190614d71565b604051809103902090506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152816037826000f593505050611322565b6040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250505b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600260205260409081902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016938a169390931790925590517f4ddf47d4000000000000000000000000000000000000000000000000000000008152634ddf47d49034906113b5908990899060040161510a565b6000604051808303818588803b1580156113ce57600080fd5b505af11580156113e2573d6000803e3d6000fd5b50505050508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fd62166f3c2149208e51788b1401cc356bf5da1fc6c7886a32e18570f57d88b3b878760405161144692919061510a565b60405180910390a350949350505050565b60086020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6000467f000000000000000000000000000000000000000000000000000000000000000081146114b7576114b281614158565b6114d9565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314611530576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153fc565b605f8167ffffffffffffffff161115611575576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061572d565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600a60205260409081902080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff861602179055517f7543af99b5602c06e62da0631b5308489a5ff859150105a623b6eb15e8deae0b906116079084906157e8565b60405180910390a25050565b60015473ffffffffffffffffffffffffffffffffffffffff16338114611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615468565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600180549091169055565b6007602052600090815260409020546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff831660009081526007602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416918101919091526117cc908484613dec565b949350505050565b6117dc61452b565b5073ffffffffffffffffffffffffffffffffffffffff8381166000818152600a602090815260408083208151606081018352905467ffffffffffffffff8082168352680100000000000000008204168285015270010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16818301908152948452600890925280832054935190517f18fccc760000000000000000000000000000000000000000000000000000000081529194939093169283916318fccc76916118ab91339060040161577f565b602060405180830381600087803b1580156118c557600080fd5b505af11580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd9190614bb6565b90508015801561190b575084155b1561191857505050610e12565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600760205260408120546fffffffffffffffffffffffffffffffff1690821315611a1257816119638282613fb0565b915061196e82613d44565b73ffffffffffffffffffffffffffffffffffffffff89166000818152600760205260409081902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff949094169390931790925590517f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d290611a04908490615071565b60405180910390a250611b2d565b6000821215611b2d576000829003611a2a8282613f73565b9150611a3582613d44565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260076020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055611ac2611aa582613d44565b60408701516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff166040808701919091525173ffffffffffffffffffffffffffffffffffffffff8916907f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf9790611b23908490615071565b60405180910390a2505b8515611eb15760006064611b58866020015167ffffffffffffffff168461422190919063ffffffff16565b81611b5f57fe5b0490508085604001516fffffffffffffffffffffffffffffffff161015611cfe576000611bab86604001516fffffffffffffffffffffffffffffffff1683613f7390919063ffffffff16565b90508615801590611bbb57508681115b15611bc35750855b611be473ffffffffffffffffffffffffffffffffffffffff8a168683614272565b611c0d611bf082613d44565b60408801516fffffffffffffffffffffffffffffffff1690613d94565b6fffffffffffffffffffffffffffffffff16604080880191909152517f6939aaf500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690636939aaf590611c78908490600401615071565b600060405180830381600087803b158015611c9257600080fd5b505af1158015611ca6573d6000803e3d6000fd5b505050508873ffffffffffffffffffffffffffffffffffffffff167fb18e7e4f6eac147a63a3bb6beb2d9039c88698623aff3efc4febbc20b0164ee582604051611cf09190615071565b60405180910390a250611eaf565b8085604001516fffffffffffffffffffffffffffffffff161115611eaf576000611d47611d2a83613d44565b60408801516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff1690508615801590611d6957508681115b15611d715750855b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff871690632e1a7d4d90611dc6908590600401615071565b602060405180830381600087803b158015611de057600080fd5b505af1158015611df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e189190614bb6565b9050611e43611e2682613d44565b60408901516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff166040808901919091525173ffffffffffffffffffffffffffffffffffffffff8b16907f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a90611ea4908490615071565b60405180910390a250505b505b50505073ffffffffffffffffffffffffffffffffffffffff84166000908152600a6020908152604091829020835181549285015193909401516fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000000267ffffffffffffffff94851668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff959096167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090941693909317939093169390931791909116179055505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153fc565b611fe261452b565b5073ffffffffffffffffffffffffffffffffffffffff8281166000818152600a602090815260408083208151606081018352905467ffffffffffffffff80821683526801000000000000000082048116838601527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff16828401529484526009909252909120548151919316911615806120ac57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156121645773ffffffffffffffffffffffffffffffffffffffff848116600090815260096020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691851691909117905561210d426143da565b67ffffffffffffffff16825260405173ffffffffffffffffffffffffffffffffffffffff80851691908616907f6f7ccdf3f86039e5a1dcf6028bf7b4773cbf7a234716ba2e5392b12bb0f8558f90600090a36124b4565b815167ffffffffffffffff16158015906121895750815167ffffffffffffffff164210155b6121bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153c5565b73ffffffffffffffffffffffffffffffffffffffff84811660009081526008602052604090205416156124185773ffffffffffffffffffffffffffffffffffffffff808516600090815260086020526040808220548582015191517f7f8661a100000000000000000000000000000000000000000000000000000000815292931691637f8661a19161225391600401615762565b602060405180830381600087803b15801561226d57600080fd5b505af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614bb6565b905060008113156123365773ffffffffffffffffffffffffffffffffffffffff8516600090815260076020526040902081906122e1908261441e565b508573ffffffffffffffffffffffffffffffffffffffff167f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d2826040516123289190615071565b60405180910390a2506123c4565b60008112156123c45773ffffffffffffffffffffffffffffffffffffffff851660009081526007602052604081209082900390612373908261448c565b508573ffffffffffffffffffffffffffffffffffffffff167f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf97826040516123ba9190615071565b60405180910390a2505b8473ffffffffffffffffffffffffffffffffffffffff167f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a846040015160405161240e9190615762565b60405180910390a2505b73ffffffffffffffffffffffffffffffffffffffff808516600081815260086020908152604080832080548688167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091558388528782018490528484526009909252808320805490921690915551928616927f03e6352a885adc4cc54767592939c3b1bbd65685658c3beaaba66a888120e2179190a35b5073ffffffffffffffffffffffffffffffffffffffff929092166000908152600a6020908152604091829020845181549286015193909501517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff958616177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000009590931694909402919091176fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000091909216021790915550565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906153fc565b73ffffffffffffffffffffffffffffffffffffffff8216612626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061519f565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016841515179055517f31a1e0eac44b54ac6c2a2efa87e92c83405ffcf33fceef02a7bca695130e260090611607908490615066565b6040517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169063d505accf90612703908a908a908a908a908a908a908a90600401614f58565b600060405180830381600087803b15801561271d57600080fd5b505af1158015612731573d6000803e3d6000fd5b505050505050505050505050565b60056020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600360209081526000928352604080842090915290825290205460ff1681565b6000808573ffffffffffffffffffffffffffffffffffffffff811633148015906127cd575073ffffffffffffffffffffffffffffffffffffffff81163014155b1561289d573360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff168061282f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155ae565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526003602090815260408083209386168352929052205460ff1661289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615431565b505b73ffffffffffffffffffffffffffffffffffffffff86166128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061538e565b600073ffffffffffffffffffffffffffffffffffffffff89161561290e5788612930565b7f00000000000000000000000000000000000000000000000000000000000000005b905061293a614514565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600760209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff80821684527001000000000000000000000000000000009091041690820152856129b5576129ae81886001613c86565b95506129c4565b6129c181876000613dec565b96505b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600660209081526040808320938d1683529290522054612a019087613f73565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600660209081526040808320938e1683529290522055612a5a612a4088613d44565b82516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff168152612a97612a7a87613d44565b60208301516fffffffffffffffffffffffffffffffff16906141cf565b6fffffffffffffffffffffffffffffffff16602082018190526103e8111580612ad4575060208101516fffffffffffffffffffffffffffffffff16155b612b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615244565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260076020908152604090912083518154928501517fffffffffffffffffffffffffffffffff000000000000000000000000000000009093166fffffffffffffffffffffffffffffffff91821617811670010000000000000000000000000000000091909316029190911790558a16612ce6576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90612c0b908a90600401615071565b600060405180830381600087803b158015612c2557600080fd5b505af1158015612c39573d6000803e3d6000fd5b5050505060008873ffffffffffffffffffffffffffffffffffffffff1688604051612c6390614dc4565b60006040518083038185875af1925050503d8060008114612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b5050905080612ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906156bf565b50612d07565b612d0773ffffffffffffffffffffffffffffffffffffffff83168989614272565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fad9ab9ee6953d4d177f4a03b3a3ac3178ffcb9816319f348060194aa76b144868a8a604051610c709291906157da565b3360008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fdfb44ffabf0d3a8f650d3ce43eff98f6d050e7ea1a396d5794f014e7dadabacb9190a2565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff8516612e51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615577565b81158015612e5d575080155b8015612e6a575060ff8316155b15612f815773ffffffffffffffffffffffffffffffffffffffff86163314612ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906151d6565b73ffffffffffffffffffffffffffffffffffffffff8681166000908152600260205260409020541615612f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906154d4565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604090205460ff16612f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615688565b6131be565b73ffffffffffffffffffffffffffffffffffffffff8616612fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061561a565b60006040518060400160405280600281526020017f190100000000000000000000000000000000000000000000000000000000000081525061300e61147f565b7f1962bc9f5484cb7a998701b81090e966ee1fce5771af884cceee7c081b14ade28761305a577fb426802f1f7dc850a7b6b38805edea2442f3992878a9ab985abfe8091d95d0b161307c565b7f422ac5323fe049241dee67716229a1cc1bc7b313b23dfe3ef6d42ab177a3b2845b73ffffffffffffffffffffffffffffffffffffffff8b1660009081526005602090815260409182902080546001810190915591516130c39493928e928e928e92910161507a565b604051602081830303815290604052805190602001206040516020016130eb93929190614d9d565b60405160208183030381529060405280519060200120905060006001828686866040516000815260200160405260405161312894939291906150ec565b6020604051602081039080840390855afa15801561314a573d6000803e3d6000fd5b5050506020604051035190508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146131bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061550b565b50505b73ffffffffffffffffffffffffffffffffffffffff8581166000818152600360209081526040808320948b16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016881515179055517f5f6ebb64ba012a851c6f014e6cad458ddf213d1512049b31cd06365c2b0592579061324d908890615066565b60405180910390a3505050505050565b6060808367ffffffffffffffff8111801561327757600080fd5b506040519080825280602002602001820160405280156132a1578160200160208202803683370190505b5091508367ffffffffffffffff811180156132bb57600080fd5b506040519080825280602002602001820160405280156132ef57816020015b60608152602001906001900390816132da5790505b50905060005b8481101561340057600060603088888581811061330e57fe5b90506020028101906133209190615833565b60405161332e929190614d71565b600060405180830381855af49150503d8060008114613369576040519150601f19603f3d011682016040523d82523d6000602084013e61336e565b606091505b5091509150818061337d575085155b613386826144b4565b906133be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677919061511e565b50818584815181106133cc57fe5b602002602001019015159081151581525050808484815181106133eb57fe5b602090810291909101015250506001016132f5565b50935093915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526007602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416918101919091526117cc908484613c86565b600a6020526000908152604090205467ffffffffffffffff808216916801000000000000000081049091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000620186a06134fa856032614221565b8161350157fe5b04905061352573ffffffffffffffffffffffffffffffffffffffff86168786614272565b6040517f23e30c8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816906323e30c8b906135819033908990899087908a908a90600401614ed5565b600060405180830381600087803b15801561359b57600080fd5b505af11580156135af573d6000803e3d6000fd5b505050506135fc6135bf82613d44565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600760205260409020906fffffffffffffffffffffffffffffffff1661441e565b61360586613e8f565b101561363d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615651565b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a22320487856040516136b39291906157da565b60405180910390a450505050505050565b8273ffffffffffffffffffffffffffffffffffffffff81163314801590613701575073ffffffffffffffffffffffffffffffffffffffff81163014155b156137d1573360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680613763576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155ae565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526003602090815260408083209386168352929052205460ff166137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615431565b505b73ffffffffffffffffffffffffffffffffffffffff831661381e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061538e565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526006602090815260408083209388168352929052205461385b9083613f73565b73ffffffffffffffffffffffffffffffffffffffff8681166000908152600660209081526040808320898516845290915280822093909355908516815220546138a49083613fb0565b73ffffffffffffffffffffffffffffffffffffffff80871660008181526006602090815260408083208986168085529252918290209490945551918716917f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a9061390f908790615071565b60405180910390a45050505050565b60608567ffffffffffffffff8111801561393757600080fd5b50604051908082528060200260200182016040528015613961578160200160208202803683370190505b5090508560005b81811015613a3d57600087878381811061397e57fe5b905060200201359050620186a061399f60328361422190919063ffffffff16565b816139a657fe5b048483815181106139b357fe5b602002602001018181525050613a348c8c848181106139ce57fe5b90506020020160208101906139e391906145f0565b8989858181106139ef57fe5b905060200201358c8c86818110613a0257fe5b9050602002016020810190613a1791906145f0565b73ffffffffffffffffffffffffffffffffffffffff169190614272565b50600101613968565b506040517fd9d1762300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c169063d9d1762390613a9e9033908c908c908c908c908a908d908d90600401614de8565b600060405180830381600087803b158015613ab857600080fd5b505af1158015613acc573d6000803e3d6000fd5b5050505060005b81811015612731576000898983818110613ae957fe5b9050602002016020810190613afe91906145f0565b9050613b5c613b1f858481518110613b1257fe5b6020026020010151613d44565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600760205260409020906fffffffffffffffffffffffffffffffff1661441e565b613b6582613e8f565b1015613b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615651565b8b8b83818110613ba957fe5b9050602002016020810190613bbe91906145f0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a2232048b8b87818110613c2f57fe5b90506020020135888781518110613c4257fe5b6020026020010151604051613c589291906157da565b60405180910390a450600101613ad3565b600660209081526000928352604080842090915290825290205481565b82516000906fffffffffffffffffffffffffffffffff16613ca8575081613d3d565b835160208501516fffffffffffffffffffffffffffffffff91821691613cd091869116614221565b81613cd757fe5b049050818015613d2d57508284602001516fffffffffffffffffffffffffffffffff16613d2386600001516fffffffffffffffffffffffffffffffff168461422190919063ffffffff16565b81613d2a57fe5b04105b15613d3d576117cc816001613fb0565b9392505050565b60006fffffffffffffffffffffffffffffffff821115613d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906152e9565b5090565b8181016fffffffffffffffffffffffffffffffff8083169082161015613de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615320565b92915050565b600083602001516fffffffffffffffffffffffffffffffff1660001415613e14575081613d3d565b602084015184516fffffffffffffffffffffffffffffffff91821691613e3c91869116614221565b81613e4357fe5b049050818015613d2d57508284600001516fffffffffffffffffffffffffffffffff16613d2386602001516fffffffffffffffffffffffffffffffff168461422190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff81166000818152600a60205260408082205490517f70a082310000000000000000000000000000000000000000000000000000000081529192613de6927001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff16916370a0823190613f1d903090600401614dc7565b60206040518083038186803b158015613f3557600080fd5b505afa158015613f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f6d9190614bb6565b90613fb0565b80820382811115613de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615131565b81810181811015613de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615320565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b86868660405160240161402593929190614f27565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516140ae9190614d81565b6000604051808303816000865af19150503d80600081146140eb576040519150601f19603f3d011682016040523d82523d6000602084013e6140f0565b606091505b509150915081801561411a57508051158061411a57508080602001905181019061411a91906147d7565b614150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906155e5565b505050505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fd7df266aff736d415a9dc14b4158201d612e70d75b9c7f4e375ccfd20aa5166f83306040516020016141b194939291906150bb565b6040516020818303038152906040528051906020012090505b919050565b8082036fffffffffffffffffffffffffffffffff8084169082161115613de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790615131565b600081158061423c5750508082028282828161423957fe5b04145b613de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610677906156f6565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b85856040516024016142a8929190614fa6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516143319190614d81565b6000604051808303816000865af19150503d806000811461436e576040519150601f19603f3d011682016040523d82523d6000602084013e614373565b606091505b509150915081801561439d57508051158061439d57508080602001905181019061439d91906147d7565b6143d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061520d565b5050505050565b600067ffffffffffffffff821115613d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106779061549d565b600061444661442c83613d44565b84546fffffffffffffffffffffffffffffffff1690613d94565b83547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091169081179093555090919050565b600061444661449a83613d44565b84546fffffffffffffffffffffffffffffffff16906141cf565b60606044825110156144fa575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526141ca565b60048201915081806020019051810190613de69190614bce565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261455c578182fd5b50813567ffffffffffffffff811115614573578182fd5b602083019150836020808302850101111561458d57600080fd5b9250929050565b60008083601f8401126145a5578182fd5b50813567ffffffffffffffff8111156145bc578182fd5b60208301915083602082850101111561458d57600080fd5b8035613de6816158c6565b803560ff81168114613de657600080fd5b600060208284031215614601578081fd5b8135613d3d816158c6565b6000806040838503121561461e578081fd5b8235614629816158c6565b91506020830135614639816158c6565b809150509250929050565b60008060008060008060c0878903121561465c578182fd5b8635614667816158c6565b95506020870135614677816158c6565b94506040870135614687816158eb565b935061469688606089016145df565b92506080870135915060a087013590509295509295509295565b600080604083850312156146c2578182fd5b82356146cd816158c6565b91506020830135614639816158eb565b6000806000606084860312156146f1578283fd5b83356146fc816158c6565b9250602084013561470c816158eb565b9150604084013561471c816158eb565b809150509250925092565b6000806000806060858703121561473c578384fd5b8435614747816158c6565b9350602085013567ffffffffffffffff811115614762578384fd5b61476e87828801614594565b9094509250506040850135614782816158eb565b939692955090935050565b6000806000604084860312156147a1578081fd5b833567ffffffffffffffff8111156147b7578182fd5b6147c38682870161454b565b909450925050602084013561471c816158eb565b6000602082840312156147e8578081fd5b8151613d3d816158eb565b600080600080600080600080600060a08a8c031215614810578687fd5b893561481b816158c6565b985060208a013567ffffffffffffffff80821115614837578889fd5b6148438d838e0161454b565b909a50985060408c013591508082111561485b578485fd5b6148678d838e0161454b565b909850965060608c013591508082111561487f578485fd5b61488b8d838e0161454b565b909650945060808c01359150808211156148a3578384fd5b506148b08c828d01614594565b915080935050809150509295985092959850929598565b6000806040838503121561461e578182fd5b600080600080608085870312156148ee578182fd5b84356148f9816158c6565b93506020850135614909816158c6565b92506040850135614919816158c6565b9396929550929360600135925050565b600080600080600060a08688031215614940578283fd5b853561494b816158c6565b9450602086013561495b816158c6565b9350604086013561496b816158c6565b94979396509394606081013594506080013592915050565b600080600080600080600080610100898b03121561499f578182fd5b88356149aa816158c6565b975060208901356149ba816158c6565b965060408901356149ca816158c6565b955060608901359450608089013593506149e78a60a08b016145df565b925060c0890135915060e089013590509295985092959890939650565b60008060008060008060808789031215614a1c578384fd5b8635614a27816158c6565b95506020870135614a37816158c6565b9450604087013567ffffffffffffffff80821115614a53578586fd5b614a5f8a838b0161454b565b90965094506060890135915080821115614a77578384fd5b50614a8489828a0161454b565b979a9699509497509295939492505050565b600080600060608486031215614aaa578081fd5b8335614ab5816158c6565b92506020840135614ac5816158eb565b929592945050506040919091013590565b600080600060608486031215614aea578081fd5b8335614af5816158c6565b925060208401359150604084013561471c816158eb565b60008060408385031215614b1e578182fd5b8235614b29816158c6565b9150602083013567ffffffffffffffff81168114614639578182fd5b60008060008060008060a08789031215614b5d578384fd5b8635614b68816158c6565b95506020870135614b78816158c6565b94506040870135614b88816158c6565b935060608701359250608087013567ffffffffffffffff811115614baa578283fd5b614a8489828a01614594565b600060208284031215614bc7578081fd5b5051919050565b600060208284031215614bdf578081fd5b815167ffffffffffffffff80821115614bf6578283fd5b818401915084601f830112614c09578283fd5b815181811115614c17578384fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401168201018181108482111715614c55578586fd5b604052818152838201602001871015614c6c578485fd5b614c7d826020830160208701615896565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff16815260200190565b6000815180845260208085019450808401835b83811015614cd457815187529582019590820190600101614cb8565b509495945050505050565b600082845282826020860137806020848601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011685010190509392505050565b60008151808452614d3f816020860160208601615896565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b60008251614d93818460208701615896565b9190910192915050565b60008451614daf818460208901615896565b91909101928352506020820152604001919050565b90565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600060a0820173ffffffffffffffffffffffffffffffffffffffff8b168352602060a08185015281614e1a8b84615071565b90508b9250835b8b811015614e4c57828401614e3f83614e3a83886145d4565b614c87565b9094509150600101614e21565b5084810360408601528881527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff891115614e84578384fd5b8189029250828a8383013782810192505080820183815281858403016060860152614eaf8189614ca5565b925050508281036080840152614ec6818587614cdf565b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a06080830152614f1b60a083018486614cdf565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff97881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015615007578151151584529284019290840190600101614fe9565b5050508381038285015280855161501e8184615071565b91508192508381028201848801865b83811015615057578583038552615045838351614d27565b9487019492509086019060010161502d565b50909998505050505050505050565b901515815260200190565b90815260200190565b958652602086019490945273ffffffffffffffffffffffffffffffffffffffff9283166040860152911660608401521515608083015260a082015260c00190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526117cc602083018486614cdf565b600060208252613d3d6020830184614d27565b60208082526015908201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20536b696d20746f6f206d756368000000000000000000604082015260600190565b6020808252601c908201527f4d6173746572434d67723a2043616e6e6f7420617070726f7665203000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a2075736572206e6f742073656e6465720000000000604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526016908201527f42656e746f426f783a2063616e6e6f7420656d70747900000000000000000000604082015260600190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b60208082526013908201527f42656e746f426f783a204e6f20746f6b656e7300000000000000000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20746f5b305d206e6f7420736574000000000000000000604082015260600190565b60208082526014908201527f42656e746f426f783a20746f206e6f7420736574000000000000000000000000604082015260600190565b6020808252601a908201527f53747261746567794d616e616765723a20546f6f206561726c79000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f42656e746f426f783a205472616e73666572206e6f7420617070726f76656400604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526019908201527f4d6173746572434d67723a207573657220697320636c6f6e6500000000000000604082015260600190565b6020808252601d908201527f4d6173746572434d67723a20496e76616c6964205369676e6174757265000000604082015260600190565b6020808252818101527f426f72696e67466163746f72793a204e6f206d6173746572436f6e7472616374604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206d617374657243206e6f74207365740000000000604082015260600190565b6020808252601b908201527f42656e746f426f783a206e6f206d6173746572436f6e74726163740000000000604082015260600190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b6020808252601c908201527f4d6173746572434d67723a20557365722063616e6e6f74206265203000000000604082015260600190565b60208082526016908201527f42656e746f426f783a2057726f6e6720616d6f756e7400000000000000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206e6f742077686974656c69737465640000000000604082015260600190565b6020808252601d908201527f42656e746f426f783a20455448207472616e73666572206661696c6564000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f53747261746567794d616e616765723a2054617267657420746f6f2068696768604082015260600190565b6fffffffffffffffffffffffffffffffff91909116815260200190565b6fffffffffffffffffffffffffffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b6fffffffffffffffffffffffffffffffff92831681529116602082015260400190565b918252602082015260400190565b67ffffffffffffffff91909116815260200190565b67ffffffffffffffff93841681529190921660208201526fffffffffffffffffffffffffffffffff909116604082015260600190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615867578283fd5b83018035915067ffffffffffffffff821115615881578283fd5b60200191503681900382131561458d57600080fd5b60005b838110156158b1578181015183820152602001615899565b838111156158c0576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff811681146158e857600080fd5b50565b80151581146158e857600080fdfea26469706673582212201c1cd58cbd270e1115889d02f475226920decb3991c2ad3329ed440a7ddfcc3564736f6c634300060c0033",
"linkReferences": {},
"deployedLinkReferences": {}
}