{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC4626CashFlowLender",
  "sourceName": "contracts/ERC4626CashFlowLender.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "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": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "destination",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "destination",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CashOutPayout",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "currentDebt",
          "type": "int256"
        }
      ],
      "name": "DebtChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "oldDebt",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "currentDebt",
          "type": "int256"
        }
      ],
      "name": "RepayDebt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract SignedQuoteRiskModule",
          "name": "newRiskModule",
          "type": "address"
        }
      ],
      "name": "RiskModuleChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BORROWER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "CHANGE_RM_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "CUSTOMER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GUARDIAN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LP_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OWN_POLICY_CREATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "POLICY_CREATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REPLACER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESOLVER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "asset",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "destination",
          "type": "address"
        }
      ],
      "name": "borrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "destination",
          "type": "address"
        }
      ],
      "name": "cashOutPayouts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "convertToAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "convertToShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentDebt",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "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": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "contract SignedQuoteRiskModule",
          "name": "riskModule_",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "asset_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxMint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "maxRedeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "maxWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "payout",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "premium",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "lossProb",
          "type": "uint256[]"
        },
        {
          "internalType": "uint40[]",
          "name": "expiration",
          "type": "uint40[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "policyData",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "quoteSignatureR",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "quoteSignatureVS",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint40[]",
          "name": "quoteValidUntil",
          "type": "uint40[]"
        }
      ],
      "name": "newPoliciesInBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "riskModules",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "payout",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "premium",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "lossProb",
          "type": "uint256[]"
        },
        {
          "internalType": "uint40[]",
          "name": "expiration",
          "type": "uint40[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "policyData",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256[]",
          "name": "bucketId",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "quoteSignatureR",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "quoteSignatureVS",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint40[]",
          "name": "quoteValidUntil",
          "type": "uint40[]"
        }
      ],
      "name": "newPoliciesInBatchWithRm",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "newPolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "riskModule_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "newPolicyOnBehalfOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "riskModule_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "newPolicyWithRm",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "onPayoutReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "onPolicyExpired",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "onPolicyReplaced",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "previewDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "previewMint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "previewRedeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "previewWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "repayDebt",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "oldPolicy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "replacePolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData[]",
          "name": "policy",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256[]",
          "name": "payout",
          "type": "uint256[]"
        }
      ],
      "name": "resolvePoliciesInBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        }
      ],
      "name": "resolvePolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "customerWon",
          "type": "bool"
        }
      ],
      "name": "resolvePolicyFullPayout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "riskModule",
      "outputs": [
        {
          "internalType": "contract SignedQuoteRiskModule",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract SignedQuoteRiskModule",
          "name": "riskModule_",
          "type": "address"
        }
      ],
      "name": "setRiskModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516151ea6200011f600039600081816111be015281816111fe0152818161142b0152818161146b01526114fa01526151ea6000f3fe6080604052600436106103d95760003560e01c8063759076e5116101fd578063b7ee7d0111610118578063d6281d3e116100ab578063e5ef6f4b1161007a578063e5ef6f4b14610bfb578063e888b16714610c1b578063e8e617b714610c3b578063ef8b30f714610af9578063ffa600e314610c6557600080fd5b8063d6281d3e14610b79578063d905777e14610b99578063dd62ed3e14610bb9578063e1d3945014610bd957600080fd5b8063c6e6f592116100e7578063c6e6f59214610af9578063ce96cb7714610b19578063d3fba1a214610b39578063d547741f14610b5957600080fd5b8063b7ee7d0114610a99578063ba08765214610ab9578063c1d278cf14610ad9578063c63d75b61461076e57600080fd5b806395d89b4111610190578063a9059cbb1161015f578063a9059cbb14610a05578063af0e7e0c14610a25578063b3d7f6b914610a59578063b460af9414610a7957600080fd5b806395d89b411461099c5780639ed1a985146109b1578063a217fddf146109d0578063a457c2d7146109e557600080fd5b806382ff9c8c116101cc57806382ff9c8c1461091c5780638f15b4141461093c57806391d148541461095c57806394bf804d1461097c57600080fd5b8063759076e51461089057806378b86fbf146108a657806378fab260146108da5780637a702b3c146108fc57600080fd5b806324ea54f4116102f857806345f739ff1161028b57806352d1902d1161025a57806352d1902d146107e55780635ee0c7dd146107fa5780636b09de451461081a5780636e553f651461083a57806370a082311461085a57600080fd5b806345f739ff146107905780634b3fd148146107b25780634cdad506146104ba5780634f1ef286146107d257600080fd5b80633659cfe6116102c75780633659cfe6146106fb57806338d52e0f1461071b578063395093511461074e578063402d267d1461076e57600080fd5b806324ea54f4146106605780632f2ff15d14610694578063313ce567146106b457806336568abe146106db57600080fd5b80630a28a4771161037057806318160ddd1161033f57806318160ddd146105c7578063204d7923146105dc57806323b872dd14610610578063248a9ca31461063057600080fd5b80630a28a477146104fa5780630abf6b601461051a5780630e7b949e1461054e578063150b7a021461058257600080fd5b806305918a79116103ac57806305918a791461047857806306fdde031461049857806307a2d13a146104ba578063095ea7b3146104da57600080fd5b806301e1d114146103de57806301ffc9a71461040657806302a2e3bb1461043657806304f6f5b214610456575b600080fd5b3480156103ea57600080fd5b506103f3610c85565b6040519081526020015b60405180910390f35b34801561041257600080fd5b50610426610421366004613d68565b610cc9565b60405190151581526020016103fd565b34801561044257600080fd5b506103f3610451366004613dc1565b610d0f565b34801561046257600080fd5b50610476610471366004613e60565b610d86565b005b34801561048457600080fd5b506103f3610493366004613e7d565b610f2f565b3480156104a457600080fd5b506104ad611002565b6040516103fd9190613f21565b3480156104c657600080fd5b506103f36104d5366004613f54565b611094565b3480156104e657600080fd5b506104266104f5366004613f6d565b6110a1565b34801561050657600080fd5b506103f3610515366004613f54565b6110b9565b34801561052657600080fd5b506103f37f54371fd80f4f86e64c2b0cfb7152ea6c6649b1b07a69bd719c7da8bd4f65902881565b34801561055a57600080fd5b506103f37f2344277e405079ec07749d374ba0b5862a4e45a6a05ac889dbb4a991c6f9354d81565b34801561058e57600080fd5b506105ae61059d366004613f99565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016103fd565b3480156105d357600080fd5b5060fd546103f3565b3480156105e857600080fd5b506103f37f288a15c4a15d470e4cd9cad2f113b91206b520c26dbd3dd74627f0c057baa19c81565b34801561061c57600080fd5b5061042661062b366004614038565b6110c6565b34801561063c57600080fd5b506103f361064b366004613f54565b60009081526065602052604090206001015490565b34801561066c57600080fd5b506103f37f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b3480156106a057600080fd5b506104766106af366004614079565b6110ec565b3480156106c057600080fd5b506106c9611116565b60405160ff90911681526020016103fd565b3480156106e757600080fd5b506104766106f6366004614079565b611136565b34801561070757600080fd5b50610476610716366004613e60565b6111b4565b34801561072757600080fd5b5061012d546001600160a01b03165b6040516001600160a01b0390911681526020016103fd565b34801561075a57600080fd5b50610426610769366004613f6d565b611293565b34801561077a57600080fd5b506103f3610789366004613e60565b5060001990565b34801561079c57600080fd5b506103f360008051602061519583398151915281565b3480156107be57600080fd5b506104766107cd366004614079565b6112b5565b6104766107e0366004614148565b611421565b3480156107f157600080fd5b506103f36114ed565b34801561080657600080fd5b506105ae6108153660046141ac565b6115a0565b34801561082657600080fd5b50610476610835366004613f54565b6115b1565b34801561084657600080fd5b506103f3610855366004614079565b61164c565b34801561086657600080fd5b506103f3610875366004613e60565b6001600160a01b0316600090815260fb602052604090205490565b34801561089c57600080fd5b50610160546103f3565b3480156108b257600080fd5b506103f37f996bbdfe02e380a7d57d331edc0b802eeb8b44fb25af615058afab9a18e8a02381565b3480156108e657600080fd5b506103f360008051602061510e83398151915281565b34801561090857600080fd5b5061047661091736600461420b565b61167a565b34801561092857600080fd5b506103f3610937366004614238565b611708565b34801561094857600080fd5b506104766109573660046142e9565b61180a565b34801561096857600080fd5b50610426610977366004614079565b611923565b34801561098857600080fd5b506103f3610997366004614079565b61194e565b3480156109a857600080fd5b506104ad611972565b3480156109bd57600080fd5b5061015f546001600160a01b0316610736565b3480156109dc57600080fd5b506103f3600081565b3480156109f157600080fd5b50610426610a00366004613f6d565b611981565b348015610a1157600080fd5b50610426610a20366004613f6d565b611a07565b348015610a3157600080fd5b506103f37f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d07455581565b348015610a6557600080fd5b506103f3610a74366004613f54565b611a15565b348015610a8557600080fd5b506103f3610a94366004614372565b611a22565b348015610aa557600080fd5b506103f3610ab43660046143b4565b611a50565b348015610ac557600080fd5b506103f3610ad4366004614372565b611ba4565b348015610ae557600080fd5b50610476610af4366004614583565b611bc9565b348015610b0557600080fd5b506103f3610b14366004613f54565b611d33565b348015610b2557600080fd5b506103f3610b34366004613e60565b611d40565b348015610b4557600080fd5b50610476610b5436600461470e565b611d5b565b348015610b6557600080fd5b50610476610b74366004614079565b611e4e565b348015610b8557600080fd5b506105ae610b943660046141ac565b611e73565b348015610ba557600080fd5b506103f3610bb4366004613e60565b611f0b565b348015610bc557600080fd5b506103f3610bd43660046147a6565b611f24565b348015610be557600080fd5b506103f360008051602061517583398151915281565b348015610c0757600080fd5b50610476610c163660046147d4565b611f4f565b348015610c2757600080fd5b50610476610c36366004614079565b612113565b348015610c4757600080fd5b506105ae610c56366004614038565b63e8e617b760e01b9392505050565b348015610c7157600080fd5b50610476610c80366004614922565b6122fb565b600080610c90612352565b90506000610160541215610cbb5761016054610cab90614967565b610cb59082614983565b91505090565b61016054610cb59082614996565b60006001600160e01b03198216633ece0a8960e01b1480610cfa57506001600160e01b03198216635ee0c7dd60e01b145b80610d095750610d09826123c6565b92915050565b60007f54371fd80f4f86e64c2b0cfb7152ea6c6649b1b07a69bd719c7da8bd4f659028610d3b816123fb565b6000610d45612352565b9050610d5a8e8e8e8e8e8e8e8e8e8e8e612405565b50610d75610d66612352565b610d709083614983565b612529565b50509b9a5050505050505050505050565b7f996bbdfe02e380a7d57d331edc0b802eeb8b44fb25af615058afab9a18e8a023610db0816123fb565b6001600160a01b038216610ddf5760405162461bcd60e51b8152600401610dd6906149a9565b60405180910390fd5b610de761257b565b6001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e529190614a06565b6001600160a01b031614610ed95760405162461bcd60e51b815260206004820152604260248201527f4552433436323643617368466c6f774c656e6465723a206e6577207269736b4d60448201527f6f64756c65206d7573742062656c6f6e6720746f207468652073616d6520706f6064820152611bdb60f21b608482015260a401610dd6565b61015f80546001600160a01b0319166001600160a01b0384169081179091556040519081527fd4208580168eba30c1d9ae9fa910d2dba68e0ef5a8badee2d4e27c9d3d4a39039060200160405180910390a15050565b6000600080516020615195833981519152610f49816123fb565b6000610f53612352565b9050610f6861015f546001600160a01b031690565b6001600160a01b03166305918a798d8d8d8d308d8d8d8d6040518a63ffffffff1660e01b8152600401610fa399989796959493929190614a23565b6020604051808303816000875af1158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe69190614a75565b9250610ff3610d66612352565b50509998505050505050505050565b606060fe805461101190614a8e565b80601f016020809104026020016040519081016040528092919081815260200182805461103d90614a8e565b801561108a5780601f1061105f5761010080835404028352916020019161108a565b820191906000526020600020905b81548152906001019060200180831161106d57829003601f168201915b5050505050905090565b6000610d098260006125ea565b6000336110af818585612624565b5060019392505050565b6000610d09826001612748565b6000336110d4858285612778565b6110df8585856127f2565b60019150505b9392505050565b600082815260656020526040902060010154611107816123fb565b611111838361299d565b505050565b60008061012d546111319190600160a01b900460ff16614ac2565b905090565b6001600160a01b03811633146111a65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610dd6565b6111b08282612a23565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036111fc5760405162461bcd60e51b8152600401610dd690614adb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661124560008051602061512e833981519152546001600160a01b031690565b6001600160a01b03161461126b5760405162461bcd60e51b8152600401610dd690614b27565b61127481612a8a565b6040805160008082526020820190925261129091839190612ab4565b50565b6000336110af8185856112a68383611f24565b6112b09190614996565b612624565b7f2344277e405079ec07749d374ba0b5862a4e45a6a05ac889dbb4a991c6f9354d6112df816123fb565b826112e8612352565b10156113525760405162461bcd60e51b815260206004820152603360248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f7567604482015272682062616c616e636520746f20626f72726f7760681b6064820152608401610dd6565b61135b83612529565b611363612c1f565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303816000875af11580156113b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d89190614b73565b50816001600160a01b03167fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a367508460405161141491815260200190565b60405180910390a2505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114695760405162461bcd60e51b8152600401610dd690614adb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114b260008051602061512e833981519152546001600160a01b031690565b6001600160a01b0316146114d85760405162461bcd60e51b8152600401610dd690614b27565b6114e182612a8a565b6111b082826001612ab4565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461158d5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610dd6565b5060008051602061512e83398151915290565b635ee0c7dd60e01b5b949350505050565b60001981036115d457600061016054136115cc5760006115d1565b610160545b90505b610160546115e182612c66565b6116003330846115ef612c1f565b6001600160a01b0316929190612c79565b6101605460408051848152602081018490529081019190915233907f5970ab368b41592b8ee398793f9f4032529294b5a1244e1b2b59fd6629d0e79b9060600160405180910390a25050565b6000600080516020615175833981519152611666816123fb565b6116708484612ce4565b91505b5092915050565b60008051602061510e833981519152611692816123fb565b6116a461018084016101608501613e60565b6001600160a01b0316637a702b3c84846040518363ffffffff1660e01b81526004016116d1929190614c5c565b600060405180830381600087803b1580156116eb57600080fd5b505af11580156116ff573d6000803e3d6000fd5b50505050505050565b60007f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d074555611734816123fb565b600061173e612352565b90506117526101808e016101608f01613e60565b6001600160a01b03166382ff9c8c8e8e8e8e8e8e8e8e8e8e6040518b63ffffffff1660e01b815260040161178f9a99989796959493929190614c79565b6020604051808303816000875af11580156117ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d29190614a75565b925060006117de612352565b6117e89083614983565b905080156117f9576117f981612529565b5050509a9950505050505050505050565b600054610100900460ff161580801561182a5750600054600160ff909116105b806118445750303b158015611844575060005460ff166001145b6118a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610dd6565b6000805460ff1916600117905580156118ca576000805461ff0019166101001790555b6118d685858585612cfe565b801561191c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000600080516020615175833981519152611968816123fb565b6116708484612dc4565b606060ff805461101190614a8e565b6000338161198f8286611f24565b9050838110156119ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610dd6565b6119fc8286868403612624565b506001949350505050565b6000336110af8185856127f2565b6000610d098260016125ea565b6000600080516020615175833981519152611a3c816123fb565b611a47858585612dde565b95945050505050565b6000600080516020615195833981519152611a6a816123fb565b6000611a74612352565b90506000198703611b05578c6001600160a01b03166305918a798d8d8d8d308e8d8d8d6040518a63ffffffff1660e01b8152600401611abb99989796959493929190614a23565b6020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190614a75565b9250611b89565b8c6001600160a01b031663766dbc568d8d8d8d308e8e8e8e8e6040518b63ffffffff1660e01b8152600401611b439a99989796959493929190614cdd565b6020604051808303816000875af1158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190614a75565b92505b611b94610d66612352565b50509a9950505050505050505050565b6000600080516020615175833981519152611bbe816123fb565b611a47858585612e52565b600080516020615195833981519152611be1816123fb565b6000611beb612352565b905060005b8b51811015611d1957611d068d8281518110611c0e57611c0e614d38565b60200260200101518d8381518110611c2857611c28614d38565b60200260200101518d8481518110611c4257611c42614d38565b60200260200101518d8581518110611c5c57611c5c614d38565b60200260200101518d8681518110611c7657611c76614d38565b6020026020010151308d8881518110611c9157611c91614d38565b60200260200101518f8981518110611cab57611cab614d38565b60200260200101518e8a81518110611cc557611cc5614d38565b60200260200101518e8b81518110611cdf57611cdf614d38565b60200260200101518e8c81518110611cf957611cf9614d38565b6020026020010151612405565b5080611d1181614d4e565b915050611bf0565b50611d25610d66612352565b505050505050505050505050565b6000610d09826000612748565b6000610d09611d4e83612ec6565b611d56612352565b612eea565b60008051602061510e833981519152611d73816123fb565b60005b825181101561191c57848482818110611d9157611d91614d38565b90506101c00201610160016020810190611dab9190613e60565b6001600160a01b0316637a702b3c868684818110611dcb57611dcb614d38565b90506101c00201858481518110611de457611de4614d38565b60200260200101516040518363ffffffff1660e01b8152600401611e09929190614c5c565b600060405180830381600087803b158015611e2357600080fd5b505af1158015611e37573d6000803e3d6000fd5b505050508080611e4690614d4e565b915050611d76565b600082815260656020526040902060010154611e69816123fb565b6111118383612a23565b6000611e7d61257b565b6001600160a01b0316336001600160a01b031614611ef15760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792074686520506f6c696379506f6f6c2073686f756c642063616c6c2060448201526a1d1a1a5cc81b595d1a1bd960aa1b6064820152608401610dd6565b611efa82612c66565b50636b140e9f60e11b949350505050565b6000610d09611f1983612f00565b611d56610b14612352565b6001600160a01b03918216600090815260fc6020908152604080832093909416825291909152205490565b600080516020615195833981519152611f67816123fb565b6000611f71612352565b90506000611f8861015f546001600160a01b031690565b905060005b8b518110156120f057816001600160a01b03166305918a798d8381518110611fb757611fb7614d38565b60200260200101518d8481518110611fd157611fd1614d38565b60200260200101518d8581518110611feb57611feb614d38565b60200260200101518d868151811061200557612005614d38565b6020026020010151308e888151811061202057612020614d38565b60200260200101518e898151811061203a5761203a614d38565b60200260200101518e8a8151811061205457612054614d38565b60200260200101518e8b8151811061206e5761206e614d38565b60200260200101516040518a63ffffffff1660e01b815260040161209a99989796959493929190614a23565b6020604051808303816000875af11580156120b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120dd9190614a75565b50806120e881614d4e565b915050611f8d565b506121066120fc612352565b610d709084614983565b5050505050505050505050565b7f288a15c4a15d470e4cd9cad2f113b91206b520c26dbd3dd74627f0c057baa19c61213d816123fb565b60006101605412801561215c57506101605461215890614967565b8313155b6121c55760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a20616d6f756e74206d756044820152731cdd081899481b195cdcc81d1a185b881919589d60621b6064820152608401610dd6565b826121ce612352565b10156122395760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f75676044820152731a0818985b185b98d9481d1bc818d85cda1bdd5d60621b6064820152608401610dd6565b61224283612529565b61224a612c1f565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303816000875af115801561229b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122bf9190614b73565b50816001600160a01b03167fe2a52c6ceabaf7f3fc3f521853d811e633371d1a7d9d4678b585ac2348ee0d8f8460405161141491815260200190565b60008051602061510e833981519152612313816123fb565b61232561018084016101608501613e60565b6001600160a01b031663ffa600e384846040518363ffffffff1660e01b81526004016116d1929190614d67565b600061235c612c1f565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156123a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111319190614a75565b60006001600160e01b03198216637965db0b60e01b1480610d0957506301ffc9a760e01b6001600160e01b0319831614610d09565b6112908133612f1e565b60006000198603612496576040516305918a7960e01b81526001600160a01b038d16906305918a799061244c908e908e908e908e908e908d908d908d908d90600401614a23565b6020604051808303816000875af115801561246b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248f9190614a75565b905061251a565b604051633b36de2b60e11b81526001600160a01b038d169063766dbc56906124d4908e908e908e908e908e908d908f908e908e908e90600401614cdd565b6020604051808303816000875af11580156124f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125179190614a75565b90505b9b9a5050505050505050505050565b80610160600082825461253c9190614d86565b9091555050610160546040519081527fc7f3c2106cf3d0f81736749a1583b800014a964dc37d2f0eb8216c1b852317289060200160405180910390a150565b61015f5460408051634d15eb0360e01b815290516000926001600160a01b031691634d15eb039160048083019260209291908290030181865afa1580156125c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111319190614a06565b60006110e56125f7610c85565b612602906001614996565b61260e6000600a614e92565b60fd5461261b9190614996565b85919085612f77565b6001600160a01b0383166126865760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dd6565b6001600160a01b0382166126e75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dd6565b6001600160a01b03838116600081815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110e561275882600a614e92565b60fd546127659190614996565b61276d610c85565b61261b906001614996565b60006127848484611f24565b905060001981146127ec57818110156127df5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610dd6565b6127ec8484848403612624565b50505050565b6001600160a01b0383166128565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610dd6565b6001600160a01b0382166128b85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610dd6565b6001600160a01b038316600090815260fb6020526040902054818110156129305760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610dd6565b6001600160a01b03808516600081815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129909086815260200190565b60405180910390a36127ec565b6129a78282611923565b6111b05760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556129df3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612a2d8282611923565b156111b05760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50416111b0816123fb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612ae75761111183612fd2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612b41575060408051601f3d908101601f19168201909252612b3e91810190614a75565b60015b612ba45760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610dd6565b60008051602061512e8339815191528114612c135760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610dd6565b5061111183838361306e565b6000612c2961257b565b6001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c6573d6000803e3d6000fd5b80610160600082825461253c9190614ea1565b6040516001600160a01b03808516602483015283166044820152606481018290526127ec9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613093565b600080612cf084611d33565b90506110e533848684613168565b600054610100900460ff16612d255760405162461bcd60e51b8152600401610dd690614ec1565b612d2d6131e7565b612d356131e7565b6001600160a01b038116612da85760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a2061737365745f2063616044820152736e6e6f74206265207a65726f206164647265737360601b6064820152608401610dd6565b612db181613210565b612dbb8484613240565b6127ec82613271565b600080612dd084611a15565b90506110e533848387613168565b6000612de982611d40565b841115612e385760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610dd6565b6000612e43856110b9565b90506115a93385858885613375565b6000612e5d82611f0b565b841115612eac5760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610dd6565b6000612eb785611094565b90506115a93385858489613375565b6001600160a01b038116600090815260fb6020526040812054610d099060006125ea565b6000818310612ef957816110e5565b5090919050565b6001600160a01b038116600090815260fb6020526040812054610d09565b612f288282611923565b6111b057612f35816133f7565b612f40836020613409565b604051602001612f51929190614f0c565b60408051601f198184030181529082905262461bcd60e51b8252610dd691600401613f21565b600080612f858686866135a5565b90506001836002811115612f9b57612f9b614f81565b148015612fb8575060008480612fb357612fb3614f97565b868809115b15611a4757612fc8600182614996565b9695505050505050565b6001600160a01b0381163b61303f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610dd6565b60008051602061512e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6130778361368f565b6000825111806130845750805b15611111576127ec83836136cf565b60006130e8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136f49092919063ffffffff16565b90508051600014806131095750808060200190518101906131099190614b73565b6111115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610dd6565b61012d54613181906001600160a01b0316853085612c79565b61318b8382613703565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d784846040516131d9929190918252602082015260400190565b60405180910390a350505050565b600054610100900460ff1661320e5760405162461bcd60e51b8152600401610dd690614ec1565b565b600054610100900460ff166132375760405162461bcd60e51b8152600401610dd690614ec1565b611290816137c4565b600054610100900460ff166132675760405162461bcd60e51b8152600401610dd690614ec1565b6111b0828261384a565b600054610100900460ff166132985760405162461bcd60e51b8152600401610dd690614ec1565b6001600160a01b0381166132be5760405162461bcd60e51b8152600401610dd6906149a9565b6132c960003361388a565b61015f80546001600160a01b0319166001600160a01b0383161790556132ed612c1f565b6001600160a01b031663095ea7b361330361257b565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af1158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b09190614b73565b8161337e612352565b10156133ea5760405162461bcd60e51b815260206004820152603560248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f7567604482015274682062616c616e636520746f20776974686472617760581b6064820152608401610dd6565b61191c8585858585613894565b6060610d096001600160a01b03831660145b60606000613418836002614fad565b613423906002614996565b67ffffffffffffffff81111561343b5761343b6140a9565b6040519080825280601f01601f191660200182016040528015613465576020820181803683370190505b509050600360fc1b8160008151811061348057613480614d38565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106134af576134af614d38565b60200101906001600160f81b031916908160001a90535060006134d3846002614fad565b6134de906001614996565b90505b6001811115613556576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061351257613512614d38565b1a60f81b82828151811061352857613528614d38565b60200101906001600160f81b031916908160001a90535060049490941c9361354f81614fcc565b90506134e1565b5083156110e55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610dd6565b60008080600019858709858702925082811083820303915050806000036135df578382816135d5576135d5614f97565b04925050506110e5565b8084116136265760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610dd6565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61369881612fd2565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606110e5838360405180606001604052806027815260200161514e60279139613941565b60606115a984846000856139af565b6001600160a01b0382166137595760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610dd6565b8060fd600082825461376b9190614996565b90915550506001600160a01b038216600081815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff166137eb5760405162461bcd60e51b8152600401610dd690614ec1565b6000806137f783613a8a565b9150915081613807576012613809565b805b61012d80546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff166138715760405162461bcd60e51b8152600401610dd690614ec1565b60fe61387d8382615031565b5060ff6111118282615031565b6111b0828261299d565b826001600160a01b0316856001600160a01b0316146138b8576138b8838683612778565b6138c28382613b66565b61012d546138da906001600160a01b03168584613c9a565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051613932929190918252602082015260400190565b60405180910390a45050505050565b6060600080856001600160a01b03168560405161395e91906150f1565b600060405180830381855af49150503d8060008114613999576040519150601f19603f3d011682016040523d82523d6000602084013e61399e565b606091505b5091509150612fc886838387613cca565b606082471015613a105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610dd6565b600080866001600160a01b03168587604051613a2c91906150f1565b60006040518083038185875af1925050503d8060008114613a69576040519150601f19603f3d011682016040523d82523d6000602084013e613a6e565b606091505b5091509150613a7f87838387613cca565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691613ad1916150f1565b600060405180830381855afa9150503d8060008114613b0c576040519150601f19603f3d011682016040523d82523d6000602084013e613b11565b606091505b5091509150818015613b2557506020815110155b15613b5957600081806020019051810190613b409190614a75565b905060ff8111613b57576001969095509350505050565b505b5060009485945092505050565b6001600160a01b038216613bc65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610dd6565b6001600160a01b038216600090815260fb602052604090205481811015613c3a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610dd6565b6001600160a01b038316600081815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516001600160a01b03831660248201526044810182905261111190849063a9059cbb60e01b90606401612cad565b60608315613d39578251600003613d32576001600160a01b0385163b613d325760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dd6565b50816115a9565b6115a98383815115613d4e5781518083602001fd5b8060405162461bcd60e51b8152600401610dd69190613f21565b600060208284031215613d7a57600080fd5b81356001600160e01b0319811681146110e557600080fd5b6001600160a01b038116811461129057600080fd5b803564ffffffffff81168114613dbc57600080fd5b919050565b60008060008060008060008060008060006101608c8e031215613de357600080fd5b8b35613dee81613d92565b9a5060208c0135995060408c0135985060608c01359750613e1160808d01613da7565b965060a08c0135613e2181613d92565b955060c08c0135945060e08c013593506101008c013592506101208c01359150613e4e6101408d01613da7565b90509295989b509295989b9093969950565b600060208284031215613e7257600080fd5b81356110e581613d92565b60008060008060008060008060006101208a8c031215613e9c57600080fd5b8935985060208a0135975060408a01359650613eba60608b01613da7565b955060808a0135613eca81613d92565b945060a08a0135935060c08a0135925060e08a01359150613eee6101008b01613da7565b90509295985092959850929598565b60005b83811015613f18578181015183820152602001613f00565b50506000910152565b6020815260008251806020840152613f40816040850160208701613efd565b601f01601f19169190910160400192915050565b600060208284031215613f6657600080fd5b5035919050565b60008060408385031215613f8057600080fd5b8235613f8b81613d92565b946020939093013593505050565b600080600080600060808688031215613fb157600080fd5b8535613fbc81613d92565b94506020860135613fcc81613d92565b935060408601359250606086013567ffffffffffffffff80821115613ff057600080fd5b818801915088601f83011261400457600080fd5b81358181111561401357600080fd5b89602082850101111561402557600080fd5b9699959850939650602001949392505050565b60008060006060848603121561404d57600080fd5b833561405881613d92565b9250602084013561406881613d92565b929592945050506040919091013590565b6000806040838503121561408c57600080fd5b82359150602083013561409e81613d92565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140e8576140e86140a9565b604052919050565b600067ffffffffffffffff83111561410a5761410a6140a9565b61411d601f8401601f19166020016140bf565b905082815283838301111561413157600080fd5b828260208301376000602084830101529392505050565b6000806040838503121561415b57600080fd5b823561416681613d92565b9150602083013567ffffffffffffffff81111561418257600080fd5b8301601f8101851361419357600080fd5b6141a2858235602084016140f0565b9150509250929050565b600080600080608085870312156141c257600080fd5b84356141cd81613d92565b935060208501356141dd81613d92565b93969395505050506040820135916060013590565b60006101c0828403121561420557600080fd5b50919050565b6000806101e0838503121561421f57600080fd5b61422984846141f2565b946101c0939093013593505050565b6000806000806000806000806000806102e08b8d03121561425857600080fd5b6142628c8c6141f2565b99506101c08b013598506101e08b013597506102008b013596506142896102208c01613da7565b95506102408b013594506102608b013593506102808b013592506102a08b013591506142b86102c08c01613da7565b90509295989b9194979a5092959850565b600082601f8301126142da57600080fd5b6110e5838335602085016140f0565b600080600080608085870312156142ff57600080fd5b843567ffffffffffffffff8082111561431757600080fd5b614323888389016142c9565b9550602087013591508082111561433957600080fd5b50614346878288016142c9565b935050604085013561435781613d92565b9150606085013561436781613d92565b939692955090935050565b60008060006060848603121561438757600080fd5b83359250602084013561439981613d92565b915060408401356143a981613d92565b809150509250925092565b6000806000806000806000806000806101408b8d0312156143d457600080fd5b8a356143df81613d92565b995060208b0135985060408b0135975060608b0135965061440260808c01613da7565b955060a08b0135945060c08b0135935060e08b013592506101008b013591506142b86101208c01613da7565b600067ffffffffffffffff821115614448576144486140a9565b5060051b60200190565b600082601f83011261446357600080fd5b813560206144786144738361442e565b6140bf565b82815260059290921b8401810191818101908684111561449757600080fd5b8286015b848110156144bb5780356144ae81613d92565b835291830191830161449b565b509695505050505050565b600082601f8301126144d757600080fd5b813560206144e76144738361442e565b82815260059290921b8401810191818101908684111561450657600080fd5b8286015b848110156144bb578035835291830191830161450a565b600082601f83011261453257600080fd5b813560206145426144738361442e565b82815260059290921b8401810191818101908684111561456157600080fd5b8286015b848110156144bb5761457681613da7565b8352918301918301614565565b6000806000806000806000806000806101408b8d0312156145a357600080fd5b8a3567ffffffffffffffff808211156145bb57600080fd5b6145c78e838f01614452565b9b5060208d01359150808211156145dd57600080fd5b6145e98e838f016144c6565b9a5060408d01359150808211156145ff57600080fd5b61460b8e838f016144c6565b995060608d013591508082111561462157600080fd5b61462d8e838f016144c6565b985060808d013591508082111561464357600080fd5b61464f8e838f01614521565b975060a08d013591508082111561466557600080fd5b6146718e838f016144c6565b965060c08d013591508082111561468757600080fd5b6146938e838f016144c6565b955060e08d01359150808211156146a957600080fd5b6146b58e838f016144c6565b94506101008d01359150808211156146cc57600080fd5b6146d88e838f016144c6565b93506101208d01359150808211156146ef57600080fd5b506146fc8d828e01614521565b9150509295989b9194979a5092959850565b60008060006040848603121561472357600080fd5b833567ffffffffffffffff8082111561473b57600080fd5b818601915086601f83011261474f57600080fd5b81358181111561475e57600080fd5b8760206101c08302850101111561477457600080fd5b60209283019550935090850135908082111561478f57600080fd5b5061479c868287016144c6565b9150509250925092565b600080604083850312156147b957600080fd5b82356147c481613d92565b9150602083013561409e81613d92565b600080600080600080600080610100898b0312156147f157600080fd5b883567ffffffffffffffff8082111561480957600080fd5b6148158c838d016144c6565b995060208b013591508082111561482b57600080fd5b6148378c838d016144c6565b985060408b013591508082111561484d57600080fd5b6148598c838d016144c6565b975060608b013591508082111561486f57600080fd5b61487b8c838d01614521565b965060808b013591508082111561489157600080fd5b61489d8c838d016144c6565b955060a08b01359150808211156148b357600080fd5b6148bf8c838d016144c6565b945060c08b01359150808211156148d557600080fd5b6148e18c838d016144c6565b935060e08b01359150808211156148f757600080fd5b506149048b828c01614521565b9150509295985092959890939650565b801515811461129057600080fd5b6000806101e0838503121561493657600080fd5b61494084846141f2565b91506101c083013561409e81614914565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b820161497c5761497c614951565b5060000390565b81810381811115610d0957610d09614951565b80820180821115610d0957610d09614951565b60208082526039908201527f4552433436323643617368466c6f774c656e6465723a207269736b4d6f64756c60408201527f655f2063616e6e6f74206265207a65726f206164647265737300000000000000606082015260800190565b600060208284031215614a1857600080fd5b81516110e581613d92565b9889526020890197909752604088019590955264ffffffffff93841660608801526001600160a01b0392909216608087015260a086015260c085015260e0840191909152166101008201526101200190565b600060208284031215614a8757600080fd5b5051919050565b600181811c90821680614aa257607f821691505b60208210810361420557634e487b7160e01b600052602260045260246000fd5b60ff8181168382160190811115610d0957610d09614951565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215614b8557600080fd5b81516110e581614914565b8035613dbc81613d92565b803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a081013560a083015260c081013560c083015260e081013560e0830152610100808201358184015250610120808201358184015250610140808201358184015250610160614c17818301614b90565b6001600160a01b031690830152610180614c32828201613da7565b64ffffffffff16908301526101a0614c4b828201613da7565b64ffffffffff8116848301526127ec565b6101e08101614c6b8285614b9b565b826101c08301529392505050565b6102e08101614c88828d614b9b565b6101c082019a909a526101e081019890985261020088019690965264ffffffffff9485166102208801526102408701939093526102608601919091526102808501526102a0840152166102c090910152919050565b998a5260208a0198909852604089019690965264ffffffffff94851660608901526001600160a01b0393909316608088015260a087019190915260c086015260e0850152610100840191909152166101208201526101400190565b634e487b7160e01b600052603260045260246000fd5b600060018201614d6057614d60614951565b5060010190565b6101e08101614d768285614b9b565b8215156101c08301529392505050565b8082018281126000831280158216821582161715614da657614da6614951565b505092915050565b600181815b80851115614de9578160001904821115614dcf57614dcf614951565b80851615614ddc57918102915b93841c9390800290614db3565b509250929050565b600082614e0057506001610d09565b81614e0d57506000610d09565b8160018114614e235760028114614e2d57614e49565b6001915050610d09565b60ff841115614e3e57614e3e614951565b50506001821b610d09565b5060208310610133831016604e8410600b8410161715614e6c575081810a610d09565b614e768383614dae565b8060001904821115614e8a57614e8a614951565b029392505050565b60006110e560ff841683614df1565b818103600083128015838313168383128216171561167357611673614951565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614f44816017850160208801613efd565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614f75816028840160208801613efd565b01602801949350505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000816000190483118215151615614fc757614fc7614951565b500290565b600081614fdb57614fdb614951565b506000190190565b601f82111561111157600081815260208120601f850160051c8101602086101561500a5750805b601f850160051c820191505b8181101561502957828155600101615016565b505050505050565b815167ffffffffffffffff81111561504b5761504b6140a9565b61505f816150598454614a8e565b84614fe3565b602080601f831160018114615094576000841561507c5750858301515b600019600386901b1c1916600185901b178555615029565b600085815260208120601f198616915b828110156150c3578886015182559484019460019091019084016150a4565b50858210156150e15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251615103818460208701613efd565b919091019291505056fe92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb1360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564b0296ea8dd3227371927b1c1cea2b12ea394743ddf2f32f58024ce26f83a24a690fe2ba5da14f172ed5a0a0fec391dbf8f191c9a2f3557d79ede5d6b1c1c9ffba2646970667358221220bf6591ca34ffdbc88b7d75cded586b114eb462d36c6ca6fdb6e7ee33764ac17b64736f6c63430008100033",
  "deployedBytecode": "0x6080604052600436106103d95760003560e01c8063759076e5116101fd578063b7ee7d0111610118578063d6281d3e116100ab578063e5ef6f4b1161007a578063e5ef6f4b14610bfb578063e888b16714610c1b578063e8e617b714610c3b578063ef8b30f714610af9578063ffa600e314610c6557600080fd5b8063d6281d3e14610b79578063d905777e14610b99578063dd62ed3e14610bb9578063e1d3945014610bd957600080fd5b8063c6e6f592116100e7578063c6e6f59214610af9578063ce96cb7714610b19578063d3fba1a214610b39578063d547741f14610b5957600080fd5b8063b7ee7d0114610a99578063ba08765214610ab9578063c1d278cf14610ad9578063c63d75b61461076e57600080fd5b806395d89b4111610190578063a9059cbb1161015f578063a9059cbb14610a05578063af0e7e0c14610a25578063b3d7f6b914610a59578063b460af9414610a7957600080fd5b806395d89b411461099c5780639ed1a985146109b1578063a217fddf146109d0578063a457c2d7146109e557600080fd5b806382ff9c8c116101cc57806382ff9c8c1461091c5780638f15b4141461093c57806391d148541461095c57806394bf804d1461097c57600080fd5b8063759076e51461089057806378b86fbf146108a657806378fab260146108da5780637a702b3c146108fc57600080fd5b806324ea54f4116102f857806345f739ff1161028b57806352d1902d1161025a57806352d1902d146107e55780635ee0c7dd146107fa5780636b09de451461081a5780636e553f651461083a57806370a082311461085a57600080fd5b806345f739ff146107905780634b3fd148146107b25780634cdad506146104ba5780634f1ef286146107d257600080fd5b80633659cfe6116102c75780633659cfe6146106fb57806338d52e0f1461071b578063395093511461074e578063402d267d1461076e57600080fd5b806324ea54f4146106605780632f2ff15d14610694578063313ce567146106b457806336568abe146106db57600080fd5b80630a28a4771161037057806318160ddd1161033f57806318160ddd146105c7578063204d7923146105dc57806323b872dd14610610578063248a9ca31461063057600080fd5b80630a28a477146104fa5780630abf6b601461051a5780630e7b949e1461054e578063150b7a021461058257600080fd5b806305918a79116103ac57806305918a791461047857806306fdde031461049857806307a2d13a146104ba578063095ea7b3146104da57600080fd5b806301e1d114146103de57806301ffc9a71461040657806302a2e3bb1461043657806304f6f5b214610456575b600080fd5b3480156103ea57600080fd5b506103f3610c85565b6040519081526020015b60405180910390f35b34801561041257600080fd5b50610426610421366004613d68565b610cc9565b60405190151581526020016103fd565b34801561044257600080fd5b506103f3610451366004613dc1565b610d0f565b34801561046257600080fd5b50610476610471366004613e60565b610d86565b005b34801561048457600080fd5b506103f3610493366004613e7d565b610f2f565b3480156104a457600080fd5b506104ad611002565b6040516103fd9190613f21565b3480156104c657600080fd5b506103f36104d5366004613f54565b611094565b3480156104e657600080fd5b506104266104f5366004613f6d565b6110a1565b34801561050657600080fd5b506103f3610515366004613f54565b6110b9565b34801561052657600080fd5b506103f37f54371fd80f4f86e64c2b0cfb7152ea6c6649b1b07a69bd719c7da8bd4f65902881565b34801561055a57600080fd5b506103f37f2344277e405079ec07749d374ba0b5862a4e45a6a05ac889dbb4a991c6f9354d81565b34801561058e57600080fd5b506105ae61059d366004613f99565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016103fd565b3480156105d357600080fd5b5060fd546103f3565b3480156105e857600080fd5b506103f37f288a15c4a15d470e4cd9cad2f113b91206b520c26dbd3dd74627f0c057baa19c81565b34801561061c57600080fd5b5061042661062b366004614038565b6110c6565b34801561063c57600080fd5b506103f361064b366004613f54565b60009081526065602052604090206001015490565b34801561066c57600080fd5b506103f37f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b3480156106a057600080fd5b506104766106af366004614079565b6110ec565b3480156106c057600080fd5b506106c9611116565b60405160ff90911681526020016103fd565b3480156106e757600080fd5b506104766106f6366004614079565b611136565b34801561070757600080fd5b50610476610716366004613e60565b6111b4565b34801561072757600080fd5b5061012d546001600160a01b03165b6040516001600160a01b0390911681526020016103fd565b34801561075a57600080fd5b50610426610769366004613f6d565b611293565b34801561077a57600080fd5b506103f3610789366004613e60565b5060001990565b34801561079c57600080fd5b506103f360008051602061519583398151915281565b3480156107be57600080fd5b506104766107cd366004614079565b6112b5565b6104766107e0366004614148565b611421565b3480156107f157600080fd5b506103f36114ed565b34801561080657600080fd5b506105ae6108153660046141ac565b6115a0565b34801561082657600080fd5b50610476610835366004613f54565b6115b1565b34801561084657600080fd5b506103f3610855366004614079565b61164c565b34801561086657600080fd5b506103f3610875366004613e60565b6001600160a01b0316600090815260fb602052604090205490565b34801561089c57600080fd5b50610160546103f3565b3480156108b257600080fd5b506103f37f996bbdfe02e380a7d57d331edc0b802eeb8b44fb25af615058afab9a18e8a02381565b3480156108e657600080fd5b506103f360008051602061510e83398151915281565b34801561090857600080fd5b5061047661091736600461420b565b61167a565b34801561092857600080fd5b506103f3610937366004614238565b611708565b34801561094857600080fd5b506104766109573660046142e9565b61180a565b34801561096857600080fd5b50610426610977366004614079565b611923565b34801561098857600080fd5b506103f3610997366004614079565b61194e565b3480156109a857600080fd5b506104ad611972565b3480156109bd57600080fd5b5061015f546001600160a01b0316610736565b3480156109dc57600080fd5b506103f3600081565b3480156109f157600080fd5b50610426610a00366004613f6d565b611981565b348015610a1157600080fd5b50610426610a20366004613f6d565b611a07565b348015610a3157600080fd5b506103f37f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d07455581565b348015610a6557600080fd5b506103f3610a74366004613f54565b611a15565b348015610a8557600080fd5b506103f3610a94366004614372565b611a22565b348015610aa557600080fd5b506103f3610ab43660046143b4565b611a50565b348015610ac557600080fd5b506103f3610ad4366004614372565b611ba4565b348015610ae557600080fd5b50610476610af4366004614583565b611bc9565b348015610b0557600080fd5b506103f3610b14366004613f54565b611d33565b348015610b2557600080fd5b506103f3610b34366004613e60565b611d40565b348015610b4557600080fd5b50610476610b5436600461470e565b611d5b565b348015610b6557600080fd5b50610476610b74366004614079565b611e4e565b348015610b8557600080fd5b506105ae610b943660046141ac565b611e73565b348015610ba557600080fd5b506103f3610bb4366004613e60565b611f0b565b348015610bc557600080fd5b506103f3610bd43660046147a6565b611f24565b348015610be557600080fd5b506103f360008051602061517583398151915281565b348015610c0757600080fd5b50610476610c163660046147d4565b611f4f565b348015610c2757600080fd5b50610476610c36366004614079565b612113565b348015610c4757600080fd5b506105ae610c56366004614038565b63e8e617b760e01b9392505050565b348015610c7157600080fd5b50610476610c80366004614922565b6122fb565b600080610c90612352565b90506000610160541215610cbb5761016054610cab90614967565b610cb59082614983565b91505090565b61016054610cb59082614996565b60006001600160e01b03198216633ece0a8960e01b1480610cfa57506001600160e01b03198216635ee0c7dd60e01b145b80610d095750610d09826123c6565b92915050565b60007f54371fd80f4f86e64c2b0cfb7152ea6c6649b1b07a69bd719c7da8bd4f659028610d3b816123fb565b6000610d45612352565b9050610d5a8e8e8e8e8e8e8e8e8e8e8e612405565b50610d75610d66612352565b610d709083614983565b612529565b50509b9a5050505050505050505050565b7f996bbdfe02e380a7d57d331edc0b802eeb8b44fb25af615058afab9a18e8a023610db0816123fb565b6001600160a01b038216610ddf5760405162461bcd60e51b8152600401610dd6906149a9565b60405180910390fd5b610de761257b565b6001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e529190614a06565b6001600160a01b031614610ed95760405162461bcd60e51b815260206004820152604260248201527f4552433436323643617368466c6f774c656e6465723a206e6577207269736b4d60448201527f6f64756c65206d7573742062656c6f6e6720746f207468652073616d6520706f6064820152611bdb60f21b608482015260a401610dd6565b61015f80546001600160a01b0319166001600160a01b0384169081179091556040519081527fd4208580168eba30c1d9ae9fa910d2dba68e0ef5a8badee2d4e27c9d3d4a39039060200160405180910390a15050565b6000600080516020615195833981519152610f49816123fb565b6000610f53612352565b9050610f6861015f546001600160a01b031690565b6001600160a01b03166305918a798d8d8d8d308d8d8d8d6040518a63ffffffff1660e01b8152600401610fa399989796959493929190614a23565b6020604051808303816000875af1158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe69190614a75565b9250610ff3610d66612352565b50509998505050505050505050565b606060fe805461101190614a8e565b80601f016020809104026020016040519081016040528092919081815260200182805461103d90614a8e565b801561108a5780601f1061105f5761010080835404028352916020019161108a565b820191906000526020600020905b81548152906001019060200180831161106d57829003601f168201915b5050505050905090565b6000610d098260006125ea565b6000336110af818585612624565b5060019392505050565b6000610d09826001612748565b6000336110d4858285612778565b6110df8585856127f2565b60019150505b9392505050565b600082815260656020526040902060010154611107816123fb565b611111838361299d565b505050565b60008061012d546111319190600160a01b900460ff16614ac2565b905090565b6001600160a01b03811633146111a65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610dd6565b6111b08282612a23565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036111fc5760405162461bcd60e51b8152600401610dd690614adb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661124560008051602061512e833981519152546001600160a01b031690565b6001600160a01b03161461126b5760405162461bcd60e51b8152600401610dd690614b27565b61127481612a8a565b6040805160008082526020820190925261129091839190612ab4565b50565b6000336110af8185856112a68383611f24565b6112b09190614996565b612624565b7f2344277e405079ec07749d374ba0b5862a4e45a6a05ac889dbb4a991c6f9354d6112df816123fb565b826112e8612352565b10156113525760405162461bcd60e51b815260206004820152603360248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f7567604482015272682062616c616e636520746f20626f72726f7760681b6064820152608401610dd6565b61135b83612529565b611363612c1f565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303816000875af11580156113b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d89190614b73565b50816001600160a01b03167fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a367508460405161141491815260200190565b60405180910390a2505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114695760405162461bcd60e51b8152600401610dd690614adb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114b260008051602061512e833981519152546001600160a01b031690565b6001600160a01b0316146114d85760405162461bcd60e51b8152600401610dd690614b27565b6114e182612a8a565b6111b082826001612ab4565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461158d5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610dd6565b5060008051602061512e83398151915290565b635ee0c7dd60e01b5b949350505050565b60001981036115d457600061016054136115cc5760006115d1565b610160545b90505b610160546115e182612c66565b6116003330846115ef612c1f565b6001600160a01b0316929190612c79565b6101605460408051848152602081018490529081019190915233907f5970ab368b41592b8ee398793f9f4032529294b5a1244e1b2b59fd6629d0e79b9060600160405180910390a25050565b6000600080516020615175833981519152611666816123fb565b6116708484612ce4565b91505b5092915050565b60008051602061510e833981519152611692816123fb565b6116a461018084016101608501613e60565b6001600160a01b0316637a702b3c84846040518363ffffffff1660e01b81526004016116d1929190614c5c565b600060405180830381600087803b1580156116eb57600080fd5b505af11580156116ff573d6000803e3d6000fd5b50505050505050565b60007f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d074555611734816123fb565b600061173e612352565b90506117526101808e016101608f01613e60565b6001600160a01b03166382ff9c8c8e8e8e8e8e8e8e8e8e8e6040518b63ffffffff1660e01b815260040161178f9a99989796959493929190614c79565b6020604051808303816000875af11580156117ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d29190614a75565b925060006117de612352565b6117e89083614983565b905080156117f9576117f981612529565b5050509a9950505050505050505050565b600054610100900460ff161580801561182a5750600054600160ff909116105b806118445750303b158015611844575060005460ff166001145b6118a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610dd6565b6000805460ff1916600117905580156118ca576000805461ff0019166101001790555b6118d685858585612cfe565b801561191c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000600080516020615175833981519152611968816123fb565b6116708484612dc4565b606060ff805461101190614a8e565b6000338161198f8286611f24565b9050838110156119ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610dd6565b6119fc8286868403612624565b506001949350505050565b6000336110af8185856127f2565b6000610d098260016125ea565b6000600080516020615175833981519152611a3c816123fb565b611a47858585612dde565b95945050505050565b6000600080516020615195833981519152611a6a816123fb565b6000611a74612352565b90506000198703611b05578c6001600160a01b03166305918a798d8d8d8d308e8d8d8d6040518a63ffffffff1660e01b8152600401611abb99989796959493929190614a23565b6020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190614a75565b9250611b89565b8c6001600160a01b031663766dbc568d8d8d8d308e8e8e8e8e6040518b63ffffffff1660e01b8152600401611b439a99989796959493929190614cdd565b6020604051808303816000875af1158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190614a75565b92505b611b94610d66612352565b50509a9950505050505050505050565b6000600080516020615175833981519152611bbe816123fb565b611a47858585612e52565b600080516020615195833981519152611be1816123fb565b6000611beb612352565b905060005b8b51811015611d1957611d068d8281518110611c0e57611c0e614d38565b60200260200101518d8381518110611c2857611c28614d38565b60200260200101518d8481518110611c4257611c42614d38565b60200260200101518d8581518110611c5c57611c5c614d38565b60200260200101518d8681518110611c7657611c76614d38565b6020026020010151308d8881518110611c9157611c91614d38565b60200260200101518f8981518110611cab57611cab614d38565b60200260200101518e8a81518110611cc557611cc5614d38565b60200260200101518e8b81518110611cdf57611cdf614d38565b60200260200101518e8c81518110611cf957611cf9614d38565b6020026020010151612405565b5080611d1181614d4e565b915050611bf0565b50611d25610d66612352565b505050505050505050505050565b6000610d09826000612748565b6000610d09611d4e83612ec6565b611d56612352565b612eea565b60008051602061510e833981519152611d73816123fb565b60005b825181101561191c57848482818110611d9157611d91614d38565b90506101c00201610160016020810190611dab9190613e60565b6001600160a01b0316637a702b3c868684818110611dcb57611dcb614d38565b90506101c00201858481518110611de457611de4614d38565b60200260200101516040518363ffffffff1660e01b8152600401611e09929190614c5c565b600060405180830381600087803b158015611e2357600080fd5b505af1158015611e37573d6000803e3d6000fd5b505050508080611e4690614d4e565b915050611d76565b600082815260656020526040902060010154611e69816123fb565b6111118383612a23565b6000611e7d61257b565b6001600160a01b0316336001600160a01b031614611ef15760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792074686520506f6c696379506f6f6c2073686f756c642063616c6c2060448201526a1d1a1a5cc81b595d1a1bd960aa1b6064820152608401610dd6565b611efa82612c66565b50636b140e9f60e11b949350505050565b6000610d09611f1983612f00565b611d56610b14612352565b6001600160a01b03918216600090815260fc6020908152604080832093909416825291909152205490565b600080516020615195833981519152611f67816123fb565b6000611f71612352565b90506000611f8861015f546001600160a01b031690565b905060005b8b518110156120f057816001600160a01b03166305918a798d8381518110611fb757611fb7614d38565b60200260200101518d8481518110611fd157611fd1614d38565b60200260200101518d8581518110611feb57611feb614d38565b60200260200101518d868151811061200557612005614d38565b6020026020010151308e888151811061202057612020614d38565b60200260200101518e898151811061203a5761203a614d38565b60200260200101518e8a8151811061205457612054614d38565b60200260200101518e8b8151811061206e5761206e614d38565b60200260200101516040518a63ffffffff1660e01b815260040161209a99989796959493929190614a23565b6020604051808303816000875af11580156120b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120dd9190614a75565b50806120e881614d4e565b915050611f8d565b506121066120fc612352565b610d709084614983565b5050505050505050505050565b7f288a15c4a15d470e4cd9cad2f113b91206b520c26dbd3dd74627f0c057baa19c61213d816123fb565b60006101605412801561215c57506101605461215890614967565b8313155b6121c55760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a20616d6f756e74206d756044820152731cdd081899481b195cdcc81d1a185b881919589d60621b6064820152608401610dd6565b826121ce612352565b10156122395760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f75676044820152731a0818985b185b98d9481d1bc818d85cda1bdd5d60621b6064820152608401610dd6565b61224283612529565b61224a612c1f565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303816000875af115801561229b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122bf9190614b73565b50816001600160a01b03167fe2a52c6ceabaf7f3fc3f521853d811e633371d1a7d9d4678b585ac2348ee0d8f8460405161141491815260200190565b60008051602061510e833981519152612313816123fb565b61232561018084016101608501613e60565b6001600160a01b031663ffa600e384846040518363ffffffff1660e01b81526004016116d1929190614d67565b600061235c612c1f565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156123a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111319190614a75565b60006001600160e01b03198216637965db0b60e01b1480610d0957506301ffc9a760e01b6001600160e01b0319831614610d09565b6112908133612f1e565b60006000198603612496576040516305918a7960e01b81526001600160a01b038d16906305918a799061244c908e908e908e908e908e908d908d908d908d90600401614a23565b6020604051808303816000875af115801561246b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248f9190614a75565b905061251a565b604051633b36de2b60e11b81526001600160a01b038d169063766dbc56906124d4908e908e908e908e908e908d908f908e908e908e90600401614cdd565b6020604051808303816000875af11580156124f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125179190614a75565b90505b9b9a5050505050505050505050565b80610160600082825461253c9190614d86565b9091555050610160546040519081527fc7f3c2106cf3d0f81736749a1583b800014a964dc37d2f0eb8216c1b852317289060200160405180910390a150565b61015f5460408051634d15eb0360e01b815290516000926001600160a01b031691634d15eb039160048083019260209291908290030181865afa1580156125c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111319190614a06565b60006110e56125f7610c85565b612602906001614996565b61260e6000600a614e92565b60fd5461261b9190614996565b85919085612f77565b6001600160a01b0383166126865760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dd6565b6001600160a01b0382166126e75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dd6565b6001600160a01b03838116600081815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110e561275882600a614e92565b60fd546127659190614996565b61276d610c85565b61261b906001614996565b60006127848484611f24565b905060001981146127ec57818110156127df5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610dd6565b6127ec8484848403612624565b50505050565b6001600160a01b0383166128565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610dd6565b6001600160a01b0382166128b85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610dd6565b6001600160a01b038316600090815260fb6020526040902054818110156129305760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610dd6565b6001600160a01b03808516600081815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129909086815260200190565b60405180910390a36127ec565b6129a78282611923565b6111b05760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556129df3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612a2d8282611923565b156111b05760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50416111b0816123fb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612ae75761111183612fd2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612b41575060408051601f3d908101601f19168201909252612b3e91810190614a75565b60015b612ba45760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610dd6565b60008051602061512e8339815191528114612c135760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610dd6565b5061111183838361306e565b6000612c2961257b565b6001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c6573d6000803e3d6000fd5b80610160600082825461253c9190614ea1565b6040516001600160a01b03808516602483015283166044820152606481018290526127ec9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613093565b600080612cf084611d33565b90506110e533848684613168565b600054610100900460ff16612d255760405162461bcd60e51b8152600401610dd690614ec1565b612d2d6131e7565b612d356131e7565b6001600160a01b038116612da85760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a2061737365745f2063616044820152736e6e6f74206265207a65726f206164647265737360601b6064820152608401610dd6565b612db181613210565b612dbb8484613240565b6127ec82613271565b600080612dd084611a15565b90506110e533848387613168565b6000612de982611d40565b841115612e385760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610dd6565b6000612e43856110b9565b90506115a93385858885613375565b6000612e5d82611f0b565b841115612eac5760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610dd6565b6000612eb785611094565b90506115a93385858489613375565b6001600160a01b038116600090815260fb6020526040812054610d099060006125ea565b6000818310612ef957816110e5565b5090919050565b6001600160a01b038116600090815260fb6020526040812054610d09565b612f288282611923565b6111b057612f35816133f7565b612f40836020613409565b604051602001612f51929190614f0c565b60408051601f198184030181529082905262461bcd60e51b8252610dd691600401613f21565b600080612f858686866135a5565b90506001836002811115612f9b57612f9b614f81565b148015612fb8575060008480612fb357612fb3614f97565b868809115b15611a4757612fc8600182614996565b9695505050505050565b6001600160a01b0381163b61303f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610dd6565b60008051602061512e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6130778361368f565b6000825111806130845750805b15611111576127ec83836136cf565b60006130e8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136f49092919063ffffffff16565b90508051600014806131095750808060200190518101906131099190614b73565b6111115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610dd6565b61012d54613181906001600160a01b0316853085612c79565b61318b8382613703565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d784846040516131d9929190918252602082015260400190565b60405180910390a350505050565b600054610100900460ff1661320e5760405162461bcd60e51b8152600401610dd690614ec1565b565b600054610100900460ff166132375760405162461bcd60e51b8152600401610dd690614ec1565b611290816137c4565b600054610100900460ff166132675760405162461bcd60e51b8152600401610dd690614ec1565b6111b0828261384a565b600054610100900460ff166132985760405162461bcd60e51b8152600401610dd690614ec1565b6001600160a01b0381166132be5760405162461bcd60e51b8152600401610dd6906149a9565b6132c960003361388a565b61015f80546001600160a01b0319166001600160a01b0383161790556132ed612c1f565b6001600160a01b031663095ea7b361330361257b565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af1158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b09190614b73565b8161337e612352565b10156133ea5760405162461bcd60e51b815260206004820152603560248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f7567604482015274682062616c616e636520746f20776974686472617760581b6064820152608401610dd6565b61191c8585858585613894565b6060610d096001600160a01b03831660145b60606000613418836002614fad565b613423906002614996565b67ffffffffffffffff81111561343b5761343b6140a9565b6040519080825280601f01601f191660200182016040528015613465576020820181803683370190505b509050600360fc1b8160008151811061348057613480614d38565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106134af576134af614d38565b60200101906001600160f81b031916908160001a90535060006134d3846002614fad565b6134de906001614996565b90505b6001811115613556576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061351257613512614d38565b1a60f81b82828151811061352857613528614d38565b60200101906001600160f81b031916908160001a90535060049490941c9361354f81614fcc565b90506134e1565b5083156110e55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610dd6565b60008080600019858709858702925082811083820303915050806000036135df578382816135d5576135d5614f97565b04925050506110e5565b8084116136265760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610dd6565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61369881612fd2565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606110e5838360405180606001604052806027815260200161514e60279139613941565b60606115a984846000856139af565b6001600160a01b0382166137595760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610dd6565b8060fd600082825461376b9190614996565b90915550506001600160a01b038216600081815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff166137eb5760405162461bcd60e51b8152600401610dd690614ec1565b6000806137f783613a8a565b9150915081613807576012613809565b805b61012d80546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff166138715760405162461bcd60e51b8152600401610dd690614ec1565b60fe61387d8382615031565b5060ff6111118282615031565b6111b0828261299d565b826001600160a01b0316856001600160a01b0316146138b8576138b8838683612778565b6138c28382613b66565b61012d546138da906001600160a01b03168584613c9a565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051613932929190918252602082015260400190565b60405180910390a45050505050565b6060600080856001600160a01b03168560405161395e91906150f1565b600060405180830381855af49150503d8060008114613999576040519150601f19603f3d011682016040523d82523d6000602084013e61399e565b606091505b5091509150612fc886838387613cca565b606082471015613a105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610dd6565b600080866001600160a01b03168587604051613a2c91906150f1565b60006040518083038185875af1925050503d8060008114613a69576040519150601f19603f3d011682016040523d82523d6000602084013e613a6e565b606091505b5091509150613a7f87838387613cca565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691613ad1916150f1565b600060405180830381855afa9150503d8060008114613b0c576040519150601f19603f3d011682016040523d82523d6000602084013e613b11565b606091505b5091509150818015613b2557506020815110155b15613b5957600081806020019051810190613b409190614a75565b905060ff8111613b57576001969095509350505050565b505b5060009485945092505050565b6001600160a01b038216613bc65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610dd6565b6001600160a01b038216600090815260fb602052604090205481811015613c3a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610dd6565b6001600160a01b038316600081815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516001600160a01b03831660248201526044810182905261111190849063a9059cbb60e01b90606401612cad565b60608315613d39578251600003613d32576001600160a01b0385163b613d325760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dd6565b50816115a9565b6115a98383815115613d4e5781518083602001fd5b8060405162461bcd60e51b8152600401610dd69190613f21565b600060208284031215613d7a57600080fd5b81356001600160e01b0319811681146110e557600080fd5b6001600160a01b038116811461129057600080fd5b803564ffffffffff81168114613dbc57600080fd5b919050565b60008060008060008060008060008060006101608c8e031215613de357600080fd5b8b35613dee81613d92565b9a5060208c0135995060408c0135985060608c01359750613e1160808d01613da7565b965060a08c0135613e2181613d92565b955060c08c0135945060e08c013593506101008c013592506101208c01359150613e4e6101408d01613da7565b90509295989b509295989b9093969950565b600060208284031215613e7257600080fd5b81356110e581613d92565b60008060008060008060008060006101208a8c031215613e9c57600080fd5b8935985060208a0135975060408a01359650613eba60608b01613da7565b955060808a0135613eca81613d92565b945060a08a0135935060c08a0135925060e08a01359150613eee6101008b01613da7565b90509295985092959850929598565b60005b83811015613f18578181015183820152602001613f00565b50506000910152565b6020815260008251806020840152613f40816040850160208701613efd565b601f01601f19169190910160400192915050565b600060208284031215613f6657600080fd5b5035919050565b60008060408385031215613f8057600080fd5b8235613f8b81613d92565b946020939093013593505050565b600080600080600060808688031215613fb157600080fd5b8535613fbc81613d92565b94506020860135613fcc81613d92565b935060408601359250606086013567ffffffffffffffff80821115613ff057600080fd5b818801915088601f83011261400457600080fd5b81358181111561401357600080fd5b89602082850101111561402557600080fd5b9699959850939650602001949392505050565b60008060006060848603121561404d57600080fd5b833561405881613d92565b9250602084013561406881613d92565b929592945050506040919091013590565b6000806040838503121561408c57600080fd5b82359150602083013561409e81613d92565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140e8576140e86140a9565b604052919050565b600067ffffffffffffffff83111561410a5761410a6140a9565b61411d601f8401601f19166020016140bf565b905082815283838301111561413157600080fd5b828260208301376000602084830101529392505050565b6000806040838503121561415b57600080fd5b823561416681613d92565b9150602083013567ffffffffffffffff81111561418257600080fd5b8301601f8101851361419357600080fd5b6141a2858235602084016140f0565b9150509250929050565b600080600080608085870312156141c257600080fd5b84356141cd81613d92565b935060208501356141dd81613d92565b93969395505050506040820135916060013590565b60006101c0828403121561420557600080fd5b50919050565b6000806101e0838503121561421f57600080fd5b61422984846141f2565b946101c0939093013593505050565b6000806000806000806000806000806102e08b8d03121561425857600080fd5b6142628c8c6141f2565b99506101c08b013598506101e08b013597506102008b013596506142896102208c01613da7565b95506102408b013594506102608b013593506102808b013592506102a08b013591506142b86102c08c01613da7565b90509295989b9194979a5092959850565b600082601f8301126142da57600080fd5b6110e5838335602085016140f0565b600080600080608085870312156142ff57600080fd5b843567ffffffffffffffff8082111561431757600080fd5b614323888389016142c9565b9550602087013591508082111561433957600080fd5b50614346878288016142c9565b935050604085013561435781613d92565b9150606085013561436781613d92565b939692955090935050565b60008060006060848603121561438757600080fd5b83359250602084013561439981613d92565b915060408401356143a981613d92565b809150509250925092565b6000806000806000806000806000806101408b8d0312156143d457600080fd5b8a356143df81613d92565b995060208b0135985060408b0135975060608b0135965061440260808c01613da7565b955060a08b0135945060c08b0135935060e08b013592506101008b013591506142b86101208c01613da7565b600067ffffffffffffffff821115614448576144486140a9565b5060051b60200190565b600082601f83011261446357600080fd5b813560206144786144738361442e565b6140bf565b82815260059290921b8401810191818101908684111561449757600080fd5b8286015b848110156144bb5780356144ae81613d92565b835291830191830161449b565b509695505050505050565b600082601f8301126144d757600080fd5b813560206144e76144738361442e565b82815260059290921b8401810191818101908684111561450657600080fd5b8286015b848110156144bb578035835291830191830161450a565b600082601f83011261453257600080fd5b813560206145426144738361442e565b82815260059290921b8401810191818101908684111561456157600080fd5b8286015b848110156144bb5761457681613da7565b8352918301918301614565565b6000806000806000806000806000806101408b8d0312156145a357600080fd5b8a3567ffffffffffffffff808211156145bb57600080fd5b6145c78e838f01614452565b9b5060208d01359150808211156145dd57600080fd5b6145e98e838f016144c6565b9a5060408d01359150808211156145ff57600080fd5b61460b8e838f016144c6565b995060608d013591508082111561462157600080fd5b61462d8e838f016144c6565b985060808d013591508082111561464357600080fd5b61464f8e838f01614521565b975060a08d013591508082111561466557600080fd5b6146718e838f016144c6565b965060c08d013591508082111561468757600080fd5b6146938e838f016144c6565b955060e08d01359150808211156146a957600080fd5b6146b58e838f016144c6565b94506101008d01359150808211156146cc57600080fd5b6146d88e838f016144c6565b93506101208d01359150808211156146ef57600080fd5b506146fc8d828e01614521565b9150509295989b9194979a5092959850565b60008060006040848603121561472357600080fd5b833567ffffffffffffffff8082111561473b57600080fd5b818601915086601f83011261474f57600080fd5b81358181111561475e57600080fd5b8760206101c08302850101111561477457600080fd5b60209283019550935090850135908082111561478f57600080fd5b5061479c868287016144c6565b9150509250925092565b600080604083850312156147b957600080fd5b82356147c481613d92565b9150602083013561409e81613d92565b600080600080600080600080610100898b0312156147f157600080fd5b883567ffffffffffffffff8082111561480957600080fd5b6148158c838d016144c6565b995060208b013591508082111561482b57600080fd5b6148378c838d016144c6565b985060408b013591508082111561484d57600080fd5b6148598c838d016144c6565b975060608b013591508082111561486f57600080fd5b61487b8c838d01614521565b965060808b013591508082111561489157600080fd5b61489d8c838d016144c6565b955060a08b01359150808211156148b357600080fd5b6148bf8c838d016144c6565b945060c08b01359150808211156148d557600080fd5b6148e18c838d016144c6565b935060e08b01359150808211156148f757600080fd5b506149048b828c01614521565b9150509295985092959890939650565b801515811461129057600080fd5b6000806101e0838503121561493657600080fd5b61494084846141f2565b91506101c083013561409e81614914565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b820161497c5761497c614951565b5060000390565b81810381811115610d0957610d09614951565b80820180821115610d0957610d09614951565b60208082526039908201527f4552433436323643617368466c6f774c656e6465723a207269736b4d6f64756c60408201527f655f2063616e6e6f74206265207a65726f206164647265737300000000000000606082015260800190565b600060208284031215614a1857600080fd5b81516110e581613d92565b9889526020890197909752604088019590955264ffffffffff93841660608801526001600160a01b0392909216608087015260a086015260c085015260e0840191909152166101008201526101200190565b600060208284031215614a8757600080fd5b5051919050565b600181811c90821680614aa257607f821691505b60208210810361420557634e487b7160e01b600052602260045260246000fd5b60ff8181168382160190811115610d0957610d09614951565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215614b8557600080fd5b81516110e581614914565b8035613dbc81613d92565b803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a081013560a083015260c081013560c083015260e081013560e0830152610100808201358184015250610120808201358184015250610140808201358184015250610160614c17818301614b90565b6001600160a01b031690830152610180614c32828201613da7565b64ffffffffff16908301526101a0614c4b828201613da7565b64ffffffffff8116848301526127ec565b6101e08101614c6b8285614b9b565b826101c08301529392505050565b6102e08101614c88828d614b9b565b6101c082019a909a526101e081019890985261020088019690965264ffffffffff9485166102208801526102408701939093526102608601919091526102808501526102a0840152166102c090910152919050565b998a5260208a0198909852604089019690965264ffffffffff94851660608901526001600160a01b0393909316608088015260a087019190915260c086015260e0850152610100840191909152166101208201526101400190565b634e487b7160e01b600052603260045260246000fd5b600060018201614d6057614d60614951565b5060010190565b6101e08101614d768285614b9b565b8215156101c08301529392505050565b8082018281126000831280158216821582161715614da657614da6614951565b505092915050565b600181815b80851115614de9578160001904821115614dcf57614dcf614951565b80851615614ddc57918102915b93841c9390800290614db3565b509250929050565b600082614e0057506001610d09565b81614e0d57506000610d09565b8160018114614e235760028114614e2d57614e49565b6001915050610d09565b60ff841115614e3e57614e3e614951565b50506001821b610d09565b5060208310610133831016604e8410600b8410161715614e6c575081810a610d09565b614e768383614dae565b8060001904821115614e8a57614e8a614951565b029392505050565b60006110e560ff841683614df1565b818103600083128015838313168383128216171561167357611673614951565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614f44816017850160208801613efd565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614f75816028840160208801613efd565b01602801949350505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000816000190483118215151615614fc757614fc7614951565b500290565b600081614fdb57614fdb614951565b506000190190565b601f82111561111157600081815260208120601f850160051c8101602086101561500a5750805b601f850160051c820191505b8181101561502957828155600101615016565b505050505050565b815167ffffffffffffffff81111561504b5761504b6140a9565b61505f816150598454614a8e565b84614fe3565b602080601f831160018114615094576000841561507c5750858301515b600019600386901b1c1916600185901b178555615029565b600085815260208120601f198616915b828110156150c3578886015182559484019460019091019084016150a4565b50858210156150e15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251615103818460208701613efd565b919091019291505056fe92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb1360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564b0296ea8dd3227371927b1c1cea2b12ea394743ddf2f32f58024ce26f83a24a690fe2ba5da14f172ed5a0a0fec391dbf8f191c9a2f3557d79ede5d6b1c1c9ffba2646970667358221220bf6591ca34ffdbc88b7d75cded586b114eb462d36c6ca6fdb6e7ee33764ac17b64736f6c63430008100033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
