2020-07-22 23:41:11 -04:00

874 lines
135 KiB
JSON
Generated

{
"schemaVersion": "2.0.0",
"contractName": "DevUtils",
"compilerOutput": {
"abi": [
{
"inputs": [
{ "internalType": "address", "name": "exchange_", "type": "address" },
{ "internalType": "address", "name": "chaiBridge_", "type": "address" },
{ "internalType": "address", "name": "dydxBridge_", "type": "address" }
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"constant": true,
"inputs": [],
"name": "EIP712_EXCHANGE_DOMAIN_HASH",
"outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "chaiBridgeAddress",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"name": "decodeAssetProxyId",
"outputs": [{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"name": "decodeERC1155AssetData",
"outputs": [
{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" },
{ "internalType": "address", "name": "tokenAddress", "type": "address" },
{ "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" },
{ "internalType": "uint256[]", "name": "tokenValues", "type": "uint256[]" },
{ "internalType": "bytes", "name": "callbackData", "type": "bytes" }
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"name": "decodeERC20AssetData",
"outputs": [
{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" },
{ "internalType": "address", "name": "tokenAddress", "type": "address" }
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"name": "decodeERC20BridgeAssetData",
"outputs": [
{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" },
{ "internalType": "address", "name": "tokenAddress", "type": "address" },
{ "internalType": "address", "name": "bridgeAddress", "type": "address" },
{ "internalType": "bytes", "name": "bridgeData", "type": "bytes" }
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"name": "decodeERC721AssetData",
"outputs": [
{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" },
{ "internalType": "address", "name": "tokenAddress", "type": "address" },
{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"name": "decodeMultiAssetData",
"outputs": [
{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" },
{ "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" },
{ "internalType": "bytes[]", "name": "nestedAssetData", "type": "bytes[]" }
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"name": "decodeStaticCallAssetData",
"outputs": [
{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" },
{ "internalType": "address", "name": "staticCallTargetAddress", "type": "address" },
{ "internalType": "bytes", "name": "staticCallData", "type": "bytes" },
{ "internalType": "bytes32", "name": "expectedReturnDataHash", "type": "bytes32" }
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "transactionData", "type": "bytes" }],
"name": "decodeZeroExTransactionData",
"outputs": [
{ "internalType": "string", "name": "functionName", "type": "string" },
{
"components": [
{ "internalType": "address", "name": "makerAddress", "type": "address" },
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "address", "name": "feeRecipientAddress", "type": "address" },
{ "internalType": "address", "name": "senderAddress", "type": "address" },
{ "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "makerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "takerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" },
{ "internalType": "uint256", "name": "salt", "type": "uint256" },
{ "internalType": "bytes", "name": "makerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" }
],
"internalType": "struct LibOrder.Order[]",
"name": "orders",
"type": "tuple[]"
},
{ "internalType": "uint256[]", "name": "takerAssetFillAmounts", "type": "uint256[]" },
{ "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" }
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "dydxBridgeAddress",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "address", "name": "tokenAddress", "type": "address" },
{ "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" },
{ "internalType": "uint256[]", "name": "tokenValues", "type": "uint256[]" },
{ "internalType": "bytes", "name": "callbackData", "type": "bytes" }
],
"name": "encodeERC1155AssetData",
"outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "address", "name": "tokenAddress", "type": "address" }],
"name": "encodeERC20AssetData",
"outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "address", "name": "tokenAddress", "type": "address" },
{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }
],
"name": "encodeERC721AssetData",
"outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" },
{ "internalType": "bytes[]", "name": "nestedAssetData", "type": "bytes[]" }
],
"name": "encodeMultiAssetData",
"outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "address", "name": "staticCallTargetAddress", "type": "address" },
{ "internalType": "bytes", "name": "staticCallData", "type": "bytes" },
{ "internalType": "bytes32", "name": "expectedReturnDataHash", "type": "bytes32" }
],
"name": "encodeStaticCallAssetData",
"outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "erc1155ProxyAddress",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "erc20ProxyAddress",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "erc721ProxyAddress",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "exchangeAddress",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "ownerAddress", "type": "address" },
{ "internalType": "bytes", "name": "assetData", "type": "bytes" }
],
"name": "getAssetProxyAllowance",
"outputs": [{ "internalType": "uint256", "name": "allowance", "type": "uint256" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "ownerAddress", "type": "address" },
{ "internalType": "bytes", "name": "assetData", "type": "bytes" }
],
"name": "getBalance",
"outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "ownerAddress", "type": "address" },
{ "internalType": "bytes", "name": "assetData", "type": "bytes" }
],
"name": "getBalanceAndAssetProxyAllowance",
"outputs": [
{ "internalType": "uint256", "name": "balance", "type": "uint256" },
{ "internalType": "uint256", "name": "allowance", "type": "uint256" }
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "ownerAddress", "type": "address" },
{ "internalType": "bytes[]", "name": "assetData", "type": "bytes[]" }
],
"name": "getBatchAssetProxyAllowances",
"outputs": [{ "internalType": "uint256[]", "name": "allowances", "type": "uint256[]" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "ownerAddress", "type": "address" },
{ "internalType": "bytes[]", "name": "assetData", "type": "bytes[]" }
],
"name": "getBatchBalances",
"outputs": [{ "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "ownerAddress", "type": "address" },
{ "internalType": "bytes[]", "name": "assetData", "type": "bytes[]" }
],
"name": "getBatchBalancesAndAssetProxyAllowances",
"outputs": [
{ "internalType": "uint256[]", "name": "balances", "type": "uint256[]" },
{ "internalType": "uint256[]", "name": "allowances", "type": "uint256[]" }
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "address[]", "name": "addresses", "type": "address[]" }],
"name": "getEthBalances",
"outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"components": [
{ "internalType": "address", "name": "makerAddress", "type": "address" },
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "address", "name": "feeRecipientAddress", "type": "address" },
{ "internalType": "address", "name": "senderAddress", "type": "address" },
{ "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "makerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "takerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" },
{ "internalType": "uint256", "name": "salt", "type": "uint256" },
{ "internalType": "bytes", "name": "makerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" }
],
"internalType": "struct LibOrder.Order",
"name": "order",
"type": "tuple"
},
{ "internalType": "uint256", "name": "chainId", "type": "uint256" },
{ "internalType": "address", "name": "exchange", "type": "address" }
],
"name": "getOrderHash",
"outputs": [{ "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"components": [
{ "internalType": "address", "name": "makerAddress", "type": "address" },
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "address", "name": "feeRecipientAddress", "type": "address" },
{ "internalType": "address", "name": "senderAddress", "type": "address" },
{ "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "makerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "takerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" },
{ "internalType": "uint256", "name": "salt", "type": "uint256" },
{ "internalType": "bytes", "name": "makerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" }
],
"internalType": "struct LibOrder.Order",
"name": "order",
"type": "tuple"
},
{ "internalType": "bytes", "name": "signature", "type": "bytes" }
],
"name": "getOrderRelevantState",
"outputs": [
{
"components": [
{ "internalType": "enum LibOrder.OrderStatus", "name": "orderStatus", "type": "uint8" },
{ "internalType": "bytes32", "name": "orderHash", "type": "bytes32" },
{ "internalType": "uint256", "name": "orderTakerAssetFilledAmount", "type": "uint256" }
],
"internalType": "struct LibOrder.OrderInfo",
"name": "orderInfo",
"type": "tuple"
},
{ "internalType": "uint256", "name": "fillableTakerAssetAmount", "type": "uint256" },
{ "internalType": "bool", "name": "isValidSignature", "type": "bool" }
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"components": [
{ "internalType": "address", "name": "makerAddress", "type": "address" },
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "address", "name": "feeRecipientAddress", "type": "address" },
{ "internalType": "address", "name": "senderAddress", "type": "address" },
{ "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "makerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "takerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" },
{ "internalType": "uint256", "name": "salt", "type": "uint256" },
{ "internalType": "bytes", "name": "makerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" }
],
"internalType": "struct LibOrder.Order[]",
"name": "orders",
"type": "tuple[]"
},
{ "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" }
],
"name": "getOrderRelevantStates",
"outputs": [
{
"components": [
{ "internalType": "enum LibOrder.OrderStatus", "name": "orderStatus", "type": "uint8" },
{ "internalType": "bytes32", "name": "orderHash", "type": "bytes32" },
{ "internalType": "uint256", "name": "orderTakerAssetFilledAmount", "type": "uint256" }
],
"internalType": "struct LibOrder.OrderInfo[]",
"name": "ordersInfo",
"type": "tuple[]"
},
{ "internalType": "uint256[]", "name": "fillableTakerAssetAmounts", "type": "uint256[]" },
{ "internalType": "bool[]", "name": "isValidSignature", "type": "bool[]" }
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"components": [
{ "internalType": "address", "name": "makerAddress", "type": "address" },
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "address", "name": "feeRecipientAddress", "type": "address" },
{ "internalType": "address", "name": "senderAddress", "type": "address" },
{ "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "makerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "takerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" },
{ "internalType": "uint256", "name": "salt", "type": "uint256" },
{ "internalType": "bytes", "name": "makerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" }
],
"internalType": "struct LibOrder.Order",
"name": "order",
"type": "tuple"
},
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "uint256", "name": "takerAssetFillAmount", "type": "uint256" }
],
"name": "getSimulatedOrderMakerTransferResults",
"outputs": [
{
"internalType": "enum LibOrderTransferSimulation.OrderTransferResults",
"name": "orderTransferResults",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"components": [
{ "internalType": "address", "name": "makerAddress", "type": "address" },
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "address", "name": "feeRecipientAddress", "type": "address" },
{ "internalType": "address", "name": "senderAddress", "type": "address" },
{ "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "makerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "takerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" },
{ "internalType": "uint256", "name": "salt", "type": "uint256" },
{ "internalType": "bytes", "name": "makerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" }
],
"internalType": "struct LibOrder.Order",
"name": "order",
"type": "tuple"
},
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "uint256", "name": "takerAssetFillAmount", "type": "uint256" }
],
"name": "getSimulatedOrderTransferResults",
"outputs": [
{
"internalType": "enum LibOrderTransferSimulation.OrderTransferResults",
"name": "orderTransferResults",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"components": [
{ "internalType": "address", "name": "makerAddress", "type": "address" },
{ "internalType": "address", "name": "takerAddress", "type": "address" },
{ "internalType": "address", "name": "feeRecipientAddress", "type": "address" },
{ "internalType": "address", "name": "senderAddress", "type": "address" },
{ "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" },
{ "internalType": "uint256", "name": "makerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "takerFee", "type": "uint256" },
{ "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" },
{ "internalType": "uint256", "name": "salt", "type": "uint256" },
{ "internalType": "bytes", "name": "makerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" },
{ "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" }
],
"internalType": "struct LibOrder.Order[]",
"name": "orders",
"type": "tuple[]"
},
{ "internalType": "address[]", "name": "takerAddresses", "type": "address[]" },
{ "internalType": "uint256[]", "name": "takerAssetFillAmounts", "type": "uint256[]" }
],
"name": "getSimulatedOrdersTransferResults",
"outputs": [
{
"internalType": "enum LibOrderTransferSimulation.OrderTransferResults[]",
"name": "orderTransferResults",
"type": "uint8[]"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"components": [
{ "internalType": "uint256", "name": "salt", "type": "uint256" },
{ "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" },
{ "internalType": "uint256", "name": "gasPrice", "type": "uint256" },
{ "internalType": "address", "name": "signerAddress", "type": "address" },
{ "internalType": "bytes", "name": "data", "type": "bytes" }
],
"internalType": "struct LibZeroExTransaction.ZeroExTransaction",
"name": "transaction",
"type": "tuple"
},
{ "internalType": "uint256", "name": "chainId", "type": "uint256" },
{ "internalType": "address", "name": "exchange", "type": "address" }
],
"name": "getTransactionHash",
"outputs": [{ "internalType": "bytes32", "name": "transactionHash", "type": "bytes32" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "ownerAddress", "type": "address" },
{ "internalType": "bytes", "name": "assetData", "type": "bytes" }
],
"name": "getTransferableAssetAmount",
"outputs": [{ "internalType": "uint256", "name": "transferableAssetAmount", "type": "uint256" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }],
"name": "revertIfInvalidAssetData",
"outputs": [],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "staticCallProxyAddress",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"methods": {
"decodeAssetProxyId(bytes)": {
"details": "Decode AssetProxy identifier",
"params": {
"assetData": "AssetProxy-compliant asset data describing an ERC-20, ERC-721, ERC1155, or MultiAsset asset."
},
"return": "The AssetProxy identifier"
},
"decodeERC1155AssetData(bytes)": {
"details": "Decode ERC-1155 asset data from the format described in the AssetProxy contract specification.",
"params": { "assetData": "AssetProxy-compliant asset data describing an ERC-1155 set of assets." },
"return": "The ERC-1155 AssetProxy identifier, the address of the ERC-1155 contract hosting the assets, an array of the identifiers of the assets to be traded, an array of asset amounts to be traded, and callback data. Each element of the arrays corresponds to the same-indexed element of the other array. Return values specified as `memory` are returned as pointers to locations within the memory of the input parameter `assetData`."
},
"decodeERC20AssetData(bytes)": {
"details": "Decode ERC-20 asset data from the format described in the AssetProxy contract specification.",
"params": { "assetData": "AssetProxy-compliant asset data describing an ERC-20 asset." },
"return": "The AssetProxy identifier, and the address of the ERC-20 contract hosting this asset."
},
"decodeERC20BridgeAssetData(bytes)": {
"details": "Decode ERC20Bridge asset data from the format described in the AssetProxy contract specification.",
"params": { "assetData": "AssetProxy-compliant asset data describing an ERC20Bridge asset" },
"return": "The ERC20BridgeProxy identifier, the address of the ERC20 token to transfer, the address of the bridge contract, and extra data to be passed to the bridge contract."
},
"decodeERC721AssetData(bytes)": {
"details": "Decode ERC-721 asset data from the format described in the AssetProxy contract specification.",
"params": { "assetData": "AssetProxy-compliant asset data describing an ERC-721 asset." },
"return": "The ERC-721 AssetProxy identifier, the address of the ERC-721 contract hosting this asset, and the identifier of the specific asset to be traded."
},
"decodeMultiAssetData(bytes)": {
"details": "Decode multi-asset data from the format described in the AssetProxy contract specification.",
"params": { "assetData": "AssetProxy-compliant data describing a multi-asset basket." },
"return": "The Multi-Asset AssetProxy identifier, an array of the amounts of the assets to be traded, and an array of the AssetProxy-compliant data describing each asset to be traded. Each element of the arrays corresponds to the same-indexed element of the other array."
},
"decodeStaticCallAssetData(bytes)": {
"details": "Decode StaticCall asset data from the format described in the AssetProxy contract specification.",
"params": { "assetData": "AssetProxy-compliant asset data describing a StaticCall asset" },
"return": "The StaticCall AssetProxy identifier, the target address of the StaticCAll, the data to be passed to the target address, and the expected Keccak-256 hash of the static call return data."
},
"decodeZeroExTransactionData(bytes)": {
"details": "Decodes the call data for an Exchange contract method call.",
"params": { "transactionData": "ABI-encoded calldata for an Exchange contract method call." },
"return": "The name of the function called, and the parameters it was given. For single-order fills and cancels, the arrays will have just one element."
},
"encodeERC1155AssetData(address,uint256[],uint256[],bytes)": {
"details": "Encode ERC-1155 asset data into the format described in the AssetProxy contract specification.",
"params": {
"callbackData": "Data to be passed to receiving contracts when a transfer is performed.",
"tokenAddress": "The address of the ERC-1155 contract hosting the asset(s) to be traded.",
"tokenIds": "The identifiers of the specific assets to be traded.",
"tokenValues": "The amounts of each asset to be traded."
},
"return": "AssetProxy-compliant asset data describing the set of assets."
},
"encodeERC20AssetData(address)": {
"details": "Encode ERC-20 asset data into the format described in the AssetProxy contract specification.",
"params": { "tokenAddress": "The address of the ERC-20 contract hosting the asset to be traded." },
"return": "AssetProxy-compliant data describing the asset."
},
"encodeERC721AssetData(address,uint256)": {
"details": "Encode ERC-721 asset data into the format described in the AssetProxy specification.",
"params": {
"tokenAddress": "The address of the ERC-721 contract hosting the asset to be traded.",
"tokenId": "The identifier of the specific asset to be traded."
},
"return": "AssetProxy-compliant asset data describing the asset."
},
"encodeMultiAssetData(uint256[],bytes[])": {
"details": "Encode data for multiple assets, per the AssetProxy contract specification.",
"params": {
"amounts": "The amounts of each asset to be traded.",
"nestedAssetData": "AssetProxy-compliant data describing each asset to be traded."
},
"return": "AssetProxy-compliant data describing the set of assets."
},
"encodeStaticCallAssetData(address,bytes,bytes32)": {
"details": "Encode StaticCall asset data into the format described in the AssetProxy contract specification.",
"params": {
"expectedReturnDataHash": "Expected Keccak-256 hash of the StaticCall return data.",
"staticCallData": "Data that will be passed to staticCallTargetAddress in the StaticCall.",
"staticCallTargetAddress": "Target address of StaticCall."
},
"return": "AssetProxy-compliant asset data describing the set of assets."
},
"getAssetProxyAllowance(address,bytes)": {
"details": "Returns the number of asset(s) (described by assetData) that the corresponding AssetProxy contract is authorized to spend. When the asset data contains multiple assets (eg for Multi-Asset), the return value indicates how many complete \"baskets\" of those assets may be spent by all of the corresponding AssetProxy contracts.",
"params": {
"assetData": "Details of asset, encoded per the AssetProxy contract specification.",
"ownerAddress": "Owner of the assets specified by assetData."
},
"return": "Number of assets (or asset baskets) that the corresponding AssetProxy is authorized to spend."
},
"getBalance(address,bytes)": {
"details": "Returns the owner's balance of the assets(s) specified in assetData. When the asset data contains multiple assets (eg in ERC1155 or Multi-Asset), the return value indicates how many complete \"baskets\" of those assets are owned by owner.",
"params": {
"assetData": "Details of asset, encoded per the AssetProxy contract specification.",
"ownerAddress": "Owner of the assets specified by assetData."
},
"return": "Number of assets (or asset baskets) held by owner."
},
"getBalanceAndAssetProxyAllowance(address,bytes)": {
"details": "Calls getBalance() and getAllowance() for assetData.",
"params": {
"assetData": "Details of asset, encoded per the AssetProxy contract specification.",
"ownerAddress": "Owner of the assets specified by assetData."
},
"return": "Number of assets (or asset baskets) held by owner, and number of assets (or asset baskets) that the corresponding AssetProxy is authorized to spend."
},
"getBatchAssetProxyAllowances(address,bytes[])": {
"details": "Calls getAssetProxyAllowance() for each element of assetData.",
"params": {
"assetData": "Array of asset details, each encoded per the AssetProxy contract specification.",
"ownerAddress": "Owner of the assets specified by assetData."
},
"return": "An array of asset allowances from getAllowance(), with each element corresponding to the same-indexed element in the assetData input."
},
"getBatchBalances(address,bytes[])": {
"details": "Calls getBalance() for each element of assetData.",
"params": {
"assetData": "Array of asset details, each encoded per the AssetProxy contract specification.",
"ownerAddress": "Owner of the assets specified by assetData."
},
"return": "Array of asset balances from getBalance(), with each element corresponding to the same-indexed element in the assetData input."
},
"getBatchBalancesAndAssetProxyAllowances(address,bytes[])": {
"details": "Calls getBatchBalances() and getBatchAllowances() for each element of assetData.",
"params": {
"assetData": "Array of asset details, each encoded per the AssetProxy contract specification.",
"ownerAddress": "Owner of the assets specified by assetData."
},
"return": "An array of asset balances from getBalance(), and an array of asset allowances from getAllowance(), with each element corresponding to the same-indexed element in the assetData input."
},
"getEthBalances(address[])": {
"details": "Batch fetches ETH balances",
"params": { "addresses": "Array of addresses." },
"return": "Array of ETH balances."
},
"getOrderRelevantState((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),bytes)": {
"details": "Fetches all order-relevant information needed to validate if the supplied order is fillable.",
"params": {
"order": "The order structure.",
"signature": "Signature provided by maker that proves the order's authenticity. `0x01` can always be provided if the signature does not need to be validated."
},
"return": "The orderInfo (hash, status, and `takerAssetAmount` already filled for the given order), fillableTakerAssetAmount (amount of the order's `takerAssetAmount` that is fillable given all on-chain state), and isValidSignature (validity of the provided signature). NOTE: If the `takerAssetData` encodes data for multiple assets, `fillableTakerAssetAmount` will represent a \"scaled\" amount, meaning it must be multiplied by all the individual asset amounts within the `takerAssetData` to get the final amount of each asset that can be filled."
},
"getOrderRelevantStates((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[])": {
"details": "Fetches all order-relevant information needed to validate if the supplied orders are fillable.",
"params": {
"orders": "Array of order structures.",
"signatures": "Array of signatures provided by makers that prove the authenticity of the orders. `0x01` can always be provided if a signature does not need to be validated."
},
"return": "The ordersInfo (array of the hash, status, and `takerAssetAmount` already filled for each order), fillableTakerAssetAmounts (array of amounts for each order's `takerAssetAmount` that is fillable given all on-chain state), and isValidSignature (array containing the validity of each provided signature). NOTE: If the `takerAssetData` encodes data for multiple assets, each element of `fillableTakerAssetAmounts` will represent a \"scaled\" amount, meaning it must be multiplied by all the individual asset amounts within the `takerAssetData` to get the final amount of each asset that can be filled."
},
"getSimulatedOrderMakerTransferResults((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),address,uint256)": {
"details": "Simulates the maker transfers within an order and returns the index of the first failed transfer.",
"params": {
"order": "The order to simulate transfers for.",
"takerAddress": "The address of the taker that will fill the order.",
"takerAssetFillAmount": "The amount of takerAsset that the taker wished to fill."
},
"return": "The index of the first failed transfer (or 4 if all transfers are successful)."
},
"getSimulatedOrderTransferResults((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),address,uint256)": {
"details": "Simulates all of the transfers within an order and returns the index of the first failed transfer.",
"params": {
"order": "The order to simulate transfers for.",
"takerAddress": "The address of the taker that will fill the order.",
"takerAssetFillAmount": "The amount of takerAsset that the taker wished to fill."
},
"return": "The index of the first failed transfer (or 4 if all transfers are successful)."
},
"getSimulatedOrdersTransferResults((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],address[],uint256[])": {
"details": "Simulates all of the transfers for each given order and returns the indices of each first failed transfer.",
"params": {
"orders": "Array of orders to individually simulate transfers for.",
"takerAddresses": "Array of addresses of takers that will fill each order.",
"takerAssetFillAmounts": "Array of amounts of takerAsset that will be filled for each order."
},
"return": "The indices of the first failed transfer (or 4 if all transfers are successful) for each order."
},
"getTransferableAssetAmount(address,bytes)": {
"details": "Gets the amount of an asset transferable by the maker of an order.",
"params": {
"assetData": "Description of tokens, per the AssetProxy contract specification.",
"ownerAddress": "Address of the owner of the asset."
},
"return": "The amount of the asset tranferable by the owner. NOTE: If the `assetData` encodes data for multiple assets, the `transferableAssetAmount` will represent the amount of times the entire `assetData` can be transferred. To calculate the total individual transferable amounts, this scaled `transferableAmount` must be multiplied by the individual asset amounts located within the `assetData`."
},
"revertIfInvalidAssetData(bytes)": {
"details": "Reverts if assetData is not of a valid format for its given proxy id.",
"params": { "assetData": "AssetProxy compliant asset data." }
}
}
},
"evm": {
"bytecode": {
"object": "0x60806040523480156200001157600080fd5b506040516200550a3803806200550a8339810160408190526200003491620003f5565b600080546001600160a01b03199081166001600160a01b0386811691821784556005805484168783161790556006805490931690851617909155604051630c0e082160e31b81528291869186918691636070410890620000a090630f47261b60e41b9060040162000448565b60206040518083038186803b158015620000b957600080fd5b505afa158015620000ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620000f49190810190620003c5565b600180546001600160a01b0319166001600160a01b03928316179055604051630c0e082160e31b8152908416906360704108906200013e9063012b8bc960e11b9060040162000448565b60206040518083038186803b1580156200015757600080fd5b505afa1580156200016c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001929190810190620003c5565b600280546001600160a01b0319166001600160a01b03928316179055604051630c0e082160e31b815290841690636070410890620001dc9063a7cb5fb760e01b9060040162000448565b60206040518083038186803b158015620001f557600080fd5b505afa1580156200020a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002309190810190620003c5565b600380546001600160a01b0319166001600160a01b03928316179055604051630c0e082160e31b8152908416906360704108906200027a9063619ce88560e11b9060040162000448565b60206040518083038186803b1580156200029357600080fd5b505afa158015620002a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002ce9190810190620003c5565b600480546001600160a01b0319166001600160a01b03928316179055600093508416159150620003019050578162000303565b305b90506200035e6040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b81525085846200036e60201b620029a31760201c565b6007555062000476945050505050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b600060208284031215620003d7578081fd5b81516001600160a01b0381168114620003ee578182fd5b9392505050565b6000806000606084860312156200040a578182fd5b835162000417816200045d565b60208501519093506200042a816200045d565b60408501519092506200043d816200045d565b809150509250925092565b6001600160e01b031991909116815260200190565b6001600160a01b03811681146200047357600080fd5b50565b61508480620004866000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063a5cd62ba11610160578063d186037f116100d8578063e4e6e7da1161008c578063ee18599711610071578063ee185997146105d8578063ef3bb097146105e0578063ff84e7cc146105e857610277565b8063e4e6e7da14610595578063e77286eb146105b657610277565b8063d3d862d1116100bd578063d3d862d114610540578063d469502814610553578063e25cabf71461057357610277565b8063d186037f1461051a578063d36379051461052d57610277565b8063bbb2dcf61161012f578063c82037ef11610114578063c82037ef146104dc578063ca49f47c146104e4578063d001c5dc1461050757610277565b8063bbb2dcf6146104b2578063c26cfecd146104d457610277565b8063a5cd62ba14610464578063a6627e9f14610484578063a7530f1214610497578063b43cffe11461049f57610277565b80637982653e116101f35780639baf2705116101c25780639eadc835116101a75780639eadc8351461041a578063a070cac81461043e578063a0901e511461045157610277565b80639baf2705146103fd5780639cd016051461041257610277565b80637982653e1461039657806379c9c426146103b65780637d727512146103c95780638f4ce479146103dc57610277565b80634dfdac201161024a57806363eb39921161022f57806363eb39921461033d5780636f83188e14610350578063750bdb301461037357610277565b80634dfdac20146102fd578063590aa8751461031d57610277565b806304a5618a1461027c5780630d7b7d76146102a75780632322cf76146102c857806346eb65cb146102e8575b600080fd5b61028f61028a366004614168565b6105f0565b60405161029e93929190614d64565b60405180910390f35b6102ba6102b5366004613c2c565b610689565b60405161029e929190614f6d565b6102db6102d6366004613c2c565b6106ab565b60405161029e9190614c41565b6102fb6102f6366004614168565b6106d3565b005b61031061030b366004613b47565b610757565b60405161029e9190614b99565b61033061032b366004613b2b565b6107da565b60405161029e9190614dc4565b61033061034b366004613c70565b610889565b61036361035e366004614168565b61093c565b60405161029e9493929190614e59565b610386610381366004614168565b6109dc565b60405161029e9493929190614c82565b6103a96103a43660046144b3565b610a6e565b60405161029e9190614e45565b6102db6103c43660046145bb565b610b20565b6102db6103d7366004613c2c565b610ba1565b6103ef6103ea366004614168565b611497565b60405161029e929190614c5f565b61040561152a565b60405161029e91906148c4565b610405611539565b61042d610428366004614168565b611548565b60405161029e959493929190614cbe565b6102db61044c366004614562565b6115ed565b61031061045f366004613cf2565b61166e565b610477610472366004613dc0565b6116e7565b60405161029e9190614aad565b610330610492366004613cc7565b6117a1565b610405611851565b6103306104ad366004613b95565b611860565b6104c56104c0366004614168565b611916565b60405161029e93929190614d8f565b6102db6119a6565b6104056119ac565b6104f76104f2366004614168565b6119bb565b60405161029e9493929190614d21565b610310610515366004613b47565b611a4d565b6102db610528366004613c2c565b611abb565b6103a961053b3660046144b3565b612446565b61033061054e366004613e9b565b6124a8565b610566610561366004614168565b6124fd565b60405161029e9190614c4a565b610586610581366004613e44565b6125a0565b60405161029e93929190614afa565b6105a86105a3366004613b47565b6126d8565b60405161029e929190614c1c565b6105c96105c436600461450b565b6126f1565b60405161029e93929190614ee6565b610405612960565b61040561296f565b61040561297e565b600080600073__$af40232205bf188fa8dd573e0f47eaeabc$__6304a5618a856040518263ffffffff1660e01b815260040161062c9190614dc4565b60606040518083038186803b15801561064457600080fd5b505af4158015610658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061067c91908101906140be565b9250925092509193909250565b6000806106968484610ba1565b91506106a28484611abb565b90509250929050565b60008060006106ba8585610689565b915091506106c8828261298d565b925050505b92915050565b6040517f46eb65cb00000000000000000000000000000000000000000000000000000000815273__$af40232205bf188fa8dd573e0f47eaeabc$__906346eb65cb90610723908490600401614dc4565b60006040518083038186803b15801561073b57600080fd5b505af415801561074f573d6000803e3d6000fd5b505050505b50565b606060008251905080604051908082528060200260200182016040528015610789578160200160208202803883390190505b50915060005b8181146107d2576107b3858583815181106107a657fe5b6020026020010151611abb565b8382815181106107bf57fe5b602090810291909101015260010161078f565b505092915050565b6040517f590aa87500000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063590aa8759061082d9085906004016148c4565b60006040518083038186803b15801561084557600080fd5b505af4158015610859573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610881919081019061419b565b90505b919050565b6040517f63eb399200000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__906363eb3992906108e090879087908790600401614a2d565b60006040518083038186803b1580156108f857600080fd5b505af415801561090c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610934919081019061419b565b949350505050565b60608060608073__$d80c8447db5aca01fdd367a509db3f8167$__636f83188e866040518263ffffffff1660e01b81526004016109799190614dc4565b60006040518083038186803b15801561099157600080fd5b505af41580156109a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cd9190810190614209565b93509350935093509193509193565b6000806000606073__$af40232205bf188fa8dd573e0f47eaeabc$__63750bdb30866040518263ffffffff1660e01b8152600401610a1a9190614dc4565b60006040518083038186803b158015610a3257600080fd5b505af4158015610a46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cd9190810190613f42565b600080546040517f9caa023b00000000000000000000000000000000000000000000000000000000815273__$51238773fd6195a8a6f152a329b1854152$__91639caa023b91610ad0916001600160a01b031690889088908890600401614a5f565b60206040518083038186803b158015610ae857600080fd5b505af4158015610afc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061093491908101906141ea565b600061093484610b9c6040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876129a3565b6129fa565b600080610bb4838263ffffffff612a0e16565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415610c0f576000610bfb84601063ffffffff612a4716565b9050610c078186612a7a565b925050611490565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415610e285760008073__$af40232205bf188fa8dd573e0f47eaeabc$__6304a5618a866040518263ffffffff1660e01b8152600401610c7b9190614dc4565b60606040518083038186803b158015610c9357600080fd5b505af4158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ccb91908101906140be565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090610d07908490602401614c41565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051610d8291906148a8565b600060405180830381855afa9150503d8060008114610dbd576040519150601f19603f3d011682016040523d82523d6000602084013e610dc2565b606091505b50915091506000828015610dd7575081516020145b610de2576000610df3565b610df382600c63ffffffff612a4716565b9050896001600160a01b0316816001600160a01b031614610e15576000610e18565b60015b60ff169750505050505050611490565b6001600160e01b031981167fa7cb5fb70000000000000000000000000000000000000000000000000000000014156110c457600060608073__$af40232205bf188fa8dd573e0f47eaeabc$__639eadc835876040518263ffffffff1660e01b8152600401610e969190614dc4565b60006040518083038186803b158015610eae57600080fd5b505af4158015610ec2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eea9190810190613fac565b5081519296509094509250905060005b8181146110ba57828181518110610f0d57fe5b602002602001015160001415610f22576110b2565b83516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110610f5657fe5b6020026020010151604051602401610f6f929190614a94565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051610fea91906148a8565b600060405180830381855afa9150503d8060008114611025576040519150601f19603f3d011682016040523d82523d6000602084013e61102a565b606091505b5091509150600082801561103f575081516020145b61104a57600061105b565b61105b82600063ffffffff612b7216565b9050600087868151811061106b57fe5b6020026020010151828161107b57fe5b049050806110975760009b5050505050505050505050506106cd565b8b8110806110a357508b155b156110ac57809b505b50505050505b600101610efa565b5050505050611490565b6001600160e01b031981167fc339d10a0000000000000000000000000000000000000000000000000000000014156111f7576040516060907fa85e59e4000000000000000000000000000000000000000000000000000000009061113390869060009081908190602401614dd7565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b03169061119a9084906148a8565b600060405180830381855afa9150503d80600081146111d5576040519150601f19603f3d011682016040523d82523d6000602084013e6111da565b606091505b50509050806111ea5760006111ee565b6000195b93505050611490565b6001600160e01b031981167fdc1600f30000000000000000000000000000000000000000000000000000000014156113205760008073__$af40232205bf188fa8dd573e0f47eaeabc$__63750bdb30866040518263ffffffff1660e01b81526004016112639190614dc4565b60006040518083038186803b15801561127b57600080fd5b505af415801561128f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b79190810190613f42565b5092509250506112c5612b7e565b6001600160a01b0316826001600160a01b03161480156112f257506005546001600160a01b038281169116145b1561131957600061130a611304612b96565b88612a7a565b905061131581612bae565b9450505b5050611490565b6001600160e01b031981167f94cfcdd70000000000000000000000000000000000000000000000000000000014156114905760608073__$af40232205bf188fa8dd573e0f47eaeabc$__63bbb2dcf6866040518263ffffffff1660e01b815260040161138c9190614dc4565b60006040518083038186803b1580156113a457600080fd5b505af41580156113b8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e091908101906140fe565b80519194509250905060005b81811461148b578381815181106113ff57fe5b60200260200101516000141561141457611483565b60006114338985848151811061142657fe5b6020026020010151610ba1565b9050600085838151811061144357fe5b6020026020010151828161145357fe5b0490508061146b5760009750505050505050506106cd565b87811080611477575087155b15611480578097505b50505b6001016113ec565b505050505b5092915050565b60008073__$af40232205bf188fa8dd573e0f47eaeabc$__638f4ce479846040518263ffffffff1660e01b81526004016114d19190614dc4565b604080518083038186803b1580156114e857600080fd5b505af41580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115209190810190613f0b565b915091505b915091565b6004546001600160a01b031681565b6000546001600160a01b031681565b600080606080606073__$af40232205bf188fa8dd573e0f47eaeabc$__639eadc835876040518263ffffffff1660e01b81526004016115879190614dc4565b60006040518083038186803b15801561159f57600080fd5b505af41580156115b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115db9190810190613fac565b939a9299509097509550909350915050565b6000610934846116696040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876129a3565b612dac565b606080825160405190808252806020026020018201604052801561169c578160200160208202803883390190505b50905060005b83518114611490578381815181106116b657fe5b60200260200101516001600160a01b0316318282815181106116d457fe5b60209081029190910101526001016116a2565b6000546040517f02cffc4500000000000000000000000000000000000000000000000000000000815260609173__$51238773fd6195a8a6f152a329b1854152$__916302cffc459161174d916001600160a01b0390911690889088908890600401614915565b60006040518083038186803b15801561176557600080fd5b505af4158015611779573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109349190810190613d25565b6040517fa6627e9f00000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063a6627e9f906117f69086908690600401614a94565b60006040518083038186803b15801561180e57600080fd5b505af4158015611822573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261184a919081019061419b565b9392505050565b6006546001600160a01b031681565b6040517fb43cffe100000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063b43cffe1906118b99088908890889088906004016149db565b60006040518083038186803b1580156118d157600080fd5b505af41580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d919081019061419b565b95945050505050565b600060608073__$af40232205bf188fa8dd573e0f47eaeabc$__63bbb2dcf6856040518263ffffffff1660e01b81526004016119529190614dc4565b60006040518083038186803b15801561196a57600080fd5b505af415801561197e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261067c91908101906140fe565b60075481565b6005546001600160a01b031681565b6000806060600073__$af40232205bf188fa8dd573e0f47eaeabc$__63ca49f47c866040518263ffffffff1660e01b81526004016119f99190614dc4565b60006040518083038186803b158015611a1157600080fd5b505af4158015611a25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cd9190810190614056565b606060008251905080604051908082528060200260200182016040528015611a7f578160200160208202803883390190505b50915060005b8181146107d257611a9c8585838151811061142657fe5b838281518110611aa857fe5b6020908102919091010152600101611a85565b600080611ace838263ffffffff612a0e16565b90506001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415611c395760608073__$af40232205bf188fa8dd573e0f47eaeabc$__63bbb2dcf6866040518263ffffffff1660e01b8152600401611b3c9190614dc4565b60006040518083038186803b158015611b5457600080fd5b505af4158015611b68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b9091908101906140fe565b80519194509250905060005b818114611c2e57838181518110611baf57fe5b602002602001015160001415611bc457611c26565b6000611bd6898584815181106107a657fe5b90506000858381518110611be657fe5b60200260200101518281611bf657fe5b04905080611c0e5760009750505050505050506106cd565b87811080611c1a575087155b15611c23578097505b50505b600101611b9c565b506106cd9350505050565b6001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415611c9a576000611c7e84601063ffffffff612a4716565b600154909150610c0790829087906001600160a01b0316612dbb565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415611fea5760008073__$af40232205bf188fa8dd573e0f47eaeabc$__6304a5618a866040518263ffffffff1660e01b8152600401611d069190614dc4565b60606040518083038186803b158015611d1e57600080fd5b505af4158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d5691908101906140be565b600254604051929550909350606092507fe985e9c50000000000000000000000000000000000000000000000000000000091611da2918a916001600160a01b03909116906024016148d8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051611e1d91906148a8565b600060405180830381855afa9150503d8060008114611e58576040519150601f19603f3d011682016040523d82523d6000602084013e611e5d565b606091505b5091509150811580611e7157508051602014155b80611e8d5750611e8881600063ffffffff612b7216565b600114155b15611fdb576040516060907f081812fc0000000000000000000000000000000000000000000000000000000090611ec8908790602401614c41565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b031681604051611f3f91906148a8565b600060405180830381855afa9150503d8060008114611f7a576040519150601f19603f3d011682016040523d82523d6000602084013e611f7f565b606091505b509093509150828015611f93575081516020145b8015611fc257506002546001600160a01b0316611fb783600c63ffffffff612a4716565b6001600160a01b0316145b611fcd576000611fd0565b60015b60ff169750506110ba565b60001996505050505050611490565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415612211576040517f9eadc83500000000000000000000000000000000000000000000000000000000815260009073__$af40232205bf188fa8dd573e0f47eaeabc$__90639eadc8359061206f908790600401614dc4565b60006040518083038186803b15801561208757600080fd5b505af415801561209b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120c39190810190613fac565b5050600354604051929450606093507fe985e9c5000000000000000000000000000000000000000000000000000000009261210d925089916001600160a01b0316906024016148d8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b03168360405161218891906148a8565b600060405180830381855afa9150503d80600081146121c3576040519150601f19603f3d011682016040523d82523d6000602084013e6121c8565b606091505b50915091508180156121db575080516020145b80156121f757506121f381600063ffffffff612b7216565b6001145b612202576000612206565b6000195b955050505050611490565b6001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000141561224d576000199150611490565b6001600160e01b031981167fdc1600f30000000000000000000000000000000000000000000000000000000014156114905760008073__$af40232205bf188fa8dd573e0f47eaeabc$__63750bdb30866040518263ffffffff1660e01b81526004016122b99190614dc4565b60006040518083038186803b1580156122d157600080fd5b505af41580156122e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261230d9190810190613f42565b50925092505061231b612b7e565b6001600160a01b0316826001600160a01b031614801561234857506005546001600160a01b038281169116145b1561239257600061236d61235a612b96565b60055489906001600160a01b0316612dbb565b905060001981146123865761238181612bae565b61238a565b6000195b94505061243d565b6006546001600160a01b038281169116141561243d5773__$8ab3d6b0b5fe290c724f8d6cfdac7eabfb$__630e70a03387836123cc612ec5565b6040518463ffffffff1660e01b81526004016123ea939291906148f2565b60206040518083038186803b15801561240257600080fd5b505af4158015612416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061243a9190810190614673565b93505b50505092915050565b600080546040517f8dccde0400000000000000000000000000000000000000000000000000000000815273__$51238773fd6195a8a6f152a329b1854152$__91638dccde0491610ad0916001600160a01b031690889088908890600401614a5f565b6040517fd3d862d100000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063d3d862d1906117f69086908690600401614bac565b6040517fd469502800000000000000000000000000000000000000000000000000000000815260009073__$af40232205bf188fa8dd573e0f47eaeabc$__9063d469502890612550908590600401614dc4565b60206040518083038186803b15801561256857600080fd5b505af415801561257c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108819190810190613ef0565b6060806060600085519050806040519080825280602002602001820160405280156125e557816020015b6125d26136a6565b8152602001906001900390816125ca5790505b50935080604051908082528060200260200182016040528015612612578160200160208202803883390190505b5092508060405190808252806020026020018201604052801561263f578160200160208202803883390190505b50915060005b8181146126cf5761267c87828151811061265b57fe5b602002602001015187838151811061266f57fe5b60200260200101516126f1565b875188908590811061268a57fe5b6020026020010187858151811061269d57fe5b602002602001018786815181106126b057fe5b9315156020948502919091019093019290925291905252600101612645565b50509250925092565b6060806126e58484611a4d565b91506106a28484610757565b6126f96136a6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612743908890600401614f0a565b60606040518083038186803b15801561275b57600080fd5b505afa15801561276f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612793919081019061446b565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906127e59089908990600401614f48565b60206040518083038186803b1580156127fd57600080fd5b505afa158015612811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128359190810190613ed0565b9150600061284287612edd565b90506000612863886101800151896101400151612f0990919063ffffffff16565b1561289857612891826128878a60c001518b60800151612f2e90919063ffffffff16565b8a60a00151612f4a565b9050612905565b60c08801516128b4576128918289608001518a60a00151612f4a565b60006128c5848a61018001516106ab565b905060006128dc848b608001518c60a00151612f4a565b905060006128f3838c60c001518d60a00151612f4a565b90506128ff828261298d565b93505050505b61292961292387604001518a60a00151612f6c90919063ffffffff16565b8261298d565b945061293488612f8b565b61293d57600094505b60038651600681111561294c57fe5b1461295657600094505b5050509250925092565b6001546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b600081831061299c578161184a565b5090919050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b600061184a82612a0985612ff2565b61306d565b60008160040183511015612a3457612a34612a2f60038551856004016130a7565b613116565b5001602001516001600160e01b03191690565b60008160140183511015612a6857612a68612a2f60048551856014016130a7565b5001601401516001600160a01b031690565b60405160009081906060906001600160a01b038616907f70a082310000000000000000000000000000000000000000000000000000000090612ac09087906024016148c4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909416939093179092529051612b1391906148a8565b600060405180830381855afa9150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150818015612b66575080516020145b156107d2576106c88160005b600061184a838361311e565b736b175474e89094c44da98b954eedeac495271d0f90565b7306af07097c9eeb7fd685c692751d5c66db49c21590565b600080612bb9612b96565b6001600160a01b0316634ba2363a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612bf357600080fd5b505af1158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c2b91908101906141ce565b90506000816001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c6a57600080fd5b505af1158015612c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ca29190810190614673565b4211612d2057816001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d1b9190810190614673565b612d93565b816001600160a01b0316639f678cca6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612d5b57600080fd5b505af1158015612d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d939190810190614673565b9050610934816b033b2e3c9fd0803ce800000086612f4a565b600061184a82612a0985613148565b60405160009081906060906001600160a01b038716907fdd62ed3e0000000000000000000000000000000000000000000000000000000090612e0390889088906024016148d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909416939093179092529051612e5691906148a8565b600060405180830381855afa9150503d8060008114612e91576040519150601f19603f3d011682016040523d82523d6000602084013e612e96565b606091505b5091509150818015612ea9575080516020145b15612ebc57612eb9816000612b72565b92505b50509392505050565b731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e90565b6000806000612eeb84613201565b91509150612ef9828261298d565b925061093483856080015161298d565b60008151835114801561184a5750508051602091820120825192909101919091201490565b60008282018381101561184a5761184a612a2f60008686613414565b600061093483612f60868563ffffffff61343316565b9063ffffffff61346416565b600082821115612f8557612f85612a2f60028585613414565b50900390565b6000612f9b82610140015161348e565b8015612fbc575060c08201511580612fbc5750612fbc82610180015161348e565b8015612fd15750612fd182610160015161348e565b8015610881575060e082015115806108815750610881826101a0015161348e565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6060632800659560e01b8484846040516024016130c693929190614e37565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290509392505050565b805160208201fd5b6000816020018351101561313f5761313f612a2f60058551856020016130a7565b50016020015190565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a75349390929091602087101561319457fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b600080600483610140015151101561321e57506000905080611525565b610140830151600090613237908263ffffffff612a0e16565b90506001600160e01b031981167fdc1600f30000000000000000000000000000000000000000000000000000000014156133e4576101408401516040517f750bdb3000000000000000000000000000000000000000000000000000000000815260009173__$af40232205bf188fa8dd573e0f47eaeabc$__9163750bdb30916132c291600401614dc4565b60006040518083038186803b1580156132da57600080fd5b505af41580156132ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133169190810190613f42565b506006549093506001600160a01b038085169116141591506133e290505773__$8ab3d6b0b5fe290c724f8d6cfdac7eabfb$__63d12a796086613357612ec5565b6040518363ffffffff1660e01b8152600401613374929190614f1d565b60206040518083038186803b15801561338c57600080fd5b505af41580156133a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133c49190810190614673565b6133d78660000151876101400151611abb565b935093505050611525565b505b6133f78460000151856101400151610ba1565b61340a8560000151866101400151611abb565b9250925050915091565b606063e946c1bb60e01b8484846040516024016130c693929190614e15565b600082613442575060006106cd565b8282028284828161344f57fe5b041461184a5761184a612a2f60018686613414565b60008161347a5761347a612a2f60038585613414565b600082848161348557fe5b04949350505050565b6000602082518161349b57fe5b066004146134ab57506000610884565b60006134bd838263ffffffff612a0e16565b90506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000146134fa576001915050610884565b6040517fbbb2dcf600000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063bbb2dcf69061354d908790600401614dc4565b60006040518083038186803b15801561356557600080fd5b505af4158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a191908101906140fe565b80519093509150600090505b8181146136375760006135dd60008584815181106135c757fe5b6020026020010151612a0e90919063ffffffff16565b90506001600160e01b031981167f0257179200000000000000000000000000000000000000000000000000000000141561362e5761361b8483613643565b1561362e57600095505050505050610884565b506001016135ad565b50600195945050505050565b8151600090600183015b818110156107d25761368e85828151811061366457fe5b602002602001015186868151811061367857fe5b6020026020010151612f0990919063ffffffff16565b1561369e576001925050506106cd565b60010161364d565b6040805160608101909152806000815260006020820181905260409091015290565b80356106cd81615016565b80516106cd81615016565b600082601f8301126136ee578081fd5b81356137016136fc82614fa2565b614f7b565b81815291506020808301908481018184028601820187101561372257600080fd5b60005b8481101561148b57813561373881615016565b84529282019290820190600101613725565b600082601f83011261375a578081fd5b81356137686136fc82614fa2565b8181529150602080830190840160005b838110156137a5576137908760208435890101613939565b83526020928301929190910190600101613778565b5050505092915050565b600082601f8301126137bf578081fd5b81516137cd6136fc82614fa2565b8181529150602080830190840160005b838110156137a5576137f58760208451890101613987565b835260209283019291909101906001016137dd565b600082601f83011261381a578081fd5b81356138286136fc82614fa2565b8181529150602080830190840160005b838110156137a55761385087602084358901016139dc565b83526020928301929190910190600101613838565b600082601f830112613875578081fd5b81356138836136fc82614fa2565b8181529150602080830190848101818402860182018710156138a457600080fd5b60005b8481101561148b578135845292820192908201906001016138a7565b600082601f8301126138d3578081fd5b81516138e16136fc82614fa2565b81815291506020808301908481018184028601820187101561390257600080fd5b60005b8481101561148b57815184529282019290820190600101613905565b80516001600160e01b0319811681146106cd57600080fd5b600082601f830112613949578081fd5b81356139576136fc82614fc2565b915080825283602082850101111561396e57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613997578081fd5b81516139a56136fc82614fc2565b91508082528360208285010111156139bc57600080fd5b611490816020840160208601614fe6565b8051600581106106cd57600080fd5b60006101c08083850312156139ef578182fd5b6139f881614f7b565b915050613a0583836136c8565b8152613a1483602084016136c8565b6020820152613a2683604084016136c8565b6040820152613a3883606084016136c8565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff80821115613a9a57600080fd5b613aa686838701613939565b83850152610160925082850135915080821115613ac257600080fd5b613ace86838701613939565b83850152610180925082850135915080821115613aea57600080fd5b613af686838701613939565b838501526101a0925082850135915080821115613b1257600080fd5b50613b1f85828601613939565b82840152505092915050565b600060208284031215613b3c578081fd5b813561184a81615016565b60008060408385031215613b59578081fd5b8235613b6481615016565b9150602083013567ffffffffffffffff811115613b7f578182fd5b613b8b8582860161374a565b9150509250929050565b60008060008060808587031215613baa578182fd5b8435613bb581615016565b9350602085013567ffffffffffffffff80821115613bd1578384fd5b613bdd88838901613865565b94506040870135915080821115613bf2578384fd5b613bfe88838901613865565b93506060870135915080821115613c13578283fd5b50613c2087828801613939565b91505092959194509250565b60008060408385031215613c3e578182fd5b8235613c4981615016565b9150602083013567ffffffffffffffff811115613c64578182fd5b613b8b85828601613939565b600080600060608486031215613c84578081fd5b8335613c8f81615016565b9250602084013567ffffffffffffffff811115613caa578182fd5b613cb686828701613939565b925050604084013590509250925092565b60008060408385031215613cd9578182fd5b8235613ce481615016565b946020939093013593505050565b600060208284031215613d03578081fd5b813567ffffffffffffffff811115613d19578182fd5b610934848285016136de565b60006020808385031215613d37578182fd5b825167ffffffffffffffff811115613d4d578283fd5b80840185601f820112613d5e578384fd5b80519150613d6e6136fc83614fa2565b8281528381019082850185850284018601891015613d8a578687fd5b8693505b84841015613db457613da089826139cd565b835260019390930192918501918501613d8e565b50979650505050505050565b600080600060608486031215613dd4578081fd5b833567ffffffffffffffff80821115613deb578283fd5b613df78783880161380a565b94506020860135915080821115613e0c578283fd5b613e18878388016136de565b93506040860135915080821115613e2d578283fd5b50613e3a86828701613865565b9150509250925092565b60008060408385031215613e56578182fd5b823567ffffffffffffffff80821115613e6d578384fd5b613e798683870161380a565b93506020850135915080821115613e8e578283fd5b50613b8b8582860161374a565b60008060408385031215613ead578182fd5b823567ffffffffffffffff80821115613ec4578384fd5b613e7986838701613865565b600060208284031215613ee1578081fd5b8151801515811461184a578182fd5b600060208284031215613f01578081fd5b61184a8383613921565b60008060408385031215613f1d578182fd5b613f278484613921565b91506020830151613f3781615016565b809150509250929050565b60008060008060808587031215613f57578182fd5b8451613f628161502b565b6020860151909450613f7381615016565b6040860151909350613f8481615016565b606086015190925067ffffffffffffffff811115613fa0578182fd5b613c2087828801613987565b600080600080600060a08688031215613fc3578283fd5b613fcd8787613921565b94506020860151613fdd81615016565b604087015190945067ffffffffffffffff80821115613ffa578485fd5b61400689838a016138c3565b9450606088015191508082111561401b578283fd5b61402789838a016138c3565b9350608088015191508082111561403c578283fd5b5061404988828901613987565b9150509295509295909350565b6000806000806080858703121561406b578182fd5b6140758686613921565b9350602085015161408581615016565b604086015190935067ffffffffffffffff8111156140a1578283fd5b6140ad87828801613987565b606096909601519497939650505050565b6000806000606084860312156140d2578081fd5b6140dc8585613921565b925060208401516140ec81615016565b80925050604084015190509250925092565b600080600060608486031215614112578081fd5b835161411d8161502b565b602085015190935067ffffffffffffffff8082111561413a578283fd5b614146878388016138c3565b9350604086015191508082111561415b578283fd5b50613e3a868287016137af565b600060208284031215614179578081fd5b813567ffffffffffffffff81111561418f578182fd5b61093484828501613939565b6000602082840312156141ac578081fd5b815167ffffffffffffffff8111156141c2578182fd5b61093484828501613987565b6000602082840312156141df578081fd5b815161184a81615016565b6000602082840312156141fb578081fd5b81516005811061184a578182fd5b6000806000806080858703121561421e578182fd5b845167ffffffffffffffff811115614234578283fd5b61424087828801613987565b945050602085015167ffffffffffffffff81111561425c578283fd5b86601f828801011261426c578283fd5b8086015161427c6136fc82614fa2565b8181526020808201919089850101865b84811015614415578151868c01016101c0601f19828f030112156142ae578889fd5b6142b96101c0614f7b565b6142c68e602084016136d3565b81526142d58e604084016136d3565b60208201526142e78e606084016136d3565b60408201526142f98e608084016136d3565b606082015260a0820151608082015260c082015160a082015260e082015160c082015261010082015160e082015261012082015161010082015261014082015161012082015261016082015167ffffffffffffffff811115614359578a8bfd5b6143688f602083860101613987565b6101408301525061018082015167ffffffffffffffff811115614389578a8bfd5b6143988f602083860101613987565b610160830152506101a082015167ffffffffffffffff8111156143b9578a8bfd5b6143c88f602083860101613987565b610180830152506101c082015167ffffffffffffffff8111156143e9578a8bfd5b6143f88f602083860101613987565b6101a083015250855250602093840193919091019060010161428c565b505080965050505050604085015167ffffffffffffffff811115614437578283fd5b614443878288016138c3565b925050606085015167ffffffffffffffff81111561445f578182fd5b613c20878288016137af565b60006060828403121561447c578081fd5b6144866060614f7b565b825160078110614494578283fd5b8152602083810151908201526040928301519281019290925250919050565b6000806000606084860312156144c7578081fd5b833567ffffffffffffffff8111156144dd578182fd5b6144e9868287016139dc565b93505060208401356144fa81615016565b929592945050506040919091013590565b6000806040838503121561451d578182fd5b823567ffffffffffffffff80821115614534578384fd5b614540868387016139dc565b93506020850135915080821115614555578283fd5b50613b8b85828601613939565b600080600060608486031215614576578081fd5b833567ffffffffffffffff81111561458c578182fd5b614598868287016139dc565b9350506020840135915060408401356145b081615016565b809150509250925092565b6000806000606084860312156145cf578081fd5b833567ffffffffffffffff808211156145e6578283fd5b81860160a081890312156145f8578384fd5b61460260a0614f7b565b925080358352602081013560208401526040810135604084015261462988606083016136c8565b606084015260808101358281111561463f578485fd5b61464b89828401613939565b60808501525091945050506020840135915061466a85604086016136c8565b90509250925092565b600060208284031215614684578081fd5b5051919050565b6001600160a01b0316815260200190565b1515815260200190565b60006146b28383614784565b505060600190565b6001600160a01b03169052565b60008282518085526020808601955080818302840101818601855b8481101561471057601f198684030189526146fe838351614758565b988401989250908301906001016146e2565b5090979650505050505050565b6000815180845260208401935060208301825b8281101561474e578151865260209586019590910190600101614730565b5093949350505050565b60008151808452614770816020860160208601614fe6565b601f01601f19169290920160200192915050565b80516007811061479057fe5b825260208181015190830152604090810151910152565b60006101c06147b78484516146ba565b60208301516147c960208601826146ba565b5060408301516147dc60408601826146ba565b5060608301516147ef60608601826146ba565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261484883870182614758565b915050610160915081840151858203838701526148658282614758565b9250505061018080840151858303828701526148818382614758565b9150506101a09150818401518582038387015261489e8282614758565b9695505050505050565b600082516148ba818460208701614fe6565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6000608082016001600160a01b0387168352602060808185015281875161493c8185614c41565b91508193508281028201838a01865b838110156149755786830385526149638383516147a7565b9486019492509085019060010161494b565b50508681036040880152809450885192506149908382614c41565b94505050818701845b828110156149ba576149ac85835161468b565b945090830190600101614999565b5050505082810360608401526149d0818561471d565b979650505050505050565b60006001600160a01b0386168252608060208301526149fd608083018661471d565b8281036040840152614a0f818661471d565b8381036060850152614a218186614758565b98975050505050505050565b60006001600160a01b038516825260606020830152614a4f6060830185614758565b9050826040830152949350505050565b60006001600160a01b03808716835260806020840152614a8260808401876147a7565b94166040830152506060015292915050565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b81811015614aef57835160058110614adb57fe5b835260209384019390920191600101614ac7565b509095945050505050565b60006060820160608352808651614b118184614c41565b9150602088019250835b81811015614b3f57614b2e8385516146a6565b602094909401939250600101614b1b565b50508381036020850152614b53818761471d565b9150508281036040840152808451614b6b8184614c41565b9150602086019250835b8181101561471057614b8883855161469c565b602094909401939250600101614b75565b60006020825261184a602083018461471d565b600060408252614bbf604083018561471d565b602083820381850152818551808452828401915082838202850101838801865b83811015614c0d57601f19878403018552614bfb838351614758565b94860194925090850190600101614bdf565b50909998505050505050505050565b600060408252614c2f604083018561471d565b828103602084015261190d818561471d565b90815260200190565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319861682526001600160a01b0380861660208401528085166040840152506080606083015261489e6080830184614758565b60006001600160e01b0319871682526001600160a01b038616602083015260a06040830152614cf060a083018661471d565b8281036060840152614d02818661471d565b8381036080850152614d148186614758565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b038516602083015260806040830152614d536080830185614758565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b03198516825260606020830152614db2606083018561471d565b828103604084015261489e81856146c7565b60006020825261184a6020830184614758565b600060808252614dea6080830187614758565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b6060810160048510614e2357fe5b938152602081019290925260409091015290565b6060810160088510614e2357fe5b6020810160058310614e5357fe5b91905290565b600060808252614e6c6080830187614758565b602083820381850152818751808452828401915082838202850101838a01865b83811015614eba57601f19878403018552614ea88383516147a7565b94860194925090850190600101614e8c565b50508681036040880152614ece818a61471d565b94505050505082810360608401526149d081856146c7565b60a08101614ef48286614784565b8360608301528215156080830152949350505050565b60006020825261184a60208301846147a7565b600060408252614f3060408301856147a7565b90506001600160a01b03831660208301529392505050565b600060408252614f5b60408301856147a7565b828103602084015261190d8185614758565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715614f9a57600080fd5b604052919050565b600067ffffffffffffffff821115614fb8578081fd5b5060209081020190565b600067ffffffffffffffff821115614fd8578081fd5b50601f01601f191660200190565b60005b83811015615001578181015183820152602001614fe9565b83811115615010576000848401525b50505050565b6001600160a01b038116811461075457600080fd5b6001600160e01b03198116811461075457600080fdfea365627a7a7231582042d7fae961b1460c70c7ec8ff1688f8680c3323368dee844634a86b8a2f15fdb6c6578706572696d656e74616cf564736f6c63430005110040"
},
"deployedBytecode": {
"object": "0x608060405234801561001057600080fd5b50600436106102775760003560e01c8063a5cd62ba11610160578063d186037f116100d8578063e4e6e7da1161008c578063ee18599711610071578063ee185997146105d8578063ef3bb097146105e0578063ff84e7cc146105e857610277565b8063e4e6e7da14610595578063e77286eb146105b657610277565b8063d3d862d1116100bd578063d3d862d114610540578063d469502814610553578063e25cabf71461057357610277565b8063d186037f1461051a578063d36379051461052d57610277565b8063bbb2dcf61161012f578063c82037ef11610114578063c82037ef146104dc578063ca49f47c146104e4578063d001c5dc1461050757610277565b8063bbb2dcf6146104b2578063c26cfecd146104d457610277565b8063a5cd62ba14610464578063a6627e9f14610484578063a7530f1214610497578063b43cffe11461049f57610277565b80637982653e116101f35780639baf2705116101c25780639eadc835116101a75780639eadc8351461041a578063a070cac81461043e578063a0901e511461045157610277565b80639baf2705146103fd5780639cd016051461041257610277565b80637982653e1461039657806379c9c426146103b65780637d727512146103c95780638f4ce479146103dc57610277565b80634dfdac201161024a57806363eb39921161022f57806363eb39921461033d5780636f83188e14610350578063750bdb301461037357610277565b80634dfdac20146102fd578063590aa8751461031d57610277565b806304a5618a1461027c5780630d7b7d76146102a75780632322cf76146102c857806346eb65cb146102e8575b600080fd5b61028f61028a366004614168565b6105f0565b60405161029e93929190614d64565b60405180910390f35b6102ba6102b5366004613c2c565b610689565b60405161029e929190614f6d565b6102db6102d6366004613c2c565b6106ab565b60405161029e9190614c41565b6102fb6102f6366004614168565b6106d3565b005b61031061030b366004613b47565b610757565b60405161029e9190614b99565b61033061032b366004613b2b565b6107da565b60405161029e9190614dc4565b61033061034b366004613c70565b610889565b61036361035e366004614168565b61093c565b60405161029e9493929190614e59565b610386610381366004614168565b6109dc565b60405161029e9493929190614c82565b6103a96103a43660046144b3565b610a6e565b60405161029e9190614e45565b6102db6103c43660046145bb565b610b20565b6102db6103d7366004613c2c565b610ba1565b6103ef6103ea366004614168565b611497565b60405161029e929190614c5f565b61040561152a565b60405161029e91906148c4565b610405611539565b61042d610428366004614168565b611548565b60405161029e959493929190614cbe565b6102db61044c366004614562565b6115ed565b61031061045f366004613cf2565b61166e565b610477610472366004613dc0565b6116e7565b60405161029e9190614aad565b610330610492366004613cc7565b6117a1565b610405611851565b6103306104ad366004613b95565b611860565b6104c56104c0366004614168565b611916565b60405161029e93929190614d8f565b6102db6119a6565b6104056119ac565b6104f76104f2366004614168565b6119bb565b60405161029e9493929190614d21565b610310610515366004613b47565b611a4d565b6102db610528366004613c2c565b611abb565b6103a961053b3660046144b3565b612446565b61033061054e366004613e9b565b6124a8565b610566610561366004614168565b6124fd565b60405161029e9190614c4a565b610586610581366004613e44565b6125a0565b60405161029e93929190614afa565b6105a86105a3366004613b47565b6126d8565b60405161029e929190614c1c565b6105c96105c436600461450b565b6126f1565b60405161029e93929190614ee6565b610405612960565b61040561296f565b61040561297e565b600080600073__$af40232205bf188fa8dd573e0f47eaeabc$__6304a5618a856040518263ffffffff1660e01b815260040161062c9190614dc4565b60606040518083038186803b15801561064457600080fd5b505af4158015610658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061067c91908101906140be565b9250925092509193909250565b6000806106968484610ba1565b91506106a28484611abb565b90509250929050565b60008060006106ba8585610689565b915091506106c8828261298d565b925050505b92915050565b6040517f46eb65cb00000000000000000000000000000000000000000000000000000000815273__$af40232205bf188fa8dd573e0f47eaeabc$__906346eb65cb90610723908490600401614dc4565b60006040518083038186803b15801561073b57600080fd5b505af415801561074f573d6000803e3d6000fd5b505050505b50565b606060008251905080604051908082528060200260200182016040528015610789578160200160208202803883390190505b50915060005b8181146107d2576107b3858583815181106107a657fe5b6020026020010151611abb565b8382815181106107bf57fe5b602090810291909101015260010161078f565b505092915050565b6040517f590aa87500000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063590aa8759061082d9085906004016148c4565b60006040518083038186803b15801561084557600080fd5b505af4158015610859573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610881919081019061419b565b90505b919050565b6040517f63eb399200000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__906363eb3992906108e090879087908790600401614a2d565b60006040518083038186803b1580156108f857600080fd5b505af415801561090c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610934919081019061419b565b949350505050565b60608060608073__$d80c8447db5aca01fdd367a509db3f8167$__636f83188e866040518263ffffffff1660e01b81526004016109799190614dc4565b60006040518083038186803b15801561099157600080fd5b505af41580156109a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cd9190810190614209565b93509350935093509193509193565b6000806000606073__$af40232205bf188fa8dd573e0f47eaeabc$__63750bdb30866040518263ffffffff1660e01b8152600401610a1a9190614dc4565b60006040518083038186803b158015610a3257600080fd5b505af4158015610a46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cd9190810190613f42565b600080546040517f9caa023b00000000000000000000000000000000000000000000000000000000815273__$51238773fd6195a8a6f152a329b1854152$__91639caa023b91610ad0916001600160a01b031690889088908890600401614a5f565b60206040518083038186803b158015610ae857600080fd5b505af4158015610afc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061093491908101906141ea565b600061093484610b9c6040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876129a3565b6129fa565b600080610bb4838263ffffffff612a0e16565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415610c0f576000610bfb84601063ffffffff612a4716565b9050610c078186612a7a565b925050611490565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415610e285760008073__$af40232205bf188fa8dd573e0f47eaeabc$__6304a5618a866040518263ffffffff1660e01b8152600401610c7b9190614dc4565b60606040518083038186803b158015610c9357600080fd5b505af4158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ccb91908101906140be565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090610d07908490602401614c41565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051610d8291906148a8565b600060405180830381855afa9150503d8060008114610dbd576040519150601f19603f3d011682016040523d82523d6000602084013e610dc2565b606091505b50915091506000828015610dd7575081516020145b610de2576000610df3565b610df382600c63ffffffff612a4716565b9050896001600160a01b0316816001600160a01b031614610e15576000610e18565b60015b60ff169750505050505050611490565b6001600160e01b031981167fa7cb5fb70000000000000000000000000000000000000000000000000000000014156110c457600060608073__$af40232205bf188fa8dd573e0f47eaeabc$__639eadc835876040518263ffffffff1660e01b8152600401610e969190614dc4565b60006040518083038186803b158015610eae57600080fd5b505af4158015610ec2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eea9190810190613fac565b5081519296509094509250905060005b8181146110ba57828181518110610f0d57fe5b602002602001015160001415610f22576110b2565b83516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110610f5657fe5b6020026020010151604051602401610f6f929190614a94565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051610fea91906148a8565b600060405180830381855afa9150503d8060008114611025576040519150601f19603f3d011682016040523d82523d6000602084013e61102a565b606091505b5091509150600082801561103f575081516020145b61104a57600061105b565b61105b82600063ffffffff612b7216565b9050600087868151811061106b57fe5b6020026020010151828161107b57fe5b049050806110975760009b5050505050505050505050506106cd565b8b8110806110a357508b155b156110ac57809b505b50505050505b600101610efa565b5050505050611490565b6001600160e01b031981167fc339d10a0000000000000000000000000000000000000000000000000000000014156111f7576040516060907fa85e59e4000000000000000000000000000000000000000000000000000000009061113390869060009081908190602401614dd7565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b03169061119a9084906148a8565b600060405180830381855afa9150503d80600081146111d5576040519150601f19603f3d011682016040523d82523d6000602084013e6111da565b606091505b50509050806111ea5760006111ee565b6000195b93505050611490565b6001600160e01b031981167fdc1600f30000000000000000000000000000000000000000000000000000000014156113205760008073__$af40232205bf188fa8dd573e0f47eaeabc$__63750bdb30866040518263ffffffff1660e01b81526004016112639190614dc4565b60006040518083038186803b15801561127b57600080fd5b505af415801561128f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b79190810190613f42565b5092509250506112c5612b7e565b6001600160a01b0316826001600160a01b03161480156112f257506005546001600160a01b038281169116145b1561131957600061130a611304612b96565b88612a7a565b905061131581612bae565b9450505b5050611490565b6001600160e01b031981167f94cfcdd70000000000000000000000000000000000000000000000000000000014156114905760608073__$af40232205bf188fa8dd573e0f47eaeabc$__63bbb2dcf6866040518263ffffffff1660e01b815260040161138c9190614dc4565b60006040518083038186803b1580156113a457600080fd5b505af41580156113b8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e091908101906140fe565b80519194509250905060005b81811461148b578381815181106113ff57fe5b60200260200101516000141561141457611483565b60006114338985848151811061142657fe5b6020026020010151610ba1565b9050600085838151811061144357fe5b6020026020010151828161145357fe5b0490508061146b5760009750505050505050506106cd565b87811080611477575087155b15611480578097505b50505b6001016113ec565b505050505b5092915050565b60008073__$af40232205bf188fa8dd573e0f47eaeabc$__638f4ce479846040518263ffffffff1660e01b81526004016114d19190614dc4565b604080518083038186803b1580156114e857600080fd5b505af41580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115209190810190613f0b565b915091505b915091565b6004546001600160a01b031681565b6000546001600160a01b031681565b600080606080606073__$af40232205bf188fa8dd573e0f47eaeabc$__639eadc835876040518263ffffffff1660e01b81526004016115879190614dc4565b60006040518083038186803b15801561159f57600080fd5b505af41580156115b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115db9190810190613fac565b939a9299509097509550909350915050565b6000610934846116696040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876129a3565b612dac565b606080825160405190808252806020026020018201604052801561169c578160200160208202803883390190505b50905060005b83518114611490578381815181106116b657fe5b60200260200101516001600160a01b0316318282815181106116d457fe5b60209081029190910101526001016116a2565b6000546040517f02cffc4500000000000000000000000000000000000000000000000000000000815260609173__$51238773fd6195a8a6f152a329b1854152$__916302cffc459161174d916001600160a01b0390911690889088908890600401614915565b60006040518083038186803b15801561176557600080fd5b505af4158015611779573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109349190810190613d25565b6040517fa6627e9f00000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063a6627e9f906117f69086908690600401614a94565b60006040518083038186803b15801561180e57600080fd5b505af4158015611822573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261184a919081019061419b565b9392505050565b6006546001600160a01b031681565b6040517fb43cffe100000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063b43cffe1906118b99088908890889088906004016149db565b60006040518083038186803b1580156118d157600080fd5b505af41580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d919081019061419b565b95945050505050565b600060608073__$af40232205bf188fa8dd573e0f47eaeabc$__63bbb2dcf6856040518263ffffffff1660e01b81526004016119529190614dc4565b60006040518083038186803b15801561196a57600080fd5b505af415801561197e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261067c91908101906140fe565b60075481565b6005546001600160a01b031681565b6000806060600073__$af40232205bf188fa8dd573e0f47eaeabc$__63ca49f47c866040518263ffffffff1660e01b81526004016119f99190614dc4565b60006040518083038186803b158015611a1157600080fd5b505af4158015611a25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cd9190810190614056565b606060008251905080604051908082528060200260200182016040528015611a7f578160200160208202803883390190505b50915060005b8181146107d257611a9c8585838151811061142657fe5b838281518110611aa857fe5b6020908102919091010152600101611a85565b600080611ace838263ffffffff612a0e16565b90506001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415611c395760608073__$af40232205bf188fa8dd573e0f47eaeabc$__63bbb2dcf6866040518263ffffffff1660e01b8152600401611b3c9190614dc4565b60006040518083038186803b158015611b5457600080fd5b505af4158015611b68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b9091908101906140fe565b80519194509250905060005b818114611c2e57838181518110611baf57fe5b602002602001015160001415611bc457611c26565b6000611bd6898584815181106107a657fe5b90506000858381518110611be657fe5b60200260200101518281611bf657fe5b04905080611c0e5760009750505050505050506106cd565b87811080611c1a575087155b15611c23578097505b50505b600101611b9c565b506106cd9350505050565b6001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415611c9a576000611c7e84601063ffffffff612a4716565b600154909150610c0790829087906001600160a01b0316612dbb565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415611fea5760008073__$af40232205bf188fa8dd573e0f47eaeabc$__6304a5618a866040518263ffffffff1660e01b8152600401611d069190614dc4565b60606040518083038186803b158015611d1e57600080fd5b505af4158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d5691908101906140be565b600254604051929550909350606092507fe985e9c50000000000000000000000000000000000000000000000000000000091611da2918a916001600160a01b03909116906024016148d8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051611e1d91906148a8565b600060405180830381855afa9150503d8060008114611e58576040519150601f19603f3d011682016040523d82523d6000602084013e611e5d565b606091505b5091509150811580611e7157508051602014155b80611e8d5750611e8881600063ffffffff612b7216565b600114155b15611fdb576040516060907f081812fc0000000000000000000000000000000000000000000000000000000090611ec8908790602401614c41565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b031681604051611f3f91906148a8565b600060405180830381855afa9150503d8060008114611f7a576040519150601f19603f3d011682016040523d82523d6000602084013e611f7f565b606091505b509093509150828015611f93575081516020145b8015611fc257506002546001600160a01b0316611fb783600c63ffffffff612a4716565b6001600160a01b0316145b611fcd576000611fd0565b60015b60ff169750506110ba565b60001996505050505050611490565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415612211576040517f9eadc83500000000000000000000000000000000000000000000000000000000815260009073__$af40232205bf188fa8dd573e0f47eaeabc$__90639eadc8359061206f908790600401614dc4565b60006040518083038186803b15801561208757600080fd5b505af415801561209b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120c39190810190613fac565b5050600354604051929450606093507fe985e9c5000000000000000000000000000000000000000000000000000000009261210d925089916001600160a01b0316906024016148d8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b03168360405161218891906148a8565b600060405180830381855afa9150503d80600081146121c3576040519150601f19603f3d011682016040523d82523d6000602084013e6121c8565b606091505b50915091508180156121db575080516020145b80156121f757506121f381600063ffffffff612b7216565b6001145b612202576000612206565b6000195b955050505050611490565b6001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000141561224d576000199150611490565b6001600160e01b031981167fdc1600f30000000000000000000000000000000000000000000000000000000014156114905760008073__$af40232205bf188fa8dd573e0f47eaeabc$__63750bdb30866040518263ffffffff1660e01b81526004016122b99190614dc4565b60006040518083038186803b1580156122d157600080fd5b505af41580156122e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261230d9190810190613f42565b50925092505061231b612b7e565b6001600160a01b0316826001600160a01b031614801561234857506005546001600160a01b038281169116145b1561239257600061236d61235a612b96565b60055489906001600160a01b0316612dbb565b905060001981146123865761238181612bae565b61238a565b6000195b94505061243d565b6006546001600160a01b038281169116141561243d5773__$8ab3d6b0b5fe290c724f8d6cfdac7eabfb$__630e70a03387836123cc612ec5565b6040518463ffffffff1660e01b81526004016123ea939291906148f2565b60206040518083038186803b15801561240257600080fd5b505af4158015612416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061243a9190810190614673565b93505b50505092915050565b600080546040517f8dccde0400000000000000000000000000000000000000000000000000000000815273__$51238773fd6195a8a6f152a329b1854152$__91638dccde0491610ad0916001600160a01b031690889088908890600401614a5f565b6040517fd3d862d100000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063d3d862d1906117f69086908690600401614bac565b6040517fd469502800000000000000000000000000000000000000000000000000000000815260009073__$af40232205bf188fa8dd573e0f47eaeabc$__9063d469502890612550908590600401614dc4565b60206040518083038186803b15801561256857600080fd5b505af415801561257c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108819190810190613ef0565b6060806060600085519050806040519080825280602002602001820160405280156125e557816020015b6125d26136a6565b8152602001906001900390816125ca5790505b50935080604051908082528060200260200182016040528015612612578160200160208202803883390190505b5092508060405190808252806020026020018201604052801561263f578160200160208202803883390190505b50915060005b8181146126cf5761267c87828151811061265b57fe5b602002602001015187838151811061266f57fe5b60200260200101516126f1565b875188908590811061268a57fe5b6020026020010187858151811061269d57fe5b602002602001018786815181106126b057fe5b9315156020948502919091019093019290925291905252600101612645565b50509250925092565b6060806126e58484611a4d565b91506106a28484610757565b6126f96136a6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612743908890600401614f0a565b60606040518083038186803b15801561275b57600080fd5b505afa15801561276f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612793919081019061446b565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906127e59089908990600401614f48565b60206040518083038186803b1580156127fd57600080fd5b505afa158015612811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128359190810190613ed0565b9150600061284287612edd565b90506000612863886101800151896101400151612f0990919063ffffffff16565b1561289857612891826128878a60c001518b60800151612f2e90919063ffffffff16565b8a60a00151612f4a565b9050612905565b60c08801516128b4576128918289608001518a60a00151612f4a565b60006128c5848a61018001516106ab565b905060006128dc848b608001518c60a00151612f4a565b905060006128f3838c60c001518d60a00151612f4a565b90506128ff828261298d565b93505050505b61292961292387604001518a60a00151612f6c90919063ffffffff16565b8261298d565b945061293488612f8b565b61293d57600094505b60038651600681111561294c57fe5b1461295657600094505b5050509250925092565b6001546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b600081831061299c578161184a565b5090919050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b600061184a82612a0985612ff2565b61306d565b60008160040183511015612a3457612a34612a2f60038551856004016130a7565b613116565b5001602001516001600160e01b03191690565b60008160140183511015612a6857612a68612a2f60048551856014016130a7565b5001601401516001600160a01b031690565b60405160009081906060906001600160a01b038616907f70a082310000000000000000000000000000000000000000000000000000000090612ac09087906024016148c4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909416939093179092529051612b1391906148a8565b600060405180830381855afa9150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150818015612b66575080516020145b156107d2576106c88160005b600061184a838361311e565b736b175474e89094c44da98b954eedeac495271d0f90565b7306af07097c9eeb7fd685c692751d5c66db49c21590565b600080612bb9612b96565b6001600160a01b0316634ba2363a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612bf357600080fd5b505af1158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c2b91908101906141ce565b90506000816001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c6a57600080fd5b505af1158015612c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ca29190810190614673565b4211612d2057816001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d1b9190810190614673565b612d93565b816001600160a01b0316639f678cca6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612d5b57600080fd5b505af1158015612d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d939190810190614673565b9050610934816b033b2e3c9fd0803ce800000086612f4a565b600061184a82612a0985613148565b60405160009081906060906001600160a01b038716907fdd62ed3e0000000000000000000000000000000000000000000000000000000090612e0390889088906024016148d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909416939093179092529051612e5691906148a8565b600060405180830381855afa9150503d8060008114612e91576040519150601f19603f3d011682016040523d82523d6000602084013e612e96565b606091505b5091509150818015612ea9575080516020145b15612ebc57612eb9816000612b72565b92505b50509392505050565b731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e90565b6000806000612eeb84613201565b91509150612ef9828261298d565b925061093483856080015161298d565b60008151835114801561184a5750508051602091820120825192909101919091201490565b60008282018381101561184a5761184a612a2f60008686613414565b600061093483612f60868563ffffffff61343316565b9063ffffffff61346416565b600082821115612f8557612f85612a2f60028585613414565b50900390565b6000612f9b82610140015161348e565b8015612fbc575060c08201511580612fbc5750612fbc82610180015161348e565b8015612fd15750612fd182610160015161348e565b8015610881575060e082015115806108815750610881826101a0015161348e565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6060632800659560e01b8484846040516024016130c693929190614e37565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290509392505050565b805160208201fd5b6000816020018351101561313f5761313f612a2f60058551856020016130a7565b50016020015190565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a75349390929091602087101561319457fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b600080600483610140015151101561321e57506000905080611525565b610140830151600090613237908263ffffffff612a0e16565b90506001600160e01b031981167fdc1600f30000000000000000000000000000000000000000000000000000000014156133e4576101408401516040517f750bdb3000000000000000000000000000000000000000000000000000000000815260009173__$af40232205bf188fa8dd573e0f47eaeabc$__9163750bdb30916132c291600401614dc4565b60006040518083038186803b1580156132da57600080fd5b505af41580156132ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133169190810190613f42565b506006549093506001600160a01b038085169116141591506133e290505773__$8ab3d6b0b5fe290c724f8d6cfdac7eabfb$__63d12a796086613357612ec5565b6040518363ffffffff1660e01b8152600401613374929190614f1d565b60206040518083038186803b15801561338c57600080fd5b505af41580156133a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133c49190810190614673565b6133d78660000151876101400151611abb565b935093505050611525565b505b6133f78460000151856101400151610ba1565b61340a8560000151866101400151611abb565b9250925050915091565b606063e946c1bb60e01b8484846040516024016130c693929190614e15565b600082613442575060006106cd565b8282028284828161344f57fe5b041461184a5761184a612a2f60018686613414565b60008161347a5761347a612a2f60038585613414565b600082848161348557fe5b04949350505050565b6000602082518161349b57fe5b066004146134ab57506000610884565b60006134bd838263ffffffff612a0e16565b90506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000146134fa576001915050610884565b6040517fbbb2dcf600000000000000000000000000000000000000000000000000000000815260609073__$af40232205bf188fa8dd573e0f47eaeabc$__9063bbb2dcf69061354d908790600401614dc4565b60006040518083038186803b15801561356557600080fd5b505af4158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a191908101906140fe565b80519093509150600090505b8181146136375760006135dd60008584815181106135c757fe5b6020026020010151612a0e90919063ffffffff16565b90506001600160e01b031981167f0257179200000000000000000000000000000000000000000000000000000000141561362e5761361b8483613643565b1561362e57600095505050505050610884565b506001016135ad565b50600195945050505050565b8151600090600183015b818110156107d25761368e85828151811061366457fe5b602002602001015186868151811061367857fe5b6020026020010151612f0990919063ffffffff16565b1561369e576001925050506106cd565b60010161364d565b6040805160608101909152806000815260006020820181905260409091015290565b80356106cd81615016565b80516106cd81615016565b600082601f8301126136ee578081fd5b81356137016136fc82614fa2565b614f7b565b81815291506020808301908481018184028601820187101561372257600080fd5b60005b8481101561148b57813561373881615016565b84529282019290820190600101613725565b600082601f83011261375a578081fd5b81356137686136fc82614fa2565b8181529150602080830190840160005b838110156137a5576137908760208435890101613939565b83526020928301929190910190600101613778565b5050505092915050565b600082601f8301126137bf578081fd5b81516137cd6136fc82614fa2565b8181529150602080830190840160005b838110156137a5576137f58760208451890101613987565b835260209283019291909101906001016137dd565b600082601f83011261381a578081fd5b81356138286136fc82614fa2565b8181529150602080830190840160005b838110156137a55761385087602084358901016139dc565b83526020928301929190910190600101613838565b600082601f830112613875578081fd5b81356138836136fc82614fa2565b8181529150602080830190848101818402860182018710156138a457600080fd5b60005b8481101561148b578135845292820192908201906001016138a7565b600082601f8301126138d3578081fd5b81516138e16136fc82614fa2565b81815291506020808301908481018184028601820187101561390257600080fd5b60005b8481101561148b57815184529282019290820190600101613905565b80516001600160e01b0319811681146106cd57600080fd5b600082601f830112613949578081fd5b81356139576136fc82614fc2565b915080825283602082850101111561396e57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613997578081fd5b81516139a56136fc82614fc2565b91508082528360208285010111156139bc57600080fd5b611490816020840160208601614fe6565b8051600581106106cd57600080fd5b60006101c08083850312156139ef578182fd5b6139f881614f7b565b915050613a0583836136c8565b8152613a1483602084016136c8565b6020820152613a2683604084016136c8565b6040820152613a3883606084016136c8565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff80821115613a9a57600080fd5b613aa686838701613939565b83850152610160925082850135915080821115613ac257600080fd5b613ace86838701613939565b83850152610180925082850135915080821115613aea57600080fd5b613af686838701613939565b838501526101a0925082850135915080821115613b1257600080fd5b50613b1f85828601613939565b82840152505092915050565b600060208284031215613b3c578081fd5b813561184a81615016565b60008060408385031215613b59578081fd5b8235613b6481615016565b9150602083013567ffffffffffffffff811115613b7f578182fd5b613b8b8582860161374a565b9150509250929050565b60008060008060808587031215613baa578182fd5b8435613bb581615016565b9350602085013567ffffffffffffffff80821115613bd1578384fd5b613bdd88838901613865565b94506040870135915080821115613bf2578384fd5b613bfe88838901613865565b93506060870135915080821115613c13578283fd5b50613c2087828801613939565b91505092959194509250565b60008060408385031215613c3e578182fd5b8235613c4981615016565b9150602083013567ffffffffffffffff811115613c64578182fd5b613b8b85828601613939565b600080600060608486031215613c84578081fd5b8335613c8f81615016565b9250602084013567ffffffffffffffff811115613caa578182fd5b613cb686828701613939565b925050604084013590509250925092565b60008060408385031215613cd9578182fd5b8235613ce481615016565b946020939093013593505050565b600060208284031215613d03578081fd5b813567ffffffffffffffff811115613d19578182fd5b610934848285016136de565b60006020808385031215613d37578182fd5b825167ffffffffffffffff811115613d4d578283fd5b80840185601f820112613d5e578384fd5b80519150613d6e6136fc83614fa2565b8281528381019082850185850284018601891015613d8a578687fd5b8693505b84841015613db457613da089826139cd565b835260019390930192918501918501613d8e565b50979650505050505050565b600080600060608486031215613dd4578081fd5b833567ffffffffffffffff80821115613deb578283fd5b613df78783880161380a565b94506020860135915080821115613e0c578283fd5b613e18878388016136de565b93506040860135915080821115613e2d578283fd5b50613e3a86828701613865565b9150509250925092565b60008060408385031215613e56578182fd5b823567ffffffffffffffff80821115613e6d578384fd5b613e798683870161380a565b93506020850135915080821115613e8e578283fd5b50613b8b8582860161374a565b60008060408385031215613ead578182fd5b823567ffffffffffffffff80821115613ec4578384fd5b613e7986838701613865565b600060208284031215613ee1578081fd5b8151801515811461184a578182fd5b600060208284031215613f01578081fd5b61184a8383613921565b60008060408385031215613f1d578182fd5b613f278484613921565b91506020830151613f3781615016565b809150509250929050565b60008060008060808587031215613f57578182fd5b8451613f628161502b565b6020860151909450613f7381615016565b6040860151909350613f8481615016565b606086015190925067ffffffffffffffff811115613fa0578182fd5b613c2087828801613987565b600080600080600060a08688031215613fc3578283fd5b613fcd8787613921565b94506020860151613fdd81615016565b604087015190945067ffffffffffffffff80821115613ffa578485fd5b61400689838a016138c3565b9450606088015191508082111561401b578283fd5b61402789838a016138c3565b9350608088015191508082111561403c578283fd5b5061404988828901613987565b9150509295509295909350565b6000806000806080858703121561406b578182fd5b6140758686613921565b9350602085015161408581615016565b604086015190935067ffffffffffffffff8111156140a1578283fd5b6140ad87828801613987565b606096909601519497939650505050565b6000806000606084860312156140d2578081fd5b6140dc8585613921565b925060208401516140ec81615016565b80925050604084015190509250925092565b600080600060608486031215614112578081fd5b835161411d8161502b565b602085015190935067ffffffffffffffff8082111561413a578283fd5b614146878388016138c3565b9350604086015191508082111561415b578283fd5b50613e3a868287016137af565b600060208284031215614179578081fd5b813567ffffffffffffffff81111561418f578182fd5b61093484828501613939565b6000602082840312156141ac578081fd5b815167ffffffffffffffff8111156141c2578182fd5b61093484828501613987565b6000602082840312156141df578081fd5b815161184a81615016565b6000602082840312156141fb578081fd5b81516005811061184a578182fd5b6000806000806080858703121561421e578182fd5b845167ffffffffffffffff811115614234578283fd5b61424087828801613987565b945050602085015167ffffffffffffffff81111561425c578283fd5b86601f828801011261426c578283fd5b8086015161427c6136fc82614fa2565b8181526020808201919089850101865b84811015614415578151868c01016101c0601f19828f030112156142ae578889fd5b6142b96101c0614f7b565b6142c68e602084016136d3565b81526142d58e604084016136d3565b60208201526142e78e606084016136d3565b60408201526142f98e608084016136d3565b606082015260a0820151608082015260c082015160a082015260e082015160c082015261010082015160e082015261012082015161010082015261014082015161012082015261016082015167ffffffffffffffff811115614359578a8bfd5b6143688f602083860101613987565b6101408301525061018082015167ffffffffffffffff811115614389578a8bfd5b6143988f602083860101613987565b610160830152506101a082015167ffffffffffffffff8111156143b9578a8bfd5b6143c88f602083860101613987565b610180830152506101c082015167ffffffffffffffff8111156143e9578a8bfd5b6143f88f602083860101613987565b6101a083015250855250602093840193919091019060010161428c565b505080965050505050604085015167ffffffffffffffff811115614437578283fd5b614443878288016138c3565b925050606085015167ffffffffffffffff81111561445f578182fd5b613c20878288016137af565b60006060828403121561447c578081fd5b6144866060614f7b565b825160078110614494578283fd5b8152602083810151908201526040928301519281019290925250919050565b6000806000606084860312156144c7578081fd5b833567ffffffffffffffff8111156144dd578182fd5b6144e9868287016139dc565b93505060208401356144fa81615016565b929592945050506040919091013590565b6000806040838503121561451d578182fd5b823567ffffffffffffffff80821115614534578384fd5b614540868387016139dc565b93506020850135915080821115614555578283fd5b50613b8b85828601613939565b600080600060608486031215614576578081fd5b833567ffffffffffffffff81111561458c578182fd5b614598868287016139dc565b9350506020840135915060408401356145b081615016565b809150509250925092565b6000806000606084860312156145cf578081fd5b833567ffffffffffffffff808211156145e6578283fd5b81860160a081890312156145f8578384fd5b61460260a0614f7b565b925080358352602081013560208401526040810135604084015261462988606083016136c8565b606084015260808101358281111561463f578485fd5b61464b89828401613939565b60808501525091945050506020840135915061466a85604086016136c8565b90509250925092565b600060208284031215614684578081fd5b5051919050565b6001600160a01b0316815260200190565b1515815260200190565b60006146b28383614784565b505060600190565b6001600160a01b03169052565b60008282518085526020808601955080818302840101818601855b8481101561471057601f198684030189526146fe838351614758565b988401989250908301906001016146e2565b5090979650505050505050565b6000815180845260208401935060208301825b8281101561474e578151865260209586019590910190600101614730565b5093949350505050565b60008151808452614770816020860160208601614fe6565b601f01601f19169290920160200192915050565b80516007811061479057fe5b825260208181015190830152604090810151910152565b60006101c06147b78484516146ba565b60208301516147c960208601826146ba565b5060408301516147dc60408601826146ba565b5060608301516147ef60608601826146ba565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261484883870182614758565b915050610160915081840151858203838701526148658282614758565b9250505061018080840151858303828701526148818382614758565b9150506101a09150818401518582038387015261489e8282614758565b9695505050505050565b600082516148ba818460208701614fe6565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6000608082016001600160a01b0387168352602060808185015281875161493c8185614c41565b91508193508281028201838a01865b838110156149755786830385526149638383516147a7565b9486019492509085019060010161494b565b50508681036040880152809450885192506149908382614c41565b94505050818701845b828110156149ba576149ac85835161468b565b945090830190600101614999565b5050505082810360608401526149d0818561471d565b979650505050505050565b60006001600160a01b0386168252608060208301526149fd608083018661471d565b8281036040840152614a0f818661471d565b8381036060850152614a218186614758565b98975050505050505050565b60006001600160a01b038516825260606020830152614a4f6060830185614758565b9050826040830152949350505050565b60006001600160a01b03808716835260806020840152614a8260808401876147a7565b94166040830152506060015292915050565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b81811015614aef57835160058110614adb57fe5b835260209384019390920191600101614ac7565b509095945050505050565b60006060820160608352808651614b118184614c41565b9150602088019250835b81811015614b3f57614b2e8385516146a6565b602094909401939250600101614b1b565b50508381036020850152614b53818761471d565b9150508281036040840152808451614b6b8184614c41565b9150602086019250835b8181101561471057614b8883855161469c565b602094909401939250600101614b75565b60006020825261184a602083018461471d565b600060408252614bbf604083018561471d565b602083820381850152818551808452828401915082838202850101838801865b83811015614c0d57601f19878403018552614bfb838351614758565b94860194925090850190600101614bdf565b50909998505050505050505050565b600060408252614c2f604083018561471d565b828103602084015261190d818561471d565b90815260200190565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319861682526001600160a01b0380861660208401528085166040840152506080606083015261489e6080830184614758565b60006001600160e01b0319871682526001600160a01b038616602083015260a06040830152614cf060a083018661471d565b8281036060840152614d02818661471d565b8381036080850152614d148186614758565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b038516602083015260806040830152614d536080830185614758565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b03198516825260606020830152614db2606083018561471d565b828103604084015261489e81856146c7565b60006020825261184a6020830184614758565b600060808252614dea6080830187614758565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b6060810160048510614e2357fe5b938152602081019290925260409091015290565b6060810160088510614e2357fe5b6020810160058310614e5357fe5b91905290565b600060808252614e6c6080830187614758565b602083820381850152818751808452828401915082838202850101838a01865b83811015614eba57601f19878403018552614ea88383516147a7565b94860194925090850190600101614e8c565b50508681036040880152614ece818a61471d565b94505050505082810360608401526149d081856146c7565b60a08101614ef48286614784565b8360608301528215156080830152949350505050565b60006020825261184a60208301846147a7565b600060408252614f3060408301856147a7565b90506001600160a01b03831660208301529392505050565b600060408252614f5b60408301856147a7565b828103602084015261190d8185614758565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715614f9a57600080fd5b604052919050565b600067ffffffffffffffff821115614fb8578081fd5b5060209081020190565b600067ffffffffffffffff821115614fd8578081fd5b50601f01601f191660200190565b60005b83811015615001578181015183820152602001614fe9565b83811115615010576000848401525b50505050565b6001600160a01b038116811461075457600080fd5b6001600160e01b03198116811461075457600080fdfea365627a7a7231582042d7fae961b1460c70c7ec8ff1688f8680c3323368dee844634a86b8a2f15fdb6c6578706572696d656e74616cf564736f6c63430005110040"
}
}
},
"compiler": {
"name": "solc",
"version": "0.5.17+commit.d19bba13",
"settings": {
"optimizer": {
"enabled": true,
"runs": 5000,
"details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true }
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap"
]
}
},
"evmVersion": "istanbul"
}
},
"chains": {}
}