{
  "_format": "hh-sol-artifact-1",
  "contractName": "AssetTransferable",
  "sourceName": "contracts/asset-transferable/AssetTransferable.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "flavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "version",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "issuer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "apxRegistry",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "initialTokenSupply",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "whitelistRequiredForRevenueClaim",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "whitelistRequiredForLiquidationClaim",
              "type": "bool"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.AssetTransferableConstructorParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "approver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "wallet",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "whitelisted",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "CampaignWhitelist",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "ChangeOwnership",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "ClaimLiquidationShare",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "campaign",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "FinalizeSale",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidationFunds",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Liquidated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approvedByIssuer",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "SetApprovedByIssuer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "info",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "setter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "SetInfo",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "approver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "status",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "SetIssuerStatus",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "whitelistRequired",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "SetWhitelistRequiredForRevenueClaim",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "whitelistRequiredForTransfer",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "SetWhitelistRequiredForTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "Snapshot",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "campaign",
          "type": "address"
        }
      ],
      "name": "approveCampaign",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "approvedCampaignsMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceBeforeLiquidation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "snapshotId",
          "type": "uint256"
        }
      ],
      "name": "balanceOfAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "changeOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "claimLiquidationShare",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "commonState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "flavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "version",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "totalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "decimals",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "issuer",
              "type": "address"
            }
          ],
          "internalType": "struct Structs.AssetCommonState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "finalizeSale",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "flavor",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCampaignRecords",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "wallet",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "whitelisted",
              "type": "bool"
            }
          ],
          "internalType": "struct Structs.WalletRecord[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInfoHistory",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.InfoEntry[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSellHistory",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "cfManager",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.TokenSaleInfo[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "flavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "version",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "initialTokenSupply",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "whitelistRequiredForRevenueClaim",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "whitelistRequiredForLiquidationClaim",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "assetApprovedByIssuer",
              "type": "bool"
            },
            {
              "internalType": "address",
              "name": "issuer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "apxRegistry",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "totalAmountRaised",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalTokensSold",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "highestTokenSellPrice",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "liquidated",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "liquidationFundsTotal",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "liquidationTimestamp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "liquidationFundsClaimed",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.AssetTransferableState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "liquidationClaimsMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newRegistry",
          "type": "address"
        }
      ],
      "name": "migrateApxRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priceDecimalsPrecision",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "info",
          "type": "string"
        }
      ],
      "name": "setInfo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "status",
          "type": "bool"
        }
      ],
      "name": "setIssuerStatus",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "whitelistRequired",
          "type": "bool"
        }
      ],
      "name": "setWhitelistRequiredForLiquidationClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "whitelistRequired",
          "type": "bool"
        }
      ],
      "name": "setWhitelistRequiredForRevenueClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "snapshot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "successfulTokenSalesMap",
      "outputs": [
        {
          "internalType": "address",
          "name": "cfManager",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "campaign",
          "type": "address"
        }
      ],
      "name": "suspendCampaign",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "snapshotId",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162005074380380620050748339810160408190526200003491620008af565b6101008101516101208201518151620000559060039060208501906200074f565b5080516200006b9060049060208401906200074f565b50505060408101516001600160a01b0316620000a45760405162461bcd60e51b81526004016200009b9062000b8a565b60405180910390fd5b60608101516001600160a01b0316620000d15760405162461bcd60e51b81526004016200009b9062000bd3565b60008160a0015111620000f85760405162461bcd60e51b81526004016200009b9062000b38565b60408051808201909152610140820151815242602080830191909152601a80546001810182556000919091528251805160029092027f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e019262000161928492909101906200074f565b50602082015181600101555050600081604001516001600160a01b031682606001516001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015620001bc57600080fd5b505afa158015620001d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001fb919081019062000a2e565b606001516001600160a01b031614905060003090506040518061028001604052808460000151815260200184602001518152602001826001600160a01b0316815260200184604001516001600160a01b031681526020018460a0015181526020018460c00151151581526020018460e0015115158152602001831515815260200184606001516001600160a01b0316815260200184608001516001600160a01b031681526020018461014001518152602001846101000151815260200184610120015181526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525060096000820151816000019080519060200190620003149291906200074f565b5060208281015180516200032f92600185019201906200074f565b5060408201516002820180546001600160a01b03199081166001600160a01b0393841617909155606084015160038401805483169184169190911790556080840151600484015560a084015160058401805460c087015160e0880151610100808a015160ff199094169515159590951761ff0019169115159094021762ff000019166201000093151593909302929092176301000000600160b81b03191663010000009285169290920291909117905561012084015160068401805490921692169190911790556101408201518051620004149160078401916020909101906200074f565b506101608201518051620004339160088401916020909101906200074f565b506101808201518051620004529160098401916020909101906200074f565b506101a0820151600a8201556101c0820151600b8201556101e0820151600c820155610200820151600d8201805460ff1916911515919091179055610220820151600e820155610240820151600f82015561026090910151601090910155604083015160a0840151620004c69190620004cf565b50505062000d27565b6001600160a01b038216620004f85760405162461bcd60e51b81526004016200009b9062000c1d565b6200050660008383620005a8565b80600260008282546200051a919062000c89565b90915550506001600160a01b038216600090815260208190526040812080548392906200054990849062000c89565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200058e90859062000c54565b60405180910390a3620005a4600083836200061a565b5050565b620005c08383836200061a60201b62001fea1760201c565b6001600160a01b038316620005ea57620005da826200061f565b620005e462000650565b6200061a565b6001600160a01b0382166200060457620005da836200061f565b6200060f836200061f565b6200061a826200061f565b505050565b6001600160a01b03811660009081526005602052604090206200064d90620006478362000662565b62000681565b50565b62000660600662000647620006d0565b565b6001600160a01b0381166000908152602081905260409020545b919050565b60006200068d620006d6565b9050806200069b84620006f4565b10156200061a578254600180820185556000858152602080822090930193909355938401805494850181558252902090910155565b60025490565b6000620006ef60086200074b60201b62001fef1760201c565b905090565b805460009062000707575060006200067c565b81548290620007199060019062000ca4565b815481106200073857634e487b7160e01b600052603260045260246000fd5b906000526020600020015490506200067c565b5490565b8280546200075d9062000cbe565b90600052602060002090601f016020900481019282620007815760008555620007cc565b82601f106200079c57805160ff1916838001178555620007cc565b82800160010185558215620007cc579182015b82811115620007cc578251825591602001919060010190620007af565b50620007da929150620007de565b5090565b5b80821115620007da5760008155600101620007df565b80516001600160a01b03811681146200067c57600080fd5b805180151581146200067c57600080fd5b600082601f8301126200082f578081fd5b81516001600160401b038111156200084b576200084b62000d11565b602062000861601f8301601f1916820162000c5d565b828152858284870101111562000875578384fd5b835b838110156200089457858101830151828201840152820162000877565b83811115620008a557848385840101525b5095945050505050565b600060208284031215620008c1578081fd5b81516001600160401b0380821115620008d8578283fd5b8184019150610160808387031215620008ef578384fd5b620008fa8162000c5d565b90508251828111156200090b578485fd5b62000919878286016200081e565b8252506020830151828111156200092e578485fd5b6200093c878286016200081e565b6020830152506200095060408401620007f5565b60408201526200096360608401620007f5565b60608201526200097660808401620007f5565b608082015260a083015160a08201526200099360c084016200080d565b60c0820152620009a660e084016200080d565b60e08201526101008084015183811115620009bf578586fd5b620009cd888287016200081e565b8284015250506101208084015183811115620009e7578586fd5b620009f5888287016200081e565b828401525050610140808401518381111562000a0f578586fd5b62000a1d888287016200081e565b918301919091525095945050505050565b60006020828403121562000a40578081fd5b81516001600160401b038082111562000a57578283fd5b9083019060e0828603121562000a6b578283fd5b62000a7760e062000c5d565b82518281111562000a86578485fd5b62000a94878286016200081e565b82525060208301518281111562000aa9578485fd5b62000ab7878286016200081e565b60208301525062000acb60408401620007f5565b604082015262000ade60608401620007f5565b606082015262000af160808401620007f5565b608082015262000b0460a08401620007f5565b60a082015260c08301518281111562000b1b578485fd5b62000b29878286016200081e565b60c08301525095945050505050565b60208082526032908201527f41737365745472616e7366657261626c653a20496e697469616c20746f6b656e604082015271020737570706c792063616e277420626520360741b606082015260800190565b60208082526029908201527f41737365745472616e7366657261626c653a20496e76616c6964206f776e6572604082015268081c1c9bdd9a59195960ba1b606082015260800190565b6020808252602a908201527f41737365745472616e7366657261626c653a20496e76616c69642069737375656040820152691c881c1c9bdd9a59195960b21b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b038111828210171562000c815762000c8162000d11565b604052919050565b6000821982111562000c9f5762000c9f62000cfb565b500190565b60008282101562000cb95762000cb962000cfb565b500390565b60028104600182168062000cd357607f821691505b6020821081141562000cf557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61433d8062000d376000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806358a687ec1161013057806398e16255116100b8578063b37565061161007c578063b37565061461048b578063bbd94459146104a0578063c24fe16c146104b3578063dd62ed3e146104bb578063f59e4f65146104ce57610227565b806398e1625514610428578063a0a83f8c1461043d578063a457c2d714610450578063a9059cbb14610463578063a91e97501461047657610227565b806391b14c5f116100ff57806391b14c5f146103df578063937f6e77146103f257806395d89b41146104055780639711715a1461040d578063981b24d01461041557610227565b806358a687ec1461039e5780635b1cdef2146103a657806370a08231146103b95780638ca3d4bb146103cc57610227565b80632d8b95a0116101b357806340e688da1161018257806340e688da1461033a57806349d3f1611461035d5780634ee2cd7e1461037057806350c73efe1461038357806354fd4d501461039657610227565b80632d8b95a0146102ec5780632e61a571146102ff578063313ce56714610312578063395093511461032757610227565b80631818e2ec116101fa5780631818e2ec146102945780631865c57d146102a957806323b872dd146102be57806328a07025146102d15780632af4c31e146102d957610227565b8063025ed7991461022c57806306fdde0314610241578063095ea7b31461025f57806318160ddd1461027f575b600080fd5b61023f61023a366004612e4c565b6104d6565b005b6102496105e3565b60405161025691906134c8565b60405180910390f35b61027261026d366004612e21565b610675565b60405161025691906134bd565b610287610693565b6040516102569190614055565b61029c610699565b6040516102569190613dc1565b6102b16109e0565b6040516102569190613eb8565b6102726102cc366004612de1565b610d9c565b61023f610e2e565b61023f6102e7366004612d8d565b6111a2565b61023f6102fa366004612e4c565b61121b565b61023f61030d366004612d8d565b611287565b61031a611315565b604051610256919061406c565b610272610335366004612e21565b61131a565b61034d610348366004612d8d565b61136e565b604051610256949392919061336a565b61023f61036b366004612e4c565b61139f565b61028761037e366004612e21565b611410565b610287610391366004612d8d565b611459565b610249611478565b61023f61148a565b6102876103b4366004612d8d565b611810565b6102876103c7366004612d8d565b611822565b61023f6103da366004612d8d565b611864565b61023f6103ed366004612d8d565b6118f2565b61023f610400366004612e84565b611961565b610249611a40565b610287611a4f565b6102876104233660046131e6565b611a82565b610430611ab2565b6040516102569190613390565b61028761044b366004612d8d565b611bad565b61027261045e366004612e21565b611bbf565b610272610471366004612e21565b611c38565b61047e611c4c565b6040516102569190613403565b610493611ccd565b6040516102569190613470565b61023f6104ae366004612d8d565b611d3c565b610287611fa7565b6102876104c9366004612da9565b611fad565b610249611fd8565b6104de611ff3565b6001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561051657600080fd5b505afa15801561052a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055291908101906130f1565b606001516001600160a01b0316336001600160a01b03161461058f5760405162461bcd60e51b815260040161058690613bbc565b60405180910390fd5b600e805462ff0000191662010000831515021790556040517f378762f5fbec582efe534abe7b1b8f7e4e4a4ed6ce28c15fc23e2024ead4fcc3906105d89033908490429061330f565b60405180910390a150565b6060600380546105f29061427d565b80601f016020809104026020016040519081016040528092919081815260200182805461061e9061427d565b801561066b5780601f106106405761010080835404028352916020019161066b565b820191906000526020600020905b81548152906001019060200180831161064e57829003601f168201915b5050505050905090565b6000610689610682612009565b848461200d565b5060015b92915050565b60025490565b6106a1612b63565b604051806101400160405280600960000180546106bd9061427d565b80601f01602080910402602001604051908101604052809291908181526020018280546106e99061427d565b80156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b50505050508152602001600960010180546107509061427d565b80601f016020809104026020016040519081016040528092919081815260200182805461077c9061427d565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050509183525050600b546001600160a01b039081166020830152600c54166040820152601080546060909201916108009061427d565b80601f016020809104026020016040519081016040528092919081815260200182805461082c9061427d565b80156108795780601f1061084e57610100808354040283529160200191610879565b820191906000526020600020905b81548152906001019060200180831161085c57829003601f168201915b50505050508152602001600960080180546108939061427d565b80601f01602080910402602001604051908101604052809291908181526020018280546108bf9061427d565b801561090c5780601f106108e15761010080835404028352916020019161090c565b820191906000526020600020905b8154815290600101906020018083116108ef57829003601f168201915b505050505081526020016009800180546109259061427d565b80601f01602080910402602001604051908101604052809291908181526020018280546109519061427d565b801561099e5780601f106109735761010080835404028352916020019161099e565b820191906000526020600020905b81548152906001019060200180831161098157829003601f168201915b505050505081526020016109b0610693565b81526020016109bd611315565b60ff168152600e54630100000090046001600160a01b0316602090910152919050565b6109e8612bd1565b600960405180610280016040529081600082018054610a069061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a329061427d565b8015610a7f5780601f10610a5457610100808354040283529160200191610a7f565b820191906000526020600020905b815481529060010190602001808311610a6257829003601f168201915b50505050508152602001600182018054610a989061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac49061427d565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b505050918352505060028201546001600160a01b03908116602083015260038301548116604083015260048301546060830152600583015460ff808216151560808501526101008083048216151560a0860152620100008304909116151560c08501526301000000909104821660e084015260068401549091169082015260078201805461012090920191610ba59061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd19061427d565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b50505050508152602001600882018054610c379061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c639061427d565b8015610cb05780601f10610c8557610100808354040283529160200191610cb0565b820191906000526020600020905b815481529060010190602001808311610c9357829003601f168201915b50505050508152602001600982018054610cc99061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf59061427d565b8015610d425780601f10610d1757610100808354040283529160200191610d42565b820191906000526020600020905b815481529060010190602001808311610d2557829003601f168201915b5050509183525050600a8201546020820152600b8201546040820152600c8201546060820152600d82015460ff1615156080820152600e82015460a0820152600f82015460c082015260109091015460e090910152905090565b6000610da98484846120c1565b6001600160a01b038416600090815260016020526040812081610dca612009565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610e0d5760405162461bcd60e51b81526004016105869061390d565b610e2185610e19612009565b85840361200d565b60019150505b9392505050565b60165460ff1615610e515760405162461bcd60e51b815260040161058690613583565b600c546001600160a01b03163314610e7b5760405162461bcd60e51b815260040161058690613b5f565b600f54604051631d623e0560e11b81526001600160a01b03909116906000908290633ac47c0a90610eb0903090600401613292565b6101406040518083038186803b158015610ec957600080fd5b505afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190612ef8565b90508060400151610f245760405162461bcd60e51b815260040161058690613955565b8060600151610f455760405162461bcd60e51b815260040161058690613c19565b60208101516001600160a01b03163014610f715760405162461bcd60e51b815260040161058690613ce3565b8060e00151421115610f955760405162461bcd60e51b8152600401610586906136b4565b60008160a001516009600c015411610fb1578160a00151610fb5565b6015545b604051636eb1769f60e11b8152909150600090309063dd62ed3e90610fe090339084906004016132a6565b60206040518083038186803b158015610ff857600080fd5b505afa15801561100c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103091906131fe565b9050600061103e82846121eb565b905080156110ff57336000908152601f6020526040812080548392906110659084906140cc565b90915550506019805482919060009061107f9084906140cc565b90915550506040516323b872dd60e01b815230906323b872dd906110ab903390849087906004016132eb565b602060405180830381600087803b1580156110c557600080fd5b505af11580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd9190612e68565b505b600061111261110c610693565b856121eb565b90506000611120838361423a565b9050801561114757611147333083611136612228565b6001600160a01b0316929190612232565b6016805460ff1916600117905542601881905560178390556040517f09c223cfcd8c93e245f558f5f8de755fc0930fd9bc257441155ef5d54a170e0f916111919133918691613349565b60405180910390a150505050505050565b600c546001600160a01b031633146111cc5760405162461bcd60e51b815260040161058690613b5f565b600c80546001600160a01b0319166001600160a01b0383161790556040517fb4fa0c8f1565e6385961540cac5b9884d84157c515100cf972728e8be8dacdd3906105d8903390849042906132eb565b600c546001600160a01b031633146112455760405162461bcd60e51b815260040161058690613b5f565b600e805460ff19168215151790556040517f9f9c59041e1db26af9a0f9d072677adec7d0a57053d68e6e298a48535b8bbc8e906105d89033908490429061330f565b600c546001600160a01b031633146112b15760405162461bcd60e51b815260040161058690613b5f565b60165460ff16156112d45760405162461bcd60e51b815260040161058690613583565b6112df81600161228a565b7f5c6ace57e04d50c89abdde343bc20b6dbe48b8ce80684b10a2633f157b637d7533826001426040516105d894939291906132c0565b601290565b6000610689611327612009565b848460016000611335612009565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461136991906140cc565b61200d565b601e6020526000908152604090208054600182015460028301546003909301546001600160a01b0390921692909184565b600c546001600160a01b031633146113c95760405162461bcd60e51b815260040161058690613b5f565b600e805461ff001916610100831515021790556040517f2f824341849edde519544d4a9e11421845a643b53a544a5e50fbe369cd44da4a906105d89033908490429061330f565b6001600160a01b0382166000908152600560205260408120819081906114379085906123ab565b915091508161144e5761144985611459565b611450565b805b95945050505050565b6001600160a01b0381166000908152602081905260409020545b919050565b6060600960010180546105f29061427d565b60165460ff16156114ad5760405162461bcd60e51b815260040161058690613583565b336114b781612457565b6114d35760405162461bcd60e51b81526004016105869061366b565b6000816001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561150e57600080fd5b505afa158015611522573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261154a9190810190612fa1565b905080610100015161156e5760405162461bcd60e51b815260040161058690613d33565b610160810151610180820151610140830151811580159061159757508161159486611822565b10155b6115b35760405162461bcd60e51b815260040161058690613a55565b6000831180156116455750826115c7612228565b6001600160a01b03166370a08231876040518263ffffffff1660e01b81526004016115f29190613292565b60206040518083038186803b15801561160a57600080fd5b505afa15801561161e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164291906131fe565b10155b6116615760405162461bcd60e51b815260040161058690613775565b826009600a01600082825461167691906140cc565b9091555050601480548391906000906116909084906140cc565b9091555050604080516080810182526001600160a01b0380881680835260208084018781528486018981524260608701908152601c8054600181810183556000928352895160049092027f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21181018054938b166001600160a01b031994851617905586517f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21282015585517f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21382015584517f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21490910155968252601e90955297909720865181549616959093169490941782555191810191909155905160028201559151600392909201919091556015548211156117cb5760158290555b7fcbf0fbac05ba7258619b5b6f20bf2b567ce1a76f2f8f0a58f9e7fb3e90958c4833848642604051611800949392919061336a565b60405180910390a1505050505050565b601f6020526000908152604090205481565b60165460009060ff161561185b57600c546001600160a01b0383811691161461184c576000611854565b611854610693565b9050611473565b61068d82611459565b600c546001600160a01b0316331461188e5760405162461bcd60e51b815260040161058690613b5f565b60165460ff16156118b15760405162461bcd60e51b815260040161058690613583565b6118bc81600061228a565b7f5c6ace57e04d50c89abdde343bc20b6dbe48b8ce80684b10a2633f157b637d7533826000426040516105d894939291906132c0565b60165460ff16156119155760405162461bcd60e51b815260040161058690613583565b600f546001600160a01b0316331461193f5760405162461bcd60e51b8152600401610586906137f9565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b0316331461198b5760405162461bcd60e51b815260040161058690613b5f565b6040805180820190915281815242602080830191909152601a80546001810182556000919091528251805160029092027f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e01926119ed92849290910190612c96565b506020918201516001909101558151611a0c9160109190840190612c96565b507f39b28594242c42fce47a0a6e63bac12adbd07fbb35580f5a54b236858101d58a8133426040516105d8939291906134db565b6060600480546105f29061427d565b60165460009060ff1615611a755760405162461bcd60e51b815260040161058690613583565b611a7d612573565b905090565b6000806000611a928460066123ab565b9150915081611aa857611aa3610693565b611aaa565b805b949350505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611ba45783829060005260206000209060020201604051806040016040529081600082018054611b099061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b359061427d565b8015611b825780601f10611b5757610100808354040283529160200191611b82565b820191906000526020600020905b815481529060010190602001808311611b6557829003601f168201915b5050505050815260200160018201548152505081526020019060010190611ad6565b50505050905090565b601d6020526000908152604090205481565b60008060016000611bce612009565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015611c1a5760405162461bcd60e51b815260040161058690613d7c565b611c2e611c25612009565b8585840361200d565b5060019392505050565b6000610689611c45612009565b84846120c1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611ba4576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460608301529083529092019101611c70565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611ba457600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900460ff16151581830152825260019092019101611cf1565b60165460ff16611d5e5760405162461bcd60e51b8152600401610586906138cc565b600e54610100900460ff161580611df35750611d78611ff3565b6001600160a01b0316633657e851826040518263ffffffff1660e01b8152600401611da39190613292565b60206040518083038186803b158015611dbb57600080fd5b505afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df39190612e68565b611e0f5760405162461bcd60e51b815260040161058690613856565b6000611e1b8230611fad565b905060008111611e3d5760405162461bcd60e51b8152600401610586906139a6565b6000611e47610693565b601754611e54908461421b565b611e5e91906140e4565b905060008111611e805760405162461bcd60e51b8152600401610586906135d9565b6001600160a01b0383166000908152601f602052604081208054839290611ea89084906140cc565b909155505060198054829190600090611ec29084906140cc565b90915550611ee590508382611ed5612228565b6001600160a01b031691906125c7565b6040516323b872dd60e01b815230906323b872dd90611f0c908690849087906004016132eb565b602060405180830381600087803b158015611f2657600080fd5b505af1158015611f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5e9190612e68565b50826001600160a01b03167f2aec1c87f3bc903aa0be5af816e24360e038c884cb96b991091f860698e3a2598242604051611f9a92919061405e565b60405180910390a2505050565b61271081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600960000180546105f29061427d565b505050565b5490565b600e54630100000090046001600160a01b031690565b3390565b6001600160a01b0383166120335760405162461bcd60e51b815260040161058690613ae4565b6001600160a01b0382166120595760405162461bcd60e51b815260040161058690613629565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906120b4908590614055565b60405180910390a3505050565b6001600160a01b0383166120e75760405162461bcd60e51b815260040161058690613a10565b6001600160a01b03821661210d5760405162461bcd60e51b815260040161058690613540565b6121188383836125e6565b6001600160a01b038316600090815260208190526040902054818110156121515760405162461bcd60e51b8152600401610586906136e9565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906121889084906140cc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121d29190614055565b60405180910390a36121e5848484611fea565b50505050565b60006127106121f861263e565b612202919061421b565b61220a612653565b612214848661421b565b61221e919061421b565b610e2791906140e4565b6000611a7d6126cd565b6121e5846323b872dd60e01b858585604051602401612253939291906132eb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612754565b612293826127e3565b156122fe576001600160a01b0382166000908152601d6020526040902054601b805483929081106122d457634e487b7160e01b600052603260045260246000fd5b60009182526020909120018054911515600160a01b0260ff60a01b199092169190911790556123a7565b604080518082019091526001600160a01b03808416825282151560208301908152601b805460018181018355600083905294517f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1909101805493511515600160a01b0260ff60a01b19929095166001600160a01b031990941693909317169290921790555461238d919061423a565b6001600160a01b0383166000908152601d60205260409020555b5050565b600080600084116123ce5760405162461bcd60e51b815260040161058690613c69565b6123d661286f565b8411156123f55760405162461bcd60e51b815260040161058690613509565b6000612401848661287b565b845490915081141561241a576000809250925050612450565b600184600101828154811061243f57634e487b7160e01b600052603260045260246000fd5b906000526020600020015492509250505b9250929050565b6000600960030160009054906101000a90046001600160a01b03166001600160a01b0316826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b1580156124b457600080fd5b505afa1580156124c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f09190810190612fa1565b606001516001600160a01b0316141561250b57506001611473565b612514826127e3565b801561068d57506001600160a01b0382166000908152601d6020526040902054601b8054909190811061255757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600160a01b900460ff1692915050565b600061257f600861295a565b600061258961286f565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb67816040516125ba9190614055565b60405180910390a1905090565b611fea8363a9059cbb60e01b8484604051602401612253929190613330565b6125f1838383611fea565b6001600160a01b0383166126155761260882612963565b612610612990565b611fea565b6001600160a01b03821661262c5761260883612963565b61263583612963565b611fea82612963565b6000612648611315565b611a7d90600a61414a565b600061265d6126cd565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561269557600080fd5b505afa1580156126a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126489190613216565b60006126d7611ff3565b6001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561270f57600080fd5b505afa158015612723573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261274b91908101906130f1565b60800151905090565b60006127a9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661299f9092919063ffffffff16565b805190915015611fea57808060200190518101906127c79190612e68565b611fea5760405162461bcd60e51b815260040161058690613c99565b6001600160a01b0381166000908152601d6020526040812054601b5461280d576000915050611473565b601b548110612820576000915050611473565b826001600160a01b0316601b828154811061284b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614610689576000915050611473565b6000611a7d6008611fef565b815460009061288c5750600061068d565b82546000905b808210156128f65760006128a683836129ae565b9050848682815481106128c957634e487b7160e01b600052603260045260246000fd5b906000526020600020015411156128e2578091506128f0565b6128ed8160016140cc565b92505b50612892565b6000821180156129395750838561290e60018561423a565b8154811061292c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154145b156129525761294960018361423a565b9250505061068d565b50905061068d565b80546001019055565b6001600160a01b038116600090815260056020526040902061298d9061298883611459565b6129c9565b50565b61299d6006612988610693565b565b6060611aaa8484600085612a13565b60006129bd60028484186140e4565b610e27908484166140cc565b60006129d361286f565b9050806129df84612ad3565b1015611fea578254600180820185556000858152602080822090930193909355938401805494850181558252902090910155565b606082471015612a355760405162461bcd60e51b81526004016105869061372f565b612a3e85612b24565b612a5a5760405162461bcd60e51b815260040161058690613b28565b600080866001600160a01b03168587604051612a769190613276565b60006040518083038185875af1925050503d8060008114612ab3576040519150601f19603f3d011682016040523d82523d6000602084013e612ab8565b606091505b5091509150612ac8828286612b2a565b979650505050505050565b8054600090612ae457506000611473565b81548290612af49060019061423a565b81548110612b1257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050611473565b3b151590565b60608315612b39575081610e27565b825115612b495782518084602001fd5b8160405162461bcd60e51b815260040161058691906134c8565b604051806101400160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600081526020016000815260200160006001600160a01b031681525090565b604051806102800160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160001515815260200160001515815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525090565b828054612ca29061427d565b90600052602060002090601f016020900481019282612cc45760008555612d0a565b82601f10612cdd57805160ff1916838001178555612d0a565b82800160010185558215612d0a579182015b82811115612d0a578251825591602001919060010190612cef565b50612d16929150612d1a565b5090565b5b80821115612d165760008155600101612d1b565b8051611473816142e4565b8051611473816142f9565b600082601f830112612d55578081fd5b8151612d68612d63826140a4565b61407a565b818152846020838601011115612d7c578283fd5b61144e826020830160208701614251565b600060208284031215612d9e578081fd5b8135610e27816142e4565b60008060408385031215612dbb578081fd5b8235612dc6816142e4565b91506020830135612dd6816142e4565b809150509250929050565b600080600060608486031215612df5578081fd5b8335612e00816142e4565b92506020840135612e10816142e4565b929592945050506040919091013590565b60008060408385031215612e33578182fd5b8235612e3e816142e4565b946020939093013593505050565b600060208284031215612e5d578081fd5b8135610e27816142f9565b600060208284031215612e79578081fd5b8151610e27816142f9565b600060208284031215612e95578081fd5b813567ffffffffffffffff811115612eab578182fd5b8201601f81018413612ebb578182fd5b8035612ec9612d63826140a4565b818152856020838501011115612edd578384fd5b81602084016020830137908101602001929092525092915050565b6000610140808385031215612f0b578182fd5b612f148161407a565b9050612f1f83612d2f565b8152612f2d60208401612d2f565b6020820152612f3e60408401612d3a565b6040820152612f4f60608401612d3a565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120612f96818501612d2f565b908201529392505050565b600060208284031215612fb2578081fd5b815167ffffffffffffffff80821115612fc9578283fd5b81840191506101a0808387031215612fdf578384fd5b612fe88161407a565b9050825182811115612ff8578485fd5b61300487828601612d45565b825250602083015182811115613018578485fd5b61302487828601612d45565b60208301525061303660408401612d2f565b604082015261304760608401612d2f565b606082015260808301518281111561305d578485fd5b61306987828601612d45565b60808301525061307b60a08401612d2f565b60a082015261308c60c08401612d2f565b60c082015260e083015160e082015261010091506130ab828401612d3a565b8282015261012091506130bf828401612d3a565b918101919091526101408281015190820152610160808301519082015261018091820151918101919091529392505050565b600060208284031215613102578081fd5b815167ffffffffffffffff80821115613119578283fd5b9083019060e0828603121561312c578283fd5b61313660e061407a565b825182811115613144578485fd5b61315087828601612d45565b825250602083015182811115613164578485fd5b61317087828601612d45565b60208301525061318260408401612d2f565b604082015261319360608401612d2f565b60608201526131a460808401612d2f565b60808201526131b560a08401612d2f565b60a082015260c0830151828111156131cb578485fd5b6131d787828601612d45565b60c08301525095945050505050565b6000602082840312156131f7578081fd5b5035919050565b60006020828403121561320f578081fd5b5051919050565b600060208284031215613227578081fd5b815160ff81168114610e27578182fd5b6001600160a01b03169052565b15159052565b60008151808452613262816020860160208601614251565b601f01601f19169290920160200192915050565b60008251613288818460208701614251565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03948516815292909316602083015215156040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039390931683529015156020830152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156133f557888303603f19018552815180518785526133d88886018261324a565b9189015194890194909452948701949250908601906001016133b4565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561346357815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613420565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561346357815180516001600160a01b03168552860151151586850152928401929085019060010161348d565b901515815260200190565b600060208252610e27602083018461324a565b6000606082526134ee606083018661324a565b6001600160a01b039490941660208301525060400152919050565b6020808252601d908201527f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526036908201527f41737365745472616e7366657261626c653a20416374696f6e20666f726269646040820152753232b7161030b9b9b2ba103634b8bab4b230ba32b21760511b606082015260800190565b60208082526030908201527f41737365745472616e7366657261626c653a206e6f206c69717569646174696f60408201526f6e2066756e647320746f20636c61696d60801b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526029908201527f41737365745472616e7366657261626c653a2043616d706169676e206e6f742060408201526830b8383937bb32b21760b91b606082015260800190565b6020808252818101527f41737365745472616e7366657261626c653a2050726963652065787069726564604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b602080825260609082018190527f41737365745472616e7366657261626c653a2043616d706169676e206861732060408301527f7369676e616c6c6564207468652073616c652066696e616c697a6174696f6e20908201527f627574207261697365642066756e647320617265206e6f742070726573656e74608082015260a00190565b6020808252603b908201527f41737365745472616e7366657261626c653a204f6e6c7920617078526567697360408201527f7472792063616e2063616c6c20746869732066756e6374696f6e2e0000000000606082015260800190565b60208082526050908201527f41737365745472616e7366657261626c653a2077616c6c6574206d757374206260408201527f652077686974656c6973746564206265666f726520636c61696d696e67206c6960608201526f38bab4b230ba34b7b71039b430b9329760811b608082015260a00190565b60208082526021908201527f41737365745472616e7366657261626c653a206e6f74206c69717569646174656040820152601960fa1b606082015260800190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b60208082526031908201527f41737365745472616e7366657261626c653a204e6f74207265676973746572656040820152706420696e2041707820526567697374727960781b606082015260800190565b60208082526044908201527f41737365745472616e7366657261626c653a206e6f20746f6b656e732061707060408201527f726f76656420666f7220636c61696d696e67206c69717569646174696f6e20736060820152636861726560e01b608082015260a00190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526063908201527f41737365745472616e7366657261626c653a2043616d706169676e206861732060408201527f7369676e616c6c6564207468652073616c652066696e616c697a6174696f6e2060608201527f6275742063616d706169676e20746f6b656e7320617265206e6f742070726573608082015262195b9d60ea1b60a082015260c00190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252603b908201527f41737365745472616e7366657261626c653a204f6e6c7920617373657420637260408201527f6561746f722063616e206d616b65207468697320616374696f6e2e0000000000606082015260800190565b6020808252603a908201527f41737365745472616e7366657261626c653a204f6e6c7920697373756572206f60408201527f776e65722063616e206d616b65207468697320616374696f6e2e000000000000606082015260800190565b60208082526030908201527f41737365745472616e7366657261626c653a20417373657420626c6f636b656460408201526f20696e2041707820526567697374727960801b606082015260800190565b60208082526016908201527504552433230536e617073686f743a20696420697320360541b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526030908201527f41737365745472616e7366657261626c653a20496e76616c6964206d6972726f60408201526f1c995908185cdcd95d081c9958dbdc9960821b606082015260800190565b60208082526029908201527f41737365745472616e7366657261626c653a2043616d706169676e206e6f7420604082015268199a5b985b1a5e995960ba1b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6000602082528251610140806020850152613de061016085018361324a565b91506020850151601f1980868503016040870152613dfe848361324a565b935060408701519150613e146060870183613237565b60608701519150613e286080870183613237565b60808701519150808685030160a0870152613e43848361324a565b935060a08701519150808685030160c0870152613e60848361324a565b935060c08701519150808685030160e087015250613e7e838261324a565b60e087015161010087810191909152870151610120808801919091528701519093509050613eae82860182613237565b5090949350505050565b6000602082528251610280806020850152613ed76102a085018361324a565b91506020850151601f1980868503016040870152613ef5848361324a565b935060408701519150613f0b6060870183613237565b60608701519150613f1f6080870183613237565b608087015160a087015260a08701519150613f3d60c0870183613244565b60c08701519150613f5160e0870183613244565b60e08701519150610100613f6781880184613244565b8701519150610120613f7b87820184613237565b8701519150610140613f8f87820184613237565b80880151925050610160818786030181880152613fac858461324a565b945080880151925050610180818786030181880152613fcb858461324a565b9450808801519250506101a0818786030181880152613fea858461324a565b908801516101c0888101919091528801516101e080890191909152880151610200808901919091528801519094509150610220905061402b81870183613244565b86015161024086810191909152860151610260808701919091529095015193019290925250919050565b90815260200190565b918252602082015260400190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561409c5761409c6142ce565b604052919050565b600067ffffffffffffffff8211156140be576140be6142ce565b50601f01601f191660200190565b600082198211156140df576140df6142b8565b500190565b6000826140ff57634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116141165750614141565b818704821115614128576141286142b8565b8086161561413557918102915b9490941c938002614107565b94509492505050565b6000610e2760001960ff85168460008261416657506001610e27565b8161417357506000610e27565b81600181146141895760028114614193576141c0565b6001915050610e27565b60ff8411156141a4576141a46142b8565b6001841b9150848211156141ba576141ba6142b8565b50610e27565b5060208310610133831016604e8410600b84101617156141f3575081810a838111156141ee576141ee6142b8565b610e27565b6142008484846001614104565b808604821115614212576142126142b8565b02949350505050565b6000816000190483118215151615614235576142356142b8565b500290565b60008282101561424c5761424c6142b8565b500390565b60005b8381101561426c578181015183820152602001614254565b838111156121e55750506000910152565b60028104600182168061429157607f821691505b602082108114156142b257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461298d57600080fd5b801515811461298d57600080fdfea264697066735822122029e00724873634cc94f2f5fdcbdd006d2d889aa74f4fbb9dbf5b430a9d717d9b64736f6c63430008000033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102275760003560e01c806358a687ec1161013057806398e16255116100b8578063b37565061161007c578063b37565061461048b578063bbd94459146104a0578063c24fe16c146104b3578063dd62ed3e146104bb578063f59e4f65146104ce57610227565b806398e1625514610428578063a0a83f8c1461043d578063a457c2d714610450578063a9059cbb14610463578063a91e97501461047657610227565b806391b14c5f116100ff57806391b14c5f146103df578063937f6e77146103f257806395d89b41146104055780639711715a1461040d578063981b24d01461041557610227565b806358a687ec1461039e5780635b1cdef2146103a657806370a08231146103b95780638ca3d4bb146103cc57610227565b80632d8b95a0116101b357806340e688da1161018257806340e688da1461033a57806349d3f1611461035d5780634ee2cd7e1461037057806350c73efe1461038357806354fd4d501461039657610227565b80632d8b95a0146102ec5780632e61a571146102ff578063313ce56714610312578063395093511461032757610227565b80631818e2ec116101fa5780631818e2ec146102945780631865c57d146102a957806323b872dd146102be57806328a07025146102d15780632af4c31e146102d957610227565b8063025ed7991461022c57806306fdde0314610241578063095ea7b31461025f57806318160ddd1461027f575b600080fd5b61023f61023a366004612e4c565b6104d6565b005b6102496105e3565b60405161025691906134c8565b60405180910390f35b61027261026d366004612e21565b610675565b60405161025691906134bd565b610287610693565b6040516102569190614055565b61029c610699565b6040516102569190613dc1565b6102b16109e0565b6040516102569190613eb8565b6102726102cc366004612de1565b610d9c565b61023f610e2e565b61023f6102e7366004612d8d565b6111a2565b61023f6102fa366004612e4c565b61121b565b61023f61030d366004612d8d565b611287565b61031a611315565b604051610256919061406c565b610272610335366004612e21565b61131a565b61034d610348366004612d8d565b61136e565b604051610256949392919061336a565b61023f61036b366004612e4c565b61139f565b61028761037e366004612e21565b611410565b610287610391366004612d8d565b611459565b610249611478565b61023f61148a565b6102876103b4366004612d8d565b611810565b6102876103c7366004612d8d565b611822565b61023f6103da366004612d8d565b611864565b61023f6103ed366004612d8d565b6118f2565b61023f610400366004612e84565b611961565b610249611a40565b610287611a4f565b6102876104233660046131e6565b611a82565b610430611ab2565b6040516102569190613390565b61028761044b366004612d8d565b611bad565b61027261045e366004612e21565b611bbf565b610272610471366004612e21565b611c38565b61047e611c4c565b6040516102569190613403565b610493611ccd565b6040516102569190613470565b61023f6104ae366004612d8d565b611d3c565b610287611fa7565b6102876104c9366004612da9565b611fad565b610249611fd8565b6104de611ff3565b6001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561051657600080fd5b505afa15801561052a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055291908101906130f1565b606001516001600160a01b0316336001600160a01b03161461058f5760405162461bcd60e51b815260040161058690613bbc565b60405180910390fd5b600e805462ff0000191662010000831515021790556040517f378762f5fbec582efe534abe7b1b8f7e4e4a4ed6ce28c15fc23e2024ead4fcc3906105d89033908490429061330f565b60405180910390a150565b6060600380546105f29061427d565b80601f016020809104026020016040519081016040528092919081815260200182805461061e9061427d565b801561066b5780601f106106405761010080835404028352916020019161066b565b820191906000526020600020905b81548152906001019060200180831161064e57829003601f168201915b5050505050905090565b6000610689610682612009565b848461200d565b5060015b92915050565b60025490565b6106a1612b63565b604051806101400160405280600960000180546106bd9061427d565b80601f01602080910402602001604051908101604052809291908181526020018280546106e99061427d565b80156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b50505050508152602001600960010180546107509061427d565b80601f016020809104026020016040519081016040528092919081815260200182805461077c9061427d565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050509183525050600b546001600160a01b039081166020830152600c54166040820152601080546060909201916108009061427d565b80601f016020809104026020016040519081016040528092919081815260200182805461082c9061427d565b80156108795780601f1061084e57610100808354040283529160200191610879565b820191906000526020600020905b81548152906001019060200180831161085c57829003601f168201915b50505050508152602001600960080180546108939061427d565b80601f01602080910402602001604051908101604052809291908181526020018280546108bf9061427d565b801561090c5780601f106108e15761010080835404028352916020019161090c565b820191906000526020600020905b8154815290600101906020018083116108ef57829003601f168201915b505050505081526020016009800180546109259061427d565b80601f01602080910402602001604051908101604052809291908181526020018280546109519061427d565b801561099e5780601f106109735761010080835404028352916020019161099e565b820191906000526020600020905b81548152906001019060200180831161098157829003601f168201915b505050505081526020016109b0610693565b81526020016109bd611315565b60ff168152600e54630100000090046001600160a01b0316602090910152919050565b6109e8612bd1565b600960405180610280016040529081600082018054610a069061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a329061427d565b8015610a7f5780601f10610a5457610100808354040283529160200191610a7f565b820191906000526020600020905b815481529060010190602001808311610a6257829003601f168201915b50505050508152602001600182018054610a989061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac49061427d565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b505050918352505060028201546001600160a01b03908116602083015260038301548116604083015260048301546060830152600583015460ff808216151560808501526101008083048216151560a0860152620100008304909116151560c08501526301000000909104821660e084015260068401549091169082015260078201805461012090920191610ba59061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd19061427d565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b50505050508152602001600882018054610c379061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c639061427d565b8015610cb05780601f10610c8557610100808354040283529160200191610cb0565b820191906000526020600020905b815481529060010190602001808311610c9357829003601f168201915b50505050508152602001600982018054610cc99061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf59061427d565b8015610d425780601f10610d1757610100808354040283529160200191610d42565b820191906000526020600020905b815481529060010190602001808311610d2557829003601f168201915b5050509183525050600a8201546020820152600b8201546040820152600c8201546060820152600d82015460ff1615156080820152600e82015460a0820152600f82015460c082015260109091015460e090910152905090565b6000610da98484846120c1565b6001600160a01b038416600090815260016020526040812081610dca612009565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610e0d5760405162461bcd60e51b81526004016105869061390d565b610e2185610e19612009565b85840361200d565b60019150505b9392505050565b60165460ff1615610e515760405162461bcd60e51b815260040161058690613583565b600c546001600160a01b03163314610e7b5760405162461bcd60e51b815260040161058690613b5f565b600f54604051631d623e0560e11b81526001600160a01b03909116906000908290633ac47c0a90610eb0903090600401613292565b6101406040518083038186803b158015610ec957600080fd5b505afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190612ef8565b90508060400151610f245760405162461bcd60e51b815260040161058690613955565b8060600151610f455760405162461bcd60e51b815260040161058690613c19565b60208101516001600160a01b03163014610f715760405162461bcd60e51b815260040161058690613ce3565b8060e00151421115610f955760405162461bcd60e51b8152600401610586906136b4565b60008160a001516009600c015411610fb1578160a00151610fb5565b6015545b604051636eb1769f60e11b8152909150600090309063dd62ed3e90610fe090339084906004016132a6565b60206040518083038186803b158015610ff857600080fd5b505afa15801561100c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103091906131fe565b9050600061103e82846121eb565b905080156110ff57336000908152601f6020526040812080548392906110659084906140cc565b90915550506019805482919060009061107f9084906140cc565b90915550506040516323b872dd60e01b815230906323b872dd906110ab903390849087906004016132eb565b602060405180830381600087803b1580156110c557600080fd5b505af11580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd9190612e68565b505b600061111261110c610693565b856121eb565b90506000611120838361423a565b9050801561114757611147333083611136612228565b6001600160a01b0316929190612232565b6016805460ff1916600117905542601881905560178390556040517f09c223cfcd8c93e245f558f5f8de755fc0930fd9bc257441155ef5d54a170e0f916111919133918691613349565b60405180910390a150505050505050565b600c546001600160a01b031633146111cc5760405162461bcd60e51b815260040161058690613b5f565b600c80546001600160a01b0319166001600160a01b0383161790556040517fb4fa0c8f1565e6385961540cac5b9884d84157c515100cf972728e8be8dacdd3906105d8903390849042906132eb565b600c546001600160a01b031633146112455760405162461bcd60e51b815260040161058690613b5f565b600e805460ff19168215151790556040517f9f9c59041e1db26af9a0f9d072677adec7d0a57053d68e6e298a48535b8bbc8e906105d89033908490429061330f565b600c546001600160a01b031633146112b15760405162461bcd60e51b815260040161058690613b5f565b60165460ff16156112d45760405162461bcd60e51b815260040161058690613583565b6112df81600161228a565b7f5c6ace57e04d50c89abdde343bc20b6dbe48b8ce80684b10a2633f157b637d7533826001426040516105d894939291906132c0565b601290565b6000610689611327612009565b848460016000611335612009565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461136991906140cc565b61200d565b601e6020526000908152604090208054600182015460028301546003909301546001600160a01b0390921692909184565b600c546001600160a01b031633146113c95760405162461bcd60e51b815260040161058690613b5f565b600e805461ff001916610100831515021790556040517f2f824341849edde519544d4a9e11421845a643b53a544a5e50fbe369cd44da4a906105d89033908490429061330f565b6001600160a01b0382166000908152600560205260408120819081906114379085906123ab565b915091508161144e5761144985611459565b611450565b805b95945050505050565b6001600160a01b0381166000908152602081905260409020545b919050565b6060600960010180546105f29061427d565b60165460ff16156114ad5760405162461bcd60e51b815260040161058690613583565b336114b781612457565b6114d35760405162461bcd60e51b81526004016105869061366b565b6000816001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561150e57600080fd5b505afa158015611522573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261154a9190810190612fa1565b905080610100015161156e5760405162461bcd60e51b815260040161058690613d33565b610160810151610180820151610140830151811580159061159757508161159486611822565b10155b6115b35760405162461bcd60e51b815260040161058690613a55565b6000831180156116455750826115c7612228565b6001600160a01b03166370a08231876040518263ffffffff1660e01b81526004016115f29190613292565b60206040518083038186803b15801561160a57600080fd5b505afa15801561161e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164291906131fe565b10155b6116615760405162461bcd60e51b815260040161058690613775565b826009600a01600082825461167691906140cc565b9091555050601480548391906000906116909084906140cc565b9091555050604080516080810182526001600160a01b0380881680835260208084018781528486018981524260608701908152601c8054600181810183556000928352895160049092027f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21181018054938b166001600160a01b031994851617905586517f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21282015585517f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21382015584517f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21490910155968252601e90955297909720865181549616959093169490941782555191810191909155905160028201559151600392909201919091556015548211156117cb5760158290555b7fcbf0fbac05ba7258619b5b6f20bf2b567ce1a76f2f8f0a58f9e7fb3e90958c4833848642604051611800949392919061336a565b60405180910390a1505050505050565b601f6020526000908152604090205481565b60165460009060ff161561185b57600c546001600160a01b0383811691161461184c576000611854565b611854610693565b9050611473565b61068d82611459565b600c546001600160a01b0316331461188e5760405162461bcd60e51b815260040161058690613b5f565b60165460ff16156118b15760405162461bcd60e51b815260040161058690613583565b6118bc81600061228a565b7f5c6ace57e04d50c89abdde343bc20b6dbe48b8ce80684b10a2633f157b637d7533826000426040516105d894939291906132c0565b60165460ff16156119155760405162461bcd60e51b815260040161058690613583565b600f546001600160a01b0316331461193f5760405162461bcd60e51b8152600401610586906137f9565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b0316331461198b5760405162461bcd60e51b815260040161058690613b5f565b6040805180820190915281815242602080830191909152601a80546001810182556000919091528251805160029092027f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e01926119ed92849290910190612c96565b506020918201516001909101558151611a0c9160109190840190612c96565b507f39b28594242c42fce47a0a6e63bac12adbd07fbb35580f5a54b236858101d58a8133426040516105d8939291906134db565b6060600480546105f29061427d565b60165460009060ff1615611a755760405162461bcd60e51b815260040161058690613583565b611a7d612573565b905090565b6000806000611a928460066123ab565b9150915081611aa857611aa3610693565b611aaa565b805b949350505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611ba45783829060005260206000209060020201604051806040016040529081600082018054611b099061427d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b359061427d565b8015611b825780601f10611b5757610100808354040283529160200191611b82565b820191906000526020600020905b815481529060010190602001808311611b6557829003601f168201915b5050505050815260200160018201548152505081526020019060010190611ad6565b50505050905090565b601d6020526000908152604090205481565b60008060016000611bce612009565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015611c1a5760405162461bcd60e51b815260040161058690613d7c565b611c2e611c25612009565b8585840361200d565b5060019392505050565b6000610689611c45612009565b84846120c1565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611ba4576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460608301529083529092019101611c70565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611ba457600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900460ff16151581830152825260019092019101611cf1565b60165460ff16611d5e5760405162461bcd60e51b8152600401610586906138cc565b600e54610100900460ff161580611df35750611d78611ff3565b6001600160a01b0316633657e851826040518263ffffffff1660e01b8152600401611da39190613292565b60206040518083038186803b158015611dbb57600080fd5b505afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df39190612e68565b611e0f5760405162461bcd60e51b815260040161058690613856565b6000611e1b8230611fad565b905060008111611e3d5760405162461bcd60e51b8152600401610586906139a6565b6000611e47610693565b601754611e54908461421b565b611e5e91906140e4565b905060008111611e805760405162461bcd60e51b8152600401610586906135d9565b6001600160a01b0383166000908152601f602052604081208054839290611ea89084906140cc565b909155505060198054829190600090611ec29084906140cc565b90915550611ee590508382611ed5612228565b6001600160a01b031691906125c7565b6040516323b872dd60e01b815230906323b872dd90611f0c908690849087906004016132eb565b602060405180830381600087803b158015611f2657600080fd5b505af1158015611f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5e9190612e68565b50826001600160a01b03167f2aec1c87f3bc903aa0be5af816e24360e038c884cb96b991091f860698e3a2598242604051611f9a92919061405e565b60405180910390a2505050565b61271081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600960000180546105f29061427d565b505050565b5490565b600e54630100000090046001600160a01b031690565b3390565b6001600160a01b0383166120335760405162461bcd60e51b815260040161058690613ae4565b6001600160a01b0382166120595760405162461bcd60e51b815260040161058690613629565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906120b4908590614055565b60405180910390a3505050565b6001600160a01b0383166120e75760405162461bcd60e51b815260040161058690613a10565b6001600160a01b03821661210d5760405162461bcd60e51b815260040161058690613540565b6121188383836125e6565b6001600160a01b038316600090815260208190526040902054818110156121515760405162461bcd60e51b8152600401610586906136e9565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906121889084906140cc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121d29190614055565b60405180910390a36121e5848484611fea565b50505050565b60006127106121f861263e565b612202919061421b565b61220a612653565b612214848661421b565b61221e919061421b565b610e2791906140e4565b6000611a7d6126cd565b6121e5846323b872dd60e01b858585604051602401612253939291906132eb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612754565b612293826127e3565b156122fe576001600160a01b0382166000908152601d6020526040902054601b805483929081106122d457634e487b7160e01b600052603260045260246000fd5b60009182526020909120018054911515600160a01b0260ff60a01b199092169190911790556123a7565b604080518082019091526001600160a01b03808416825282151560208301908152601b805460018181018355600083905294517f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1909101805493511515600160a01b0260ff60a01b19929095166001600160a01b031990941693909317169290921790555461238d919061423a565b6001600160a01b0383166000908152601d60205260409020555b5050565b600080600084116123ce5760405162461bcd60e51b815260040161058690613c69565b6123d661286f565b8411156123f55760405162461bcd60e51b815260040161058690613509565b6000612401848661287b565b845490915081141561241a576000809250925050612450565b600184600101828154811061243f57634e487b7160e01b600052603260045260246000fd5b906000526020600020015492509250505b9250929050565b6000600960030160009054906101000a90046001600160a01b03166001600160a01b0316826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b1580156124b457600080fd5b505afa1580156124c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f09190810190612fa1565b606001516001600160a01b0316141561250b57506001611473565b612514826127e3565b801561068d57506001600160a01b0382166000908152601d6020526040902054601b8054909190811061255757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600160a01b900460ff1692915050565b600061257f600861295a565b600061258961286f565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb67816040516125ba9190614055565b60405180910390a1905090565b611fea8363a9059cbb60e01b8484604051602401612253929190613330565b6125f1838383611fea565b6001600160a01b0383166126155761260882612963565b612610612990565b611fea565b6001600160a01b03821661262c5761260883612963565b61263583612963565b611fea82612963565b6000612648611315565b611a7d90600a61414a565b600061265d6126cd565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561269557600080fd5b505afa1580156126a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126489190613216565b60006126d7611ff3565b6001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561270f57600080fd5b505afa158015612723573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261274b91908101906130f1565b60800151905090565b60006127a9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661299f9092919063ffffffff16565b805190915015611fea57808060200190518101906127c79190612e68565b611fea5760405162461bcd60e51b815260040161058690613c99565b6001600160a01b0381166000908152601d6020526040812054601b5461280d576000915050611473565b601b548110612820576000915050611473565b826001600160a01b0316601b828154811061284b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614610689576000915050611473565b6000611a7d6008611fef565b815460009061288c5750600061068d565b82546000905b808210156128f65760006128a683836129ae565b9050848682815481106128c957634e487b7160e01b600052603260045260246000fd5b906000526020600020015411156128e2578091506128f0565b6128ed8160016140cc565b92505b50612892565b6000821180156129395750838561290e60018561423a565b8154811061292c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154145b156129525761294960018361423a565b9250505061068d565b50905061068d565b80546001019055565b6001600160a01b038116600090815260056020526040902061298d9061298883611459565b6129c9565b50565b61299d6006612988610693565b565b6060611aaa8484600085612a13565b60006129bd60028484186140e4565b610e27908484166140cc565b60006129d361286f565b9050806129df84612ad3565b1015611fea578254600180820185556000858152602080822090930193909355938401805494850181558252902090910155565b606082471015612a355760405162461bcd60e51b81526004016105869061372f565b612a3e85612b24565b612a5a5760405162461bcd60e51b815260040161058690613b28565b600080866001600160a01b03168587604051612a769190613276565b60006040518083038185875af1925050503d8060008114612ab3576040519150601f19603f3d011682016040523d82523d6000602084013e612ab8565b606091505b5091509150612ac8828286612b2a565b979650505050505050565b8054600090612ae457506000611473565b81548290612af49060019061423a565b81548110612b1257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050611473565b3b151590565b60608315612b39575081610e27565b825115612b495782518084602001fd5b8160405162461bcd60e51b815260040161058691906134c8565b604051806101400160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600081526020016000815260200160006001600160a01b031681525090565b604051806102800160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160001515815260200160001515815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525090565b828054612ca29061427d565b90600052602060002090601f016020900481019282612cc45760008555612d0a565b82601f10612cdd57805160ff1916838001178555612d0a565b82800160010185558215612d0a579182015b82811115612d0a578251825591602001919060010190612cef565b50612d16929150612d1a565b5090565b5b80821115612d165760008155600101612d1b565b8051611473816142e4565b8051611473816142f9565b600082601f830112612d55578081fd5b8151612d68612d63826140a4565b61407a565b818152846020838601011115612d7c578283fd5b61144e826020830160208701614251565b600060208284031215612d9e578081fd5b8135610e27816142e4565b60008060408385031215612dbb578081fd5b8235612dc6816142e4565b91506020830135612dd6816142e4565b809150509250929050565b600080600060608486031215612df5578081fd5b8335612e00816142e4565b92506020840135612e10816142e4565b929592945050506040919091013590565b60008060408385031215612e33578182fd5b8235612e3e816142e4565b946020939093013593505050565b600060208284031215612e5d578081fd5b8135610e27816142f9565b600060208284031215612e79578081fd5b8151610e27816142f9565b600060208284031215612e95578081fd5b813567ffffffffffffffff811115612eab578182fd5b8201601f81018413612ebb578182fd5b8035612ec9612d63826140a4565b818152856020838501011115612edd578384fd5b81602084016020830137908101602001929092525092915050565b6000610140808385031215612f0b578182fd5b612f148161407a565b9050612f1f83612d2f565b8152612f2d60208401612d2f565b6020820152612f3e60408401612d3a565b6040820152612f4f60608401612d3a565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120612f96818501612d2f565b908201529392505050565b600060208284031215612fb2578081fd5b815167ffffffffffffffff80821115612fc9578283fd5b81840191506101a0808387031215612fdf578384fd5b612fe88161407a565b9050825182811115612ff8578485fd5b61300487828601612d45565b825250602083015182811115613018578485fd5b61302487828601612d45565b60208301525061303660408401612d2f565b604082015261304760608401612d2f565b606082015260808301518281111561305d578485fd5b61306987828601612d45565b60808301525061307b60a08401612d2f565b60a082015261308c60c08401612d2f565b60c082015260e083015160e082015261010091506130ab828401612d3a565b8282015261012091506130bf828401612d3a565b918101919091526101408281015190820152610160808301519082015261018091820151918101919091529392505050565b600060208284031215613102578081fd5b815167ffffffffffffffff80821115613119578283fd5b9083019060e0828603121561312c578283fd5b61313660e061407a565b825182811115613144578485fd5b61315087828601612d45565b825250602083015182811115613164578485fd5b61317087828601612d45565b60208301525061318260408401612d2f565b604082015261319360608401612d2f565b60608201526131a460808401612d2f565b60808201526131b560a08401612d2f565b60a082015260c0830151828111156131cb578485fd5b6131d787828601612d45565b60c08301525095945050505050565b6000602082840312156131f7578081fd5b5035919050565b60006020828403121561320f578081fd5b5051919050565b600060208284031215613227578081fd5b815160ff81168114610e27578182fd5b6001600160a01b03169052565b15159052565b60008151808452613262816020860160208601614251565b601f01601f19169290920160200192915050565b60008251613288818460208701614251565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03948516815292909316602083015215156040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039390931683529015156020830152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156133f557888303603f19018552815180518785526133d88886018261324a565b9189015194890194909452948701949250908601906001016133b4565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561346357815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613420565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561346357815180516001600160a01b03168552860151151586850152928401929085019060010161348d565b901515815260200190565b600060208252610e27602083018461324a565b6000606082526134ee606083018661324a565b6001600160a01b039490941660208301525060400152919050565b6020808252601d908201527f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526036908201527f41737365745472616e7366657261626c653a20416374696f6e20666f726269646040820152753232b7161030b9b9b2ba103634b8bab4b230ba32b21760511b606082015260800190565b60208082526030908201527f41737365745472616e7366657261626c653a206e6f206c69717569646174696f60408201526f6e2066756e647320746f20636c61696d60801b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526029908201527f41737365745472616e7366657261626c653a2043616d706169676e206e6f742060408201526830b8383937bb32b21760b91b606082015260800190565b6020808252818101527f41737365745472616e7366657261626c653a2050726963652065787069726564604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b602080825260609082018190527f41737365745472616e7366657261626c653a2043616d706169676e206861732060408301527f7369676e616c6c6564207468652073616c652066696e616c697a6174696f6e20908201527f627574207261697365642066756e647320617265206e6f742070726573656e74608082015260a00190565b6020808252603b908201527f41737365745472616e7366657261626c653a204f6e6c7920617078526567697360408201527f7472792063616e2063616c6c20746869732066756e6374696f6e2e0000000000606082015260800190565b60208082526050908201527f41737365745472616e7366657261626c653a2077616c6c6574206d757374206260408201527f652077686974656c6973746564206265666f726520636c61696d696e67206c6960608201526f38bab4b230ba34b7b71039b430b9329760811b608082015260a00190565b60208082526021908201527f41737365745472616e7366657261626c653a206e6f74206c69717569646174656040820152601960fa1b606082015260800190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b60208082526031908201527f41737365745472616e7366657261626c653a204e6f74207265676973746572656040820152706420696e2041707820526567697374727960781b606082015260800190565b60208082526044908201527f41737365745472616e7366657261626c653a206e6f20746f6b656e732061707060408201527f726f76656420666f7220636c61696d696e67206c69717569646174696f6e20736060820152636861726560e01b608082015260a00190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526063908201527f41737365745472616e7366657261626c653a2043616d706169676e206861732060408201527f7369676e616c6c6564207468652073616c652066696e616c697a6174696f6e2060608201527f6275742063616d706169676e20746f6b656e7320617265206e6f742070726573608082015262195b9d60ea1b60a082015260c00190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252603b908201527f41737365745472616e7366657261626c653a204f6e6c7920617373657420637260408201527f6561746f722063616e206d616b65207468697320616374696f6e2e0000000000606082015260800190565b6020808252603a908201527f41737365745472616e7366657261626c653a204f6e6c7920697373756572206f60408201527f776e65722063616e206d616b65207468697320616374696f6e2e000000000000606082015260800190565b60208082526030908201527f41737365745472616e7366657261626c653a20417373657420626c6f636b656460408201526f20696e2041707820526567697374727960801b606082015260800190565b60208082526016908201527504552433230536e617073686f743a20696420697320360541b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526030908201527f41737365745472616e7366657261626c653a20496e76616c6964206d6972726f60408201526f1c995908185cdcd95d081c9958dbdc9960821b606082015260800190565b60208082526029908201527f41737365745472616e7366657261626c653a2043616d706169676e206e6f7420604082015268199a5b985b1a5e995960ba1b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6000602082528251610140806020850152613de061016085018361324a565b91506020850151601f1980868503016040870152613dfe848361324a565b935060408701519150613e146060870183613237565b60608701519150613e286080870183613237565b60808701519150808685030160a0870152613e43848361324a565b935060a08701519150808685030160c0870152613e60848361324a565b935060c08701519150808685030160e087015250613e7e838261324a565b60e087015161010087810191909152870151610120808801919091528701519093509050613eae82860182613237565b5090949350505050565b6000602082528251610280806020850152613ed76102a085018361324a565b91506020850151601f1980868503016040870152613ef5848361324a565b935060408701519150613f0b6060870183613237565b60608701519150613f1f6080870183613237565b608087015160a087015260a08701519150613f3d60c0870183613244565b60c08701519150613f5160e0870183613244565b60e08701519150610100613f6781880184613244565b8701519150610120613f7b87820184613237565b8701519150610140613f8f87820184613237565b80880151925050610160818786030181880152613fac858461324a565b945080880151925050610180818786030181880152613fcb858461324a565b9450808801519250506101a0818786030181880152613fea858461324a565b908801516101c0888101919091528801516101e080890191909152880151610200808901919091528801519094509150610220905061402b81870183613244565b86015161024086810191909152860151610260808701919091529095015193019290925250919050565b90815260200190565b918252602082015260400190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561409c5761409c6142ce565b604052919050565b600067ffffffffffffffff8211156140be576140be6142ce565b50601f01601f191660200190565b600082198211156140df576140df6142b8565b500190565b6000826140ff57634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116141165750614141565b818704821115614128576141286142b8565b8086161561413557918102915b9490941c938002614107565b94509492505050565b6000610e2760001960ff85168460008261416657506001610e27565b8161417357506000610e27565b81600181146141895760028114614193576141c0565b6001915050610e27565b60ff8411156141a4576141a46142b8565b6001841b9150848211156141ba576141ba6142b8565b50610e27565b5060208310610133831016604e8410600b84101617156141f3575081810a838111156141ee576141ee6142b8565b610e27565b6142008484846001614104565b808604821115614212576142126142b8565b02949350505050565b6000816000190483118215151615614235576142356142b8565b500290565b60008282101561424c5761424c6142b8565b500390565b60005b8381101561426c578181015183820152602001614254565b838111156121e55750506000910152565b60028104600182168061429157607f821691505b602082108114156142b257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461298d57600080fd5b801515811461298d57600080fdfea264697066735822122029e00724873634cc94f2f5fdcbdd006d2d889aa74f4fbb9dbf5b430a9d717d9b64736f6c63430008000033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
