UNPKG

zic-evm-sdk

Version:
1,191 lines 90 kB
{
    "_format": "hh-sol-artifact-1",
    "contractName": "ZebecCard",
    "sourceName": "contracts/ZebecCard.sol",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "AddressEmptyCode",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "AddressInsufficientBalance",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "implementation",
                    "type": "address"
                }
            ],
            "name": "ERC1967InvalidImplementation",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ERC1967NonPayable",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "FailedInnerCall",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InvalidInitialization",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "requiredBalance",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "currentBalance",
                    "type": "uint256"
                }
            ],
            "name": "NotEnoughBalance",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NotInitializing",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "OwnableInvalidOwner",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "OwnableUnauthorizedAccount",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                }
            ],
            "name": "SafeERC20FailedOperation",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "UUPSUnauthorizedCallContext",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "slot",
                    "type": "bytes32"
                }
            ],
            "name": "UUPSUnsupportedProxiableUUID",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "cardType",
                    "type": "string"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "userEmail",
                    "type": "string"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "purchasedAt",
                    "type": "uint256"
                }
            ],
            "name": "CardPurchased",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Deposited",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint64",
                    "name": "version",
                    "type": "uint64"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "srcToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "spentAmount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "returnAmount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "feeAmount",
                    "type": "uint256"
                }
            ],
            "name": "Swapped",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "implementation",
                    "type": "address"
                }
            ],
            "name": "Upgraded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "withdrawnAmount",
                    "type": "uint256"
                }
            ],
            "name": "WithdrawYield",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "withdrawnAmount",
                    "type": "uint256"
                }
            ],
            "name": "Withdrawn",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "UPGRADE_INTERFACE_VERSION",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "aavePool",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "string",
                    "name": "cardType",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "userEmail",
                    "type": "string"
                }
            ],
            "name": "buyCard",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "string",
                    "name": "cardType",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "userEmail",
                    "type": "string"
                }
            ],
            "name": "buyCardDirect",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "cardBalances",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "cardConfig",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "nativeFee",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "nonNativeFee",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "revenueFee",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "counter",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "cardVault",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "revenueVault",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "commissionVault",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "usdcAddress",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "minCardAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "maxCardAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "dailyCardBuyLimit",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "cardPurchases",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "unixInRecord",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "totalCardBoughtPerDay",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "depositUsdc",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "feeTiers",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "minAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "fee",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "generateYield",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                }
            ],
            "name": "getCustomTokenFee",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "customizedFee",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "getFee",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getFeeTiers",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "minAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "fee",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct ZebecCard.FeeTier[]",
                    "name": "",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "nativeFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonNativeFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "revenueFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "counter",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "cardVault",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "revenueVault",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "commissionVault",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "usdcAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minCardAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxCardAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "dailyCardBuyLimit",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct ZebecCard.CardConfig",
                    "name": "card_config",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "minAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "fee",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct ZebecCard.FeeTier[]",
                    "name": "fee_tiers",
                    "type": "tuple[]"
                },
                {
                    "internalType": "address",
                    "name": "inch_router",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "weth",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "zbc_token",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "aave_pool",
                    "type": "address"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "oneInchRouter",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "proxiableUUID",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "cardVault",
                    "type": "address"
                }
            ],
            "name": "setCardVault",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "commissionVault",
                    "type": "address"
                }
            ],
            "name": "setComissionVault",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "customizedFee",
                    "type": "uint256"
                }
            ],
            "name": "setCustomTokenFee",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "dailyCardBuyLimit",
                    "type": "uint256"
                }
            ],
            "name": "setDailyCardBuyLimit",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "minAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "fee",
                    "type": "uint256"
                }
            ],
            "name": "setFee",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "minAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "fee",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct ZebecCard.FeeTier[]",
                    "name": "newTiers",
                    "type": "tuple[]"
                }
            ],
            "name": "setFeeArray",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "maxAmount",
                    "type": "uint256"
                }
            ],
            "name": "setMaxCardAmount",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "minAmount",
                    "type": "uint256"
                }
            ],
            "name": "setMinCardAmount",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "nativeFee",
                    "type": "uint256"
                }
            ],
            "name": "setNativeFee",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "nonNativeFee",
                    "type": "uint256"
                }
            ],
            "name": "setNonNativeFee",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "revenueFee",
                    "type": "uint256"
                }
            ],
            "name": "setRevenueFee",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "revenueVault",
                    "type": "address"
                }
            ],
            "name": "setRevenueVault",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "usdcAddress",
                    "type": "address"
                }
            ],
            "name": "setUsdcAddress",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IAggregationExecutor",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "contract IERC20",
                            "name": "srcToken",
                            "type": "address"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "dstToken",
                            "type": "address"
                        },
                        {
                            "internalType": "address payable",
                            "name": "srcReceiver",
                            "type": "address"
                        },
                        {
                            "internalType": "address payable",
                            "name": "dstReceiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minReturnAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "flags",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IAggregationRouterV6.SwapDescription",
                    "name": "desc",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "routeData",
                    "type": "bytes"
                },
                {
                    "internalType": "string",
                    "name": "cardType",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "userEmail",
                    "type": "string"
                }
            ],
            "name": "swapAndBuy",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IAggregationExecutor",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "contract IERC20",
                            "name": "srcToken",
                            "type": "address"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "dstToken",
                            "type": "address"
                        },
                        {
                            "internalType": "address payable",
                            "name": "srcReceiver",
                            "type": "address"
                        },
                        {
                            "internalType": "address payable",
                            "name": "dstReceiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minReturnAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "flags",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IAggregationRouterV6.SwapDescription",
                    "name": "desc",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "routeData",
                    "type": "bytes"
                }
            ],
            "name": "swapAndDeposit",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newImplementation",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "upgradeToAndCall",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "wEth",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdrawYield",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "zebecToken",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "bytecode": "0x60a0806040523461002a5730608052613459908161003082396080518181816114cd01526115870152f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c806314435445146125f6578063145096d5146121b5578063166dbb73146120815780631d4247ab14612042578063230ed44a14611ff65780632357928e14611ea45780632661572414611add5780632e1a7d4d14611a1f57806337cf533114611999578063458e551e146117f557806348455ff0146117d25780634d68e925146117935780634f1ef2861461154757806352d1902d146114b25780635b65b9ab1461139c5780636ca035d31461130e5780636ca75e9514610f1357806371036a4914610cff578063715018a614610c835780638da5cb5b14610c3d578063a03e4bc314610c16578063a53ebd8a14610a30578063a5b7ac7e146109ee578063ab31978f14610593578063ac3af2081461056c578063ad3cb1cc146104e1578063b0d097de146104be578063b573dca714610497578063b91a1e8f14610475578063bea9c43e14610452578063cdec976f14610415578063d38bcdee146103d6578063d895a46b14610397578063df6d921214610370578063e591f2ff1461034d578063e9a4d24f14610258578063f076a84614610220578063f2fde38b146101f35763fcee45f4146101ca57600080fd5b346101f05760203660031901126101f05760206101e8600435612e33565b604051908152f35b80fd5b50346101f05760203660031901126101f05761021d610210612657565b610218612ed0565b612d95565b80f35b50346101f05760203660031901126101f05760406020916001600160a01b03610247612657565b168152601083522054604051908152f35b50346101f057806003193601126101f0576011546102758161266d565b906102836040519283612635565b8082526011835260209182810191847f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68845b83831061030d57505050506040519280840191818552518092526040840192945b8281106102e35784840385f35b855180518552808301518584015260409081015190850152948101946060909301926001016102d6565b60038760019260409a9997989a5161032481612619565b8554815284860154838201526002860154604082015281520192019201919096949395966102b5565b50346101f05760203660031901126101f057610367612ed0565b60043560015580f35b50346101f057806003193601126101f05760206001600160a01b03600c5416604051908152f35b50346101f05760203660031901126101f0576001600160a01b036103b9612657565b6103c1612ed0565b166001600160a01b0319600454161760045580f35b50346101f05760203660031901126101f0576001600160a01b036103f8612657565b610400612ed0565b166001600160a01b0319600754161760075580f35b50346101f05760403660031901126101f0576001600160a01b03610437612657565b61043f612ed0565b1681526012602052602435604082205580f35b50346101f05760203660031901126101f05761046c612ed0565b600435600a5580f35b50346101f05760203660031901126101f05761048f612ed0565b600435815580f35b50346101f057806003193601126101f05760206001600160a01b03600d5416604051908152f35b50346101f05760203660031901126101f0576104d8612ed0565b60043560095580f35b50346101f057806003193601126101f057604051604081019080821067ffffffffffffffff8311176105565761055291604052600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061289d565b0390f35b634e487b7160e01b600052604160045260246000fd5b50346101f057806003193601126101f05760206001600160a01b03600b5416604051908152f35b50346101f0576020806003193601126109ea57600435906105b5331515612a30565b6105c082151561299a565b6001600160a01b039182600e541683600754166040519182917f35ea6a7500000000000000000000000000000000000000000000000000000000835260048301528160246101e09485935afa908115610864578592879261086f575b50506101000151163385526010835261064361063c836040882054612f86565b91906129e5565b338087526010855260408088209290925590516323b872dd60e01b8152600481019190915230602482015260448101839052838160648189865af1908115610864578691610847575b501561080357600e5460405163095ea7b360e01b81529085166001600160a01b03166004820152602481018390529190839083908188816044810103925af19182156107f85783926106e59187916107cb575b50612d19565b606484600e541694600754168660405196879485937f69328dec000000000000000000000000000000000000000000000000000000008552600485015260248401523060448401525af19182156107c057839261076c575b507ff09b3678dd1b265d3e2d9f681481c92d1cdd81b6e19fa43651707dedf99263a8906040519283523392a280f35b9080925081813d83116107b9575b6107848183612635565b810103126107b45751907ff09b3678dd1b265d3e2d9f681481c92d1cdd81b6e19fa43651707dedf99263a861073d565b600080fd5b503d61077a565b6040513d85823e3d90fd5b6107eb9150843d86116107f1575b6107e38183612635565b810190612b11565b386106df565b503d6107d9565b6040513d87823e3d90fd5b6064836040519062461bcd60e51b82526004820152601660248201527f61546f6b656e207472616e73666572206661696c6564000000000000000000006044820152fd5b61085e9150843d86116107f1576107e38183612635565b3861068c565b6040513d88823e3d90fd5b8193508092503d83116109e3575b6108878183612635565b8101038181126109db576040519182019067ffffffffffffffff908383108284111761055657869083604052126109df57610200830190811182821017610556576040528251815281526108dc848301612d64565b848201526108ec60408301612d64565b60408201526108fd60608301612d64565b606082015261090e60808301612d64565b608082015261091f60a08301612d64565b60a082015260c082015164ffffffffff811681036109db5760c082015260e08201519061ffff821682036109db5785926101009260e083015282610964818301612d81565b90830152610120610976818301612d81565b90830152610140610988818301612d81565b9083015261016061099a818301612d81565b908301526101806109ac818301612d64565b908301526101a06109be818301612d64565b908301526109d06101c0809201612d64565b90820152903861061c565b8680fd5b8780fd5b503d61087d565b5080fd5b50346101f05760203660031901126101f057604080916001600160a01b03610a14612657565b168152600f602052206001815491015482519182526020820152f35b50346101f057610a3f36612853565b916001600160a01b03806007541690610a59331515612a30565b60085483101580610c0a575b610a6e90612c41565b338652602060108152604087205490848210610bec5792610ba492610b9a610ae893600f8897610af460408e610aed8c6127107f7747419eb85d2a64ce5c3fd1bf01b54b47cdcfb621ac43741f8460d4f3ed40cb9f610acf610ad591612e33565b836128dd565b0497610ae18983612f9f565b9d906129e5565b612f9f565b93906129e5565b338152601084522055610b08600354612c8c565b6003558c89610b164261300a565b919091338552868652610b2c604086205461300a565b93919091149384610be2575b505082610bd8575b505015610bc1575060016040610b6c92338152858552610b658d848484200154612f86565b94906129e5565b3381528585522001555b338d5252610b8f600160408d200154600a541015612c9b565b826005541684612fb8565b6004541690612fb8565b60035493610bbb6040519283923396429285612ce6565b0390a380f35b906040600191338152858552204281550155610b76565b1490503880610b40565b1492503880610b38565b6044858360405191634787a10360e11b835260048301526024820152fd5b50600954831115610a65565b50346101f057806003193601126101f05760206001600160a01b03600e5416604051908152f35b50346101f057806003193601126101f05760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b50346101f057806003193601126101f057610c9c612ed0565b60006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b031982169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101f057610d0e36612853565b916001600160a01b03806007541690610d28331515612a30565b60085483101580610f07575b610d3d90612c41565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526020908181602481875afa908115610efc578891610ecf575b50848110610eb157508392610ba492610e7a610de393600f612710610dd0610dca7f7747419eb85d2a64ce5c3fd1bf01b54b47cdcfb621ac43741f8460d4f3ed40cb9b612e33565b8a6128dd565b0491610ddc838a612f9f565b97906129e5565b610dee600354612c8c565b6003558c89610dfc4261300a565b919091338552868652610e12604086205461300a565b93919091149384610ea7575b505082610e9d575b505015610e86575060016040610e4b92338152858552610b658d848484200154612f86565b3381528585522001555b338d5252610e6e600160408d200154600a541015612c9b565b82600554163385612f33565b60045416903390612f33565b906040600191338152858552204281550155610e55565b1490503880610e26565b1492503880610e1e565b8460449160405191634787a10360e11b835260048301526024820152fd5b90508181813d8311610ef5575b610ee68183612635565b810103126107b4575138610d82565b503d610edc565b6040513d8a823e3d90fd5b50600954831115610d34565b506101203660031901126101f057610f29612657565b610f3236612762565b67ffffffffffffffff906101043582811161130a57610f5590369060040161280c565b906001600160a01b03926020610f75858285015116866007541614612a7b565b610f86856060850151163014612ac6565b86858451169686600c541688148015918261126d575b610fc697604091888b600b54169184519b8c94859384936307ed237960e01b855260048501612b8a565b039134905af19586156107c05789908498859861122e575b50906080610ffe92610ff18b1515612bf6565b0196610aed898951612f9f565b82611104575b505050610bbb9383611088936010937fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9a99989650906110f7575b156110b85761106961107861271061105c610aed94545b8c6128dd565b04809c610b65828d612f9f565b60075460055482169116612fb8565b338d5283835260408d2054612f86565b338b5252604089205551946040519384933397859094939260609260808301968352602083015260408201520152565b8a90526012815260408b205480156110df5761106961107861271061105c610aed94611056565b50610aed61106961107861271061105c600154611056565b5089600d54168b1461103f565b841561115957509361108893601093611147610bbb98947fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9c9b9a983390612fb8565b9350938b919597989950829650611004565b9293945050604051858101928184109084111761055657828c939284809493819460405252335af1611189613246565b50156111c4576010610bbb938a7fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9897969461108894611147565b6084836040519062461bcd60e51b82526004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201527f4641494c454400000000000000000000000000000000000000000000000000006064820152fd5b60809950610ffe9291985061125a9060403d604011611266575b6112528183612635565b810190612b74565b99909998919250610fde565b503d611248565b6112c29785608089016112868d82519030903390612f33565b8c8c600b541691519188604051809e8195829463095ea7b360e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19182156107f8576112e4604093610fc69b88916112ed575b50612b29565b91509750610f9c565b6113049150893d8b116107f1576107e38183612635565b386112de565b8480fd5b50346101f05760203660031901126101f057611328612657565b906001600160a01b038080600c54169316928314801561138f575b1561135657506020915054604051908152f35b60075416820361136957602091506101e8565b908152601260205260409020548015611384576020906101e8565b5060206001546101e8565b5080600d54168314611343565b50346101f05760603660031901126101f0576044356004356113bc612ed0565b8291835b6011548110156114aa576113d381612711565b505483101580611493575b6113ea576001016113c0565b819293506113f9600291612711565b50015560015b15611408578280f35b6040519161141583612619565b8252602435602083015260408201526011546801000000000000000081101561147f578060016114489201601155612711565b61146c57815181556020820151600182015560409091015160029091015538808280f35b602483634e487b7160e01b815280600452fd5b602483634e487b7160e01b81526041600452fd5b50600161149f82612711565b5001548311156113de565b5090916113ff565b50346101f057806003193601126101f0576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361151d5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60046040517fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b5060403660031901126101f05761155c612657565b60243567ffffffffffffffff811161178f5761157c90369060040161280c565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016803014908115611761575b5061151d576115bf612ed0565b8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa859181611729575b506116165760248460405190634c9c8ce360e01b82526004820152fd5b9284937f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc908181036116f85750823b156116e05780546001600160a01b0319168217905560405184917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a28351156116ab5750808360206116a795519101845af46116a1613246565b91613390565b5080f35b92505050346116b8575080f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b60248260405190634c9c8ce360e01b82526004820152fd5b602490604051907faa1d49a40000000000000000000000000000000000000000000000000000000082526004820152fd5b9091506020813d602011611759575b8161174560209383612635565b81010312611755575190386115f9565b8580fd5b3d9150611738565b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415386115b2565b8280fd5b50346101f05760203660031901126101f0576001600160a01b036117b5612657565b6117bd612ed0565b166001600160a01b0319600554161760055580f35b50346101f05760203660031901126101f0576117ec612ed0565b60043560085580f35b50346101f0576020806003193601126109ea576004356001600160a01b03918260075416611824331515612a30565b61182f83151561299a565b33855260108252604085205483811061197b57828480949361185861063c8a9861189c96612f9f565b33885260108452604088205587600e54168760405180968195829463095ea7b360e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115611970576118b9928592611953575b5050612d19565b82600e54169260075416833b1561178f576084908360405195869485937f617ba037000000000000000000000000000000000000000000000000000000008552600485015260248401523360448401528160648401525af180156119485761191f575080f35b67ffffffffffffffff81116119345760405280f35b602482634e487b7160e01b81526041600452fd5b6040513d84823e3d90fd5b6119699250803d106107f1576107e38183612635565b38806118b2565b6040513d86823e3d90fd5b8360449160405191634787a10360e11b835260048301526024820152fd5b50346101f057806003193601126101f05761016090546001546002546003546001600160a01b03806004541690806005541681600654169160075416926008549460095496600a54986040519a8b5260208b015260408a01526060890152608088015260a087015260c086015260e0850152610100840152610120830152610140820152f35b50346101f05760203660031901126101f0576004356001600160a01b0360075416611a4b82151561299a565b611a56331515612a30565b33835260106020526040832054828110611abf57611a9091611a7c61063c858094612f9f565b338652601060205260408620553390612fb8565b6040519081527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d560203392a280f35b8260449160405191634787a10360e11b835260048301526024820152fd5b506101603660031901126101f057611af3612657565b611afc36612762565b9082610104359167ffffffffffffffff9283811161178f57611b2290369060040161280c565b9061012435848111611ea057611b3c90369060040161280c565b9361014435908111611ea057611b5690369060040161280c565b94611b62331515612a30565b6001600160a01b03602093611b81828685015116836007541614612a7b565b611b92338360608601511614612ac6565b818351169382600c541685149081159081611e23575b611bd2936040918787600b5416918451978894859384936307ed237960e01b855260048501612b8a565b039134905af1918215610efc5788938993611dfc575b50611bf4841515612bf6565b90611def575b15611dcd578654955b612710611c118198856128dd565b04978895611c1f8786612f9f565b99611c2b8b95926129e5565b6008548510159b7fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be98610e7a611d7f977f7747419eb85d2a64ce5c3fd1bf01b54b47cdcfb621ac43741f8460d4f3ed40cb9f6001604060809a600f611d579a611cda9a86610e6e97611dc1575b611ca190612c41565b611cb58a600754169b8b600554168d612fb8565b611cc7611cc189612e33565b896128dd565b0496611cd38882612f9f565b9c906129e5565b611ce5600354612c8c565b600355611cf14261300a565b919091338752858552611d068888205461300a565b93919091149384611db7575b505082611dad575b505015611d995761063c611d3991338652848452878787200154612f86565b3384528282528585852001555b33835252200154600a541015612c9b565b0151946040519384933397859094939260609260808301968352602083015260408201520152565b0390a360035493610bbb6040519283923396429285612ce6565b338452828252858585204281550155611d46565b1490503880611d1a565b1492503880611d12565b50600954881115611c98565b8487526012865260408720548015611de55795611c03565b5060015495611c03565b5082600d54168514611bfa565b909250611e1991935060403d604011611266576112528183612635565b9290929138611be8565b600b54608087015160405163095ea7b360e01b81529187166001600160a01b0316600483015260248201529388856044818d8c5af1918215611e9557611e75604093611bd2978d91611e7e5750612b29565b91509350611ba8565b61130491508c8d3d106107f1576107e38183612635565b6040513d8c823e3d90fd5b8380fd5b50346101f0576020806003193601126109ea57600435906001600160a01b03600754166040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201528281604481855afa80156107f85784918691611fc5575b5010611f815790611f51837f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c493611f4882151561299a565b30903390612f33565b33845260108152611f6961063c846040872054612f86565b3385526010825260408520556040519283523392a280f35b6064826040519062461bcd60e51b82526004820152601660248201527f496e73756666696369656e7420616c6c6f77616e6365000000000000000000006044820152fd5b809250848092503d8311611fef575b611fde8183612635565b8101031261130a5783905138611f10565b503d611fd4565b50346101f05760203660031901126101f057600435906011548210156101f057606061202183612711565b50805490600260018201549101549060405192835260208301526040820152f35b50346101f05760203660031901126101f0576001600160a01b03612064612657565b61206c612ed0565b166001600160a01b0319600654161760065580f35b50346101f0576020806003193601126109ea5760043567ffffffffffffffff811161178f576120b4903690600401612685565b906120bd612ed0565b6011548360115580612141575b5060208251926120d984612906565b0190601184527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6884925b84841061210e578580f35b60038382612135600194518690604060029180518455602081015160018501550151910155565b01920193019290612103565b600390806003029060038204036121a157601185527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68908101905b81811061218a5750506120ca565b80868492558660018201558660028201550161217c565b602485634e487b7160e01b81526011600452fd5b50346101f057366003190161020081126109ea576101608091126109ea5760405190810181811067ffffffffffffffff82111761147f5760405260043581526024356020820152604435604082015260643560608201526084356001600160a01b038116810361178f57608082015260a4356001600160a01b038116810361178f5760a082015260c4356001600160a01b038116810361178f5760c082015260e4356001600160a01b038116810361178f5760e08201526101043561010082015261012435610120820152610144356101408201526101643567ffffffffffffffff811161178f576122ab903690600401612685565b61018435916001600160a01b0383168303611ea0576101a435926001600160a01b038416840361130a576101c435936001600160a01b0385168503611755576101e435906001600160a01b03821682036109db577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549567ffffffffffffffff871615806125e8575b600167ffffffffffffffff89161490816125de575b1590816125d5575b506125ab576001600160a01b03809492818094600167ffffffffffffffff198c16177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560ff8b60401c161561256c575b88518c556020890151600155604089015160025560608901516003556101408260808b015116996001600160a01b03199a8b60045416176004558360a0820151168b60055416176005558360c0820151168b60065416176006558360e0820151168b60075416176007556101008101516008556101208101516009550151600a5561242b613276565b612433613276565b61243b613276565b61244433612d95565b1687600b541617600b551685600c541617600c551683600d541617600d551690600e541617600e55602081519161247a83612906565b01601184527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6884915b838310612538578560ff8660401c16156124ba5780f35b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6003602082612560600194518690604060029180518455602081015160018501550151910155565b019201920191906124a3565b68ffffffffffffffffff198b1668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556123a2565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b90501538612351565b303b159150612349565b5060ff8760401c1615612334565b50346101f05760203660031901126101f057612610612ed0565b60043560025580f35b6060810190811067ffffffffffffffff82111761055657604052565b90601f8019910116810190811067ffffffffffffffff82111761055657604052565b600435906001600160a01b03821682036107b457565b67ffffffffffffffff81116105565760051b60200190565b81601f820112156107b457803590602061269e8361266d565b9360406126ae6040519687612635565b84865282860191836060809702860101948186116107b4578401925b8584106126db575050505050505090565b86848303126107b45784879184516126f281612619565b86358152828701358382015285870135868201528152019301926126ca565b60115481101561274c576003906011600052027f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680190600090565b634e487b7160e01b600052603260045260246000fd5b60e09060231901126107b4576040519060e0820182811067ffffffffffffffff82111761055657604052816001600160a01b0360243581811681036107b457825260443581811681036107b457602083015260643581811681036107b457604083015260843590811681036107b457606082015260a435608082015260c43560a082015260c060e435910152565b67ffffffffffffffff811161055657601f01601f191660200190565b81601f820112156107b457803590612823826127f0565b926128316040519485612635565b828452602083830101116107b457816000926020809301838601378301015290565b60606003198201126107b4576004359167ffffffffffffffff6024358181116107b457836128839160040161280c565b926044359182116107b45761289a9160040161280c565b90565b919082519283825260005b8481106128c9575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016128a8565b818102929181159184041417156128f057565b634e487b7160e01b600052601160045260246000fd5b6801000000000000000081116105565760115481601155808210612928575050565b600391816003029160038304036128f057806003029060038204036128f05760009060116000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6892830192015b8281106129835750505050565b808285925582600182015582600282015501612976565b156129a157565b606460405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420616d6f756e740000000000000000000000000000000000006044820152fd5b156129ec57565b606460405162461bcd60e51b815260206004820152601460248201527f41726974686d65746963204f766572666c6f77210000000000000000000000006044820152fd5b15612a3757565b606460405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152fd5b15612a8257565b606460405162461bcd60e51b815260206004820152601960248201527f496e76616c69642064657374696e6174696f6e20746f6b656e000000000000006044820152fd5b15612acd57565b606460405162461bcd60e51b815260206004820152601c60248201527f496e76616c69642064657374696e6174696f6e207265636569766572000000006044820152fd5b908160209103126107b4575180151581036107b45790565b15612b3057565b606460405162461bcd60e51b815260206004820152600f60248201527f417070726f76616c206661696c656400000000000000000000000000000000006044820152fd5b91908260409103126107b4576020825192015190565b60c061289a9493610120936001600160a01b0380911684528082511660208501528060208301511660408501528060408301511660608501526060820151166080840152608081015160a084015260a081015182840152015160e082015281610100820152019061289d565b15612bfd57565b606460405162461bcd60e51b815260206004820152601260248201527f537761704f6e31696e6368206661696c656400000000000000000000000000006044820152fd5b15612c4857565b606460405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206e6f742077697468696e20627579696e672072616e676521006044820152fd5b60001981146128f05760010190565b15612ca257565b606460405162461bcd60e51b815260206004820152601e60248201527f4461696c79204361726420427579204c696d69742045786365656465642100006044820152fd5b949392612d06606093612d1493885260806020890152608088019061289d565b90868203604088015261289d565b930152565b15612d2057565b606460405162461bcd60e51b815260206004820152601860248201527f61617665506f6f6c20417070726f76616c206661696c656400000000000000006044820152fd5b51906fffffffffffffffffffffffffffffffff821682036107b457565b51906001600160a01b03821682036107b457565b6001600160a01b03809116908115612e02577f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805490836001600160a01b03198316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b6011549060005b828110612e8557606460405162461bcd60e51b815260206004820152601360248201527f416d6f756e74206f7574206f662072616e6765000000000000000000000000006044820152fd5b612e8e81612711565b505482101580612eb9575b612ea557600101612e3a565b60029250612eb39150612711565b50015490565b506001612ec582612711565b500154821115612e99565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612f0357565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b6040516323b872dd60e01b60208201526001600160a01b0392831660248201529290911660448301526064820192909252612f8491612f7f82608481015b03601f198101845283612635565b6132cf565b565b91908201918210612f975760019190565b600091508190565b9190828111612faf576001920390565b50600091508190565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0390921660248301526044820192909252612f8491612f7f8260648101612f71565b62015180900462010bd980820190811291600092838212908015821691151617613232576226496501908262253d8c8312911290801582169115161761321e578060021b600491828205810361320b5762023ab18092059182810290810583036131f8576003810190856003831291129080158216911516176131f8579083613094920590613377565b60018101600181128583129080158216911516176131f857610fa090808202918205036131f85762164b099005906105b582810290810583036131e55790846130de920590613377565b91601f83019285601f851291129080158216911516176131f85782605002926050840581036131e55761098f8094059384810290810585036131d257906050613128920590613377565b94600b8405936002810190826002831291129080158216911516176131bf5784600c0290600c820586036131ac579061316091613377565b9460301983019283136001166131995782606402926064840503613199575050613193929161318e9161335b565b61335b565b91909192565b906011602492634e487b7160e01b835252fd5b602483601189634e487b7160e01b835252fd5b602482601188634e487b7160e01b835252fd5b602487601188634e487b7160e01b835252fd5b602486601187634e487b7160e01b835252fd5b602485601186634e487b7160e01b835252fd5b602484601185634e487b7160e01b835252fd5b602482634e487b7160e01b81526011600452fd5b602483634e487b7160e01b81526011600452fd5b3d15613271573d90613257826127f0565b916132656040519384612635565b82523d6000602084013e565b606090565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156132a557565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b6000806001600160a01b036132f993169360208151910182865af16132f2613246565b9083613390565b8051908115159182613340575b505061330f5750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b6133539250602080918301019101612b11565b153880613306565b919091600083820193841291129080158216911516176128f057565b818103929160001380158285131691841216176128f057565b906133cf57508051156133a557805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b8151158061341a575b6133e0575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b156133d856fea2646970667358221220c389c2b71f48bd2349e128d9f477837245bdf5a81d3811db18bdb6d96548aa1664736f6c63430008180033",
    "deployedBytecode": "0x6080604052600436101561001257600080fd5b6000803560e01c806314435445146125f6578063145096d5146121b5578063166dbb73146120815780631d4247ab14612042578063230ed44a14611ff65780632357928e14611ea45780632661572414611add5780632e1a7d4d14611a1f57806337cf533114611999578063458e551e146117f557806348455ff0146117d25780634d68e925146117935780634f1ef2861461154757806352d1902d146114b25780635b65b9ab1461139c5780636ca035d31461130e5780636ca75e9514610f1357806371036a4914610cff578063715018a614610c835780638da5cb5b14610c3d578063a03e4bc314610c16578063a53ebd8a14610a30578063a5b7ac7e146109ee578063ab31978f14610593578063ac3af2081461056c578063ad3cb1cc146104e1578063b0d097de146104be578063b573dca714610497578063b91a1e8f14610475578063bea9c43e14610452578063cdec976f14610415578063d38bcdee146103d6578063d895a46b14610397578063df6d921214610370578063e591f2ff1461034d578063e9a4d24f14610258578063f076a84614610220578063f2fde38b146101f35763fcee45f4146101ca57600080fd5b346101f05760203660031901126101f05760206101e8600435612e33565b604051908152f35b80fd5b50346101f05760203660031901126101f05761021d610210612657565b610218612ed0565b612d95565b80f35b50346101f05760203660031901126101f05760406020916001600160a01b03610247612657565b168152601083522054604051908152f35b50346101f057806003193601126101f0576011546102758161266d565b906102836040519283612635565b8082526011835260209182810191847f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68845b83831061030d57505050506040519280840191818552518092526040840192945b8281106102e35784840385f35b855180518552808301518584015260409081015190850152948101946060909301926001016102d6565b60038760019260409a9997989a5161032481612619565b8554815284860154838201526002860154604082015281520192019201919096949395966102b5565b50346101f05760203660031901126101f057610367612ed0565b60043560015580f35b50346101f057806003193601126101f05760206001600160a01b03600c5416604051908152f35b50346101f05760203660031901126101f0576001600160a01b036103b9612657565b6103c1612ed0565b166001600160a01b0319600454161760045580f35b50346101f05760203660031901126101f0576001600160a01b036103f8612657565b610400612ed0565b166001600160a01b0319600754161760075580f35b50346101f05760403660031901126101f0576001600160a01b03610437612657565b61043f612ed0565b1681526012602052602435604082205580f35b50346101f05760203660031901126101f05761046c612ed0565b600435600a5580f35b50346101f05760203660031901126101f05761048f612ed0565b600435815580f35b50346101f057806003193601126101f05760206001600160a01b03600d5416604051908152f35b50346101f05760203660031901126101f0576104d8612ed0565b60043560095580f35b50346101f057806003193601126101f057604051604081019080821067ffffffffffffffff8311176105565761055291604052600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061289d565b0390f35b634e487b7160e01b600052604160045260246000fd5b50346101f057806003193601126101f05760206001600160a01b03600b5416604051908152f35b50346101f0576020806003193601126109ea57600435906105b5331515612a30565b6105c082151561299a565b6001600160a01b039182600e541683600754166040519182917f35ea6a7500000000000000000000000000000000000000000000000000000000835260048301528160246101e09485935afa908115610864578592879261086f575b50506101000151163385526010835261064361063c836040882054612f86565b91906129e5565b338087526010855260408088209290925590516323b872dd60e01b8152600481019190915230602482015260448101839052838160648189865af1908115610864578691610847575b501561080357600e5460405163095ea7b360e01b81529085166001600160a01b03166004820152602481018390529190839083908188816044810103925af19182156107f85783926106e59187916107cb575b50612d19565b606484600e541694600754168660405196879485937f69328dec000000000000000000000000000000000000000000000000000000008552600485015260248401523060448401525af19182156107c057839261076c575b507ff09b3678dd1b265d3e2d9f681481c92d1cdd81b6e19fa43651707dedf99263a8906040519283523392a280f35b9080925081813d83116107b9575b6107848183612635565b810103126107b45751907ff09b3678dd1b265d3e2d9f681481c92d1cdd81b6e19fa43651707dedf99263a861073d565b600080fd5b503d61077a565b6040513d85823e3d90fd5b6107eb9150843d86116107f1575b6107e38183612635565b810190612b11565b386106df565b503d6107d9565b6040513d87823e3d90fd5b6064836040519062461bcd60e51b82526004820152601660248201527f61546f6b656e207472616e73666572206661696c6564000000000000000000006044820152fd5b61085e9150843d86116107f1576107e38183612635565b3861068c565b6040513d88823e3d90fd5b8193508092503d83116109e3575b6108878183612635565b8101038181126109db576040519182019067ffffffffffffffff908383108284111761055657869083604052126109df57610200830190811182821017610556576040528251815281526108dc848301612d64565b848201526108ec60408301612d64565b60408201526108fd60608301612d64565b606082015261090e60808301612d64565b608082015261091f60a08301612d64565b60a082015260c082015164ffffffffff811681036109db5760c082015260e08201519061ffff821682036109db5785926101009260e083015282610964818301612d81565b90830152610120610976818301612d81565b90830152610140610988818301612d81565b9083015261016061099a818301612d81565b908301526101806109ac818301612d64565b908301526101a06109be818301612d64565b908301526109d06101c0809201612d64565b90820152903861061c565b8680fd5b8780fd5b503d61087d565b5080fd5b50346101f05760203660031901126101f057604080916001600160a01b03610a14612657565b168152600f602052206001815491015482519182526020820152f35b50346101f057610a3f36612853565b916001600160a01b03806007541690610a59331515612a30565b60085483101580610c0a575b610a6e90612c41565b338652602060108152604087205490848210610bec5792610ba492610b9a610ae893600f8897610af460408e610aed8c6127107f7747419eb85d2a64ce5c3fd1bf01b54b47cdcfb621ac43741f8460d4f3ed40cb9f610acf610ad591612e33565b836128dd565b0497610ae18983612f9f565b9d906129e5565b612f9f565b93906129e5565b338152601084522055610b08600354612c8c565b6003558c89610b164261300a565b919091338552868652610b2c604086205461300a565b93919091149384610be2575b505082610bd8575b505015610bc1575060016040610b6c92338152858552610b658d848484200154612f86565b94906129e5565b3381528585522001555b338d5252610b8f600160408d200154600a541015612c9b565b826005541684612fb8565b6004541690612fb8565b60035493610bbb6040519283923396429285612ce6565b0390a380f35b906040600191338152858552204281550155610b76565b1490503880610b40565b1492503880610b38565b6044858360405191634787a10360e11b835260048301526024820152fd5b50600954831115610a65565b50346101f057806003193601126101f05760206001600160a01b03600e5416604051908152f35b50346101f057806003193601126101f05760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b50346101f057806003193601126101f057610c9c612ed0565b60006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b031982169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101f057610d0e36612853565b916001600160a01b03806007541690610d28331515612a30565b60085483101580610f07575b610d3d90612c41565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526020908181602481875afa908115610efc578891610ecf575b50848110610eb157508392610ba492610e7a610de393600f612710610dd0610dca7f7747419eb85d2a64ce5c3fd1bf01b54b47cdcfb621ac43741f8460d4f3ed40cb9b612e33565b8a6128dd565b0491610ddc838a612f9f565b97906129e5565b610dee600354612c8c565b6003558c89610dfc4261300a565b919091338552868652610e12604086205461300a565b93919091149384610ea7575b505082610e9d575b505015610e86575060016040610e4b92338152858552610b658d848484200154612f86565b3381528585522001555b338d5252610e6e600160408d200154600a541015612c9b565b82600554163385612f33565b60045416903390612f33565b906040600191338152858552204281550155610e55565b1490503880610e26565b1492503880610e1e565b8460449160405191634787a10360e11b835260048301526024820152fd5b90508181813d8311610ef5575b610ee68183612635565b810103126107b4575138610d82565b503d610edc565b6040513d8a823e3d90fd5b50600954831115610d34565b506101203660031901126101f057610f29612657565b610f3236612762565b67ffffffffffffffff906101043582811161130a57610f5590369060040161280c565b906001600160a01b03926020610f75858285015116866007541614612a7b565b610f86856060850151163014612ac6565b86858451169686600c541688148015918261126d575b610fc697604091888b600b54169184519b8c94859384936307ed237960e01b855260048501612b8a565b039134905af19586156107c05789908498859861122e575b50906080610ffe92610ff18b1515612bf6565b0196610aed898951612f9f565b82611104575b505050610bbb9383611088936010937fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9a99989650906110f7575b156110b85761106961107861271061105c610aed94545b8c6128dd565b04809c610b65828d612f9f565b60075460055482169116612fb8565b338d5283835260408d2054612f86565b338b5252604089205551946040519384933397859094939260609260808301968352602083015260408201520152565b8a90526012815260408b205480156110df5761106961107861271061105c610aed94611056565b50610aed61106961107861271061105c600154611056565b5089600d54168b1461103f565b841561115957509361108893601093611147610bbb98947fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9c9b9a983390612fb8565b9350938b919597989950829650611004565b9293945050604051858101928184109084111761055657828c939284809493819460405252335af1611189613246565b50156111c4576010610bbb938a7fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be9897969461108894611147565b6084836040519062461bcd60e51b82526004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201527f4641494c454400000000000000000000000000000000000000000000000000006064820152fd5b60809950610ffe9291985061125a9060403d604011611266575b6112528183612635565b810190612b74565b99909998919250610fde565b503d611248565b6112c29785608089016112868d82519030903390612f33565b8c8c600b541691519188604051809e8195829463095ea7b360e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19182156107f8576112e4604093610fc69b88916112ed575b50612b29565b91509750610f9c565b6113049150893d8b116107f1576107e38183612635565b386112de565b8480fd5b50346101f05760203660031901126101f057611328612657565b906001600160a01b038080600c54169316928314801561138f575b1561135657506020915054604051908152f35b60075416820361136957602091506101e8565b908152601260205260409020548015611384576020906101e8565b5060206001546101e8565b5080600d54168314611343565b50346101f05760603660031901126101f0576044356004356113bc612ed0565b8291835b6011548110156114aa576113d381612711565b505483101580611493575b6113ea576001016113c0565b819293506113f9600291612711565b50015560015b15611408578280f35b6040519161141583612619565b8252602435602083015260408201526011546801000000000000000081101561147f578060016114489201601155612711565b61146c57815181556020820151600182015560409091015160029091015538808280f35b602483634e487b7160e01b815280600452fd5b602483634e487b7160e01b81526041600452fd5b50600161149f82612711565b5001548311156113de565b5090916113ff565b50346101f057806003193601126101f0576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361151d5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60046040517fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b5060403660031901126101f05761155c612657565b60243567ffffffffffffffff811161178f5761157c90369060040161280c565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016803014908115611761575b5061151d576115bf612ed0565b8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa859181611729575b506116165760248460405190634c9c8ce360e01b82526004820152fd5b9284937f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc908181036116f85750823b156116e05780546001600160a01b0319168217905560405184917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a28351156116ab5750808360206116a795519101845af46116a1613246565b91613390565b5080f35b92505050346116b8575080f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b60248260405190634c9c8ce360e01b82526004820152fd5b602490604051907faa1d49a40000000000000000000000000000000000000000000000000000000082526004820152fd5b9091506020813d602011611759575b8161174560209383612635565b81010312611755575190386115f9565b8580fd5b3d9150611738565b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415386115b2565b8280fd5b50346101f05760203660031901126101f0576001600160a01b036117b5612657565b6117bd612ed0565b166001600160a01b0319600554161760055580f35b50346101f05760203660031901126101f0576117ec612ed0565b60043560085580f35b50346101f0576020806003193601126109ea576004356001600160a01b03918260075416611824331515612a30565b61182f83151561299a565b33855260108252604085205483811061197b57828480949361185861063c8a9861189c96612f9f565b33885260108452604088205587600e54168760405180968195829463095ea7b360e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115611970576118b9928592611953575b5050612d19565b82600e54169260075416833b1561178f576084908360405195869485937f617ba037000000000000000000000000000000000000000000000000000000008552600485015260248401523360448401528160648401525af180156119485761191f575080f35b67ffffffffffffffff81116119345760405280f35b602482634e487b7160e01b81526041600452fd5b6040513d84823e3d90fd5b6119699250803d106107f1576107e38183612635565b38806118b2565b6040513d86823e3d90fd5b8360449160405191634787a10360e11b835260048301526024820152fd5b50346101f057806003193601126101f05761016090546001546002546003546001600160a01b03806004541690806005541681600654169160075416926008549460095496600a54986040519a8b5260208b015260408a01526060890152608088015260a087015260c086015260e0850152610100840152610120830152610140820152f35b50346101f05760203660031901126101f0576004356001600160a01b0360075416611a4b82151561299a565b611a56331515612a30565b33835260106020526040832054828110611abf57611a9091611a7c61063c858094612f9f565b338652601060205260408620553390612fb8565b6040519081527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d560203392a280f35b8260449160405191634787a10360e11b835260048301526024820152fd5b506101603660031901126101f057611af3612657565b611afc36612762565b9082610104359167ffffffffffffffff9283811161178f57611b2290369060040161280c565b9061012435848111611ea057611b3c90369060040161280c565b9361014435908111611ea057611b5690369060040161280c565b94611b62331515612a30565b6001600160a01b03602093611b81828685015116836007541614612a7b565b611b92338360608601511614612ac6565b818351169382600c541685149081159081611e23575b611bd2936040918787600b5416918451978894859384936307ed237960e01b855260048501612b8a565b039134905af1918215610efc5788938993611dfc575b50611bf4841515612bf6565b90611def575b15611dcd578654955b612710611c118198856128dd565b04978895611c1f8786612f9f565b99611c2b8b95926129e5565b6008548510159b7fd8066379a11f110d1eb579110571ce47b1557c623d7ae29f423d92cd6dd953be98610e7a611d7f977f7747419eb85d2a64ce5c3fd1bf01b54b47cdcfb621ac43741f8460d4f3ed40cb9f6001604060809a600f611d579a611cda9a86610e6e97611dc1575b611ca190612c41565b611cb58a600754169b8b600554168d612fb8565b611cc7611cc189612e33565b896128dd565b0496611cd38882612f9f565b9c906129e5565b611ce5600354612c8c565b600355611cf14261300a565b919091338752858552611d068888205461300a565b93919091149384611db7575b505082611dad575b505015611d995761063c611d3991338652848452878787200154612f86565b3384528282528585852001555b33835252200154600a541015612c9b565b0151946040519384933397859094939260609260808301968352602083015260408201520152565b0390a360035493610bbb6040519283923396429285612ce6565b338452828252858585204281550155611d46565b1490503880611d1a565b1492503880611d12565b50600954881115611c98565b8487526012865260408720548015611de55795611c03565b5060015495611c03565b5082600d54168514611bfa565b909250611e1991935060403d604011611266576112528183612635565b9290929138611be8565b600b54608087015160405163095ea7b360e01b81529187166001600160a01b0316600483015260248201529388856044818d8c5af1918215611e9557611e75604093611bd2978d91611e7e5750612b29565b91509350611ba8565b61130491508c8d3d106107f1576107e38183612635565b6040513d8c823e3d90fd5b8380fd5b50346101f0576020806003193601126109ea57600435906001600160a01b03600754166040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201528281604481855afa80156107f85784918691611fc5575b5010611f815790611f51837f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c493611f4882151561299a565b30903390612f33565b33845260108152611f6961063c846040872054612f86565b3385526010825260408520556040519283523392a280f35b6064826040519062461bcd60e51b82526004820152601660248201527f496e73756666696369656e7420616c6c6f77616e6365000000000000000000006044820152fd5b809250848092503d8311611fef575b611fde8183612635565b8101031261130a5783905138611f10565b503d611fd4565b50346101f05760203660031901126101f057600435906011548210156101f057606061202183612711565b50805490600260018201549101549060405192835260208301526040820152f35b50346101f05760203660031901126101f0576001600160a01b03612064612657565b61206c612ed0565b166001600160a01b0319600654161760065580f35b50346101f0576020806003193601126109ea5760043567ffffffffffffffff811161178f576120b4903690600401612685565b906120bd612ed0565b6011548360115580612141575b5060208251926120d984612906565b0190601184527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6884925b84841061210e578580f35b60038382612135600194518690604060029180518455602081015160018501550151910155565b01920193019290612103565b600390806003029060038204036121a157601185527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68908101905b81811061218a5750506120ca565b80868492558660018201558660028201550161217c565b602485634e487b7160e01b81526011600452fd5b50346101f057366003190161020081126109ea576101608091126109ea5760405190810181811067ffffffffffffffff82111761147f5760405260043581526024356020820152604435604082015260643560608201526084356001600160a01b038116810361178f57608082015260a4356001600160a01b038116810361178f5760a082015260c4356001600160a01b038116810361178f5760c082015260e4356001600160a01b038116810361178f5760e08201526101043561010082015261012435610120820152610144356101408201526101643567ffffffffffffffff811161178f576122ab903690600401612685565b61018435916001600160a01b0383168303611ea0576101a435926001600160a01b038416840361130a576101c435936001600160a01b0385168503611755576101e435906001600160a01b03821682036109db577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549567ffffffffffffffff871615806125e8575b600167ffffffffffffffff89161490816125de575b1590816125d5575b506125ab576001600160a01b03809492818094600167ffffffffffffffff198c16177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560ff8b60401c161561256c575b88518c556020890151600155604089015160025560608901516003556101408260808b015116996001600160a01b03199a8b60045416176004558360a0820151168b60055416176005558360c0820151168b60065416176006558360e0820151168b60075416176007556101008101516008556101208101516009550151600a5561242b613276565b612433613276565b61243b613276565b61244433612d95565b1687600b541617600b551685600c541617600c551683600d541617600d551690600e541617600e55602081519161247a83612906565b01601184527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6884915b838310612538578560ff8660401c16156124ba5780f35b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6003602082612560600194518690604060029180518455602081015160018501550151910155565b019201920191906124a3565b68ffffffffffffffffff198b1668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556123a2565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b90501538612351565b303b159150612349565b5060ff8760401c1615612334565b50346101f05760203660031901126101f057612610612ed0565b60043560025580f35b6060810190811067ffffffffffffffff82111761055657604052565b90601f8019910116810190811067ffffffffffffffff82111761055657604052565b600435906001600160a01b03821682036107b457565b67ffffffffffffffff81116105565760051b60200190565b81601f820112156107b457803590602061269e8361266d565b9360406126ae6040519687612635565b84865282860191836060809702860101948186116107b4578401925b8584106126db575050505050505090565b86848303126107b45784879184516126f281612619565b86358152828701358382015285870135868201528152019301926126ca565b60115481101561274c576003906011600052027f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680190600090565b634e487b7160e01b600052603260045260246000fd5b60e09060231901126107b4576040519060e0820182811067ffffffffffffffff82111761055657604052816001600160a01b0360243581811681036107b457825260443581811681036107b457602083015260643581811681036107b457604083015260843590811681036107b457606082015260a435608082015260c43560a082015260c060e435910152565b67ffffffffffffffff811161055657601f01601f191660200190565b81601f820112156107b457803590612823826127f0565b926128316040519485612635565b828452602083830101116107b457816000926020809301838601378301015290565b60606003198201126107b4576004359167ffffffffffffffff6024358181116107b457836128839160040161280c565b926044359182116107b45761289a9160040161280c565b90565b919082519283825260005b8481106128c9575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016128a8565b818102929181159184041417156128f057565b634e487b7160e01b600052601160045260246000fd5b6801000000000000000081116105565760115481601155808210612928575050565b600391816003029160038304036128f057806003029060038204036128f05760009060116000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6892830192015b8281106129835750505050565b808285925582600182015582600282015501612976565b156129a157565b606460405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420616d6f756e740000000000000000000000000000000000006044820152fd5b156129ec57565b606460405162461bcd60e51b815260206004820152601460248201527f41726974686d65746963204f766572666c6f77210000000000000000000000006044820152fd5b15612a3757565b606460405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152fd5b15612a8257565b606460405162461bcd60e51b815260206004820152601960248201527f496e76616c69642064657374696e6174696f6e20746f6b656e000000000000006044820152fd5b15612acd57565b606460405162461bcd60e51b815260206004820152601c60248201527f496e76616c69642064657374696e6174696f6e207265636569766572000000006044820152fd5b908160209103126107b4575180151581036107b45790565b15612b3057565b606460405162461bcd60e51b815260206004820152600f60248201527f417070726f76616c206661696c656400000000000000000000000000000000006044820152fd5b91908260409103126107b4576020825192015190565b60c061289a9493610120936001600160a01b0380911684528082511660208501528060208301511660408501528060408301511660608501526060820151166080840152608081015160a084015260a081015182840152015160e082015281610100820152019061289d565b15612bfd57565b606460405162461bcd60e51b815260206004820152601260248201527f537761704f6e31696e6368206661696c656400000000000000000000000000006044820152fd5b15612c4857565b606460405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206e6f742077697468696e20627579696e672072616e676521006044820152fd5b60001981146128f05760010190565b15612ca257565b606460405162461bcd60e51b815260206004820152601e60248201527f4461696c79204361726420427579204c696d69742045786365656465642100006044820152fd5b949392612d06606093612d1493885260806020890152608088019061289d565b90868203604088015261289d565b930152565b15612d2057565b606460405162461bcd60e51b815260206004820152601860248201527f61617665506f6f6c20417070726f76616c206661696c656400000000000000006044820152fd5b51906fffffffffffffffffffffffffffffffff821682036107b457565b51906001600160a01b03821682036107b457565b6001600160a01b03809116908115612e02577f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805490836001600160a01b03198316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b6011549060005b828110612e8557606460405162461bcd60e51b815260206004820152601360248201527f416d6f756e74206f7574206f662072616e6765000000000000000000000000006044820152fd5b612e8e81612711565b505482101580612eb9575b612ea557600101612e3a565b60029250612eb39150612711565b50015490565b506001612ec582612711565b500154821115612e99565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612f0357565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b6040516323b872dd60e01b60208201526001600160a01b0392831660248201529290911660448301526064820192909252612f8491612f7f82608481015b03601f198101845283612635565b6132cf565b565b91908201918210612f975760019190565b600091508190565b9190828111612faf576001920390565b50600091508190565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0390921660248301526044820192909252612f8491612f7f8260648101612f71565b62015180900462010bd980820190811291600092838212908015821691151617613232576226496501908262253d8c8312911290801582169115161761321e578060021b600491828205810361320b5762023ab18092059182810290810583036131f8576003810190856003831291129080158216911516176131f8579083613094920590613377565b60018101600181128583129080158216911516176131f857610fa090808202918205036131f85762164b099005906105b582810290810583036131e55790846130de920590613377565b91601f83019285601f851291129080158216911516176131f85782605002926050840581036131e55761098f8094059384810290810585036131d257906050613128920590613377565b94600b8405936002810190826002831291129080158216911516176131bf5784600c0290600c820586036131ac579061316091613377565b9460301983019283136001166131995782606402926064840503613199575050613193929161318e9161335b565b61335b565b91909192565b906011602492634e487b7160e01b835252fd5b602483601189634e487b7160e01b835252fd5b602482601188634e487b7160e01b835252fd5b602487601188634e487b7160e01b835252fd5b602486601187634e487b7160e01b835252fd5b602485601186634e487b7160e01b835252fd5b602484601185634e487b7160e01b835252fd5b602482634e487b7160e01b81526011600452fd5b602483634e487b7160e01b81526011600452fd5b3d15613271573d90613257826127f0565b916132656040519384612635565b82523d6000602084013e565b606090565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156132a557565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b6000806001600160a01b036132f993169360208151910182865af16132f2613246565b9083613390565b8051908115159182613340575b505061330f5750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b6133539250602080918301019101612b11565b153880613306565b919091600083820193841291129080158216911516176128f057565b818103929160001380158285131691841216176128f057565b906133cf57508051156133a557805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b8151158061341a575b6133e0575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b156133d856fea2646970667358221220c389c2b71f48bd2349e128d9f477837245bdf5a81d3811db18bdb6d96548aa1664736f6c63430008180033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}