{
  "_format": "hh-sol-artifact-1",
  "contractName": "WrappedfCash",
  "sourceName": "contracts/protocol/integration/wrap/notional/WrappedfCash.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract INotionalV2",
          "name": "_notionalProxy",
          "type": "address"
        },
        {
          "internalType": "contract IWETH9",
          "name": "_weth",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "AuthorizedOperator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Burned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "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": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Minted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "RevokedOperator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Sent",
      "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": "caller",
          "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": "NotionalV2",
      "outputs": [
        {
          "internalType": "contract INotionalV2",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WETH",
      "outputs": [
        {
          "internalType": "contract IWETH9",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "holder",
          "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": "value",
          "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": "operator",
          "type": "address"
        }
      ],
      "name": "authorizeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "convertToAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "convertToShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "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": [],
      "name": "getAssetToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "assetToken",
          "type": "address"
        },
        {
          "internalType": "int256",
          "name": "underlyingPrecision",
          "type": "int256"
        },
        {
          "internalType": "enum TokenType",
          "name": "tokenType",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrencyId",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "currencyId",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDecodedID",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "currencyId",
          "type": "uint16"
        },
        {
          "internalType": "uint40",
          "name": "maturity",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMarketIndex",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMaturity",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "maturity",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "useUnderlying",
          "type": "bool"
        }
      ],
      "name": "getToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isETH",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getUnderlyingToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "underlyingToken",
          "type": "address"
        },
        {
          "internalType": "int256",
          "name": "underlyingPrecision",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getfCashId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "granularity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "hasMatured",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "currencyId",
          "type": "uint16"
        },
        {
          "internalType": "uint40",
          "name": "maturity",
          "type": "uint40"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "isOperatorFor",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": [
        {
          "internalType": "uint256",
          "name": "depositAmountExternal",
          "type": "uint256"
        },
        {
          "internalType": "uint88",
          "name": "fCashAmount",
          "type": "uint88"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "minImpliedRate",
          "type": "uint32"
        }
      ],
      "name": "mintViaAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "depositAmountExternal",
          "type": "uint256"
        },
        {
          "internalType": "uint88",
          "name": "fCashAmount",
          "type": "uint88"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "minImpliedRate",
          "type": "uint32"
        }
      ],
      "name": "mintViaUnderlying",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "operatorBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "operatorSend",
      "outputs": [],
      "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": "assets",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "previewWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "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": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "redeemToUnderlying",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "transferfCash",
              "type": "bool"
            },
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "maxImpliedRate",
              "type": "uint32"
            }
          ],
          "internalType": "struct IWrappedfCash.RedeemOpts",
          "name": "opts",
          "type": "tuple"
        }
      ],
      "name": "redeem",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "maxImpliedRate",
          "type": "uint32"
        }
      ],
      "name": "redeemToAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "maxImpliedRate",
          "type": "uint32"
        }
      ],
      "name": "redeemToUnderlying",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "revokeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "holder",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "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": "0x60c06040523480156200001157600080fd5b506040516200622038038062006220833981016040819052620000349162000172565b818181818181600060019054906101000a900460ff166200005c5760005460ff161562000066565b620000666200012c565b620000ce5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff16158015620000f1576000805461ffff19166101011790555b6001600160a01b03808416608052821660a052801562000117576000805461ff00191690555b5050600160665550620001b195505050505050565b600062000144306200014a60201b620022291760201c565b15905090565b6001600160a01b03163b151590565b6001600160a01b03811681146200016f57600080fd5b50565b600080604083850312156200018657600080fd5b8251620001938162000159565b6020840151909250620001a68162000159565b809150509250929050565b60805160a051615f8c62000294600039600081816105b601528181611125015281816125ec0152818161262a01528181613b410152613bbf0152600081816103dc015281816107ef01528181610a5f01528181610b6301528181610cc201528181610f2101528181610f860152818161122d015281816119a601528181611bb101528181611d1d01528181611da301528181611e39015281816120090152818161227001528181612312015281816126af015281816127800152818161350f015281816135aa015281816136a80152818161455801526146a30152615f8c6000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c8063959b8c3f1161019d578063cf387fed116100e9578063ee719bc8116100a2578063f8eef10f1161007c578063f8eef10f14610763578063fad8b32a1461077a578063fc673c4f1461078d578063fe9d9303146107a057600080fd5b8063ee719bc8146106fd578063ef8b30f714610724578063f23a6e611461073757600080fd5b8063cf387fed14610652578063d84878b81461066d578063d905777e14610680578063d95b637114610693578063dd62ed3e146106a6578063e16695b5146106df57600080fd5b8063b3d7f6b911610156578063c63d75b611610130578063c63d75b614610611578063c6e6f59214610624578063cb803ceb14610637578063ce96cb771461063f57600080fd5b8063b3d7f6b9146105d8578063b460af94146105eb578063ba087652146105fe57600080fd5b8063959b8c3f1461056857806395d89b411461057b5780639bd9bbc614610583578063a109329514610596578063a9059cbb1461059e578063ad5c4648146105b157600080fd5b8063313ce5671161025c57806351489551116102155780636e553f65116101ef5780636e553f651461050657806370a0823114610519578063745d08d91461054257806394bf804d1461055557600080fd5b806351489551146104ba578063556f0dc7146104ec57806362ad1b83146104f357600080fd5b8063313ce5671461043c57806338d52e0f146104515780633d3192cb14610459578063402d267d1461046c57806348d8f98d1461047f5780634cdad506146104a757600080fd5b80630a28a477116102c957806318160ddd116102a357806318160ddd146103cf57806319b53d35146103d757806323b872dd1461041657806329cf14051461042957600080fd5b80630a28a477146103945780630db8481c146103a7578063152b838c146103bc57600080fd5b806301e1d114146103115780630558d5001461032c57806306e485381461033457806306fdde031461034957806307a2d13a1461035e578063095ea7b314610371575b600080fd5b6103196107b3565b6040519081526020015b60405180910390f35b606554610319565b61033c6108e0565b6040516103239190614b90565b610351610942565b6040516103239190614c35565b61031961036c366004614c48565b6109cb565b61038461037f366004614c79565b610adc565b6040519015158152602001610323565b6103196103a2366004614c48565b610af4565b6103ba6103b5366004614ccc565b610be9565b005b6103ba6103ca366004614d42565b610bfd565b603454610319565b6103fe7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610323565b610384610424366004614d7b565b610fc9565b6103ba610437366004614ccc565b6110f7565b60085b60405160ff9091168152602001610323565b6103fe611105565b6103ba610467366004614dbc565b61114c565b61031961047a366004614dfe565b61118b565b6104876111a9565b6040805161ffff909316835264ffffffffff909116602083015201610323565b6103196104b5366004614c48565b6111cb565b6104cd6104c8366004614e29565b6112ac565b604080516001600160a01b039093168352901515602083015201610323565b6001610319565b6103ba610501366004614f54565b6112e4565b610319610514366004614fe6565b611320565b610319610527366004614dfe565b6001600160a01b031660009081526033602052604090205490565b6103ba610550366004614dbc565b6113da565b610319610563366004614fe6565b611419565b6103ba610576366004614dfe565b611477565b610351611595565b6103ba61059136600461500b565b6115a4565b6103846115c2565b6103846105ac366004614c79565b6115db565b6103fe7f000000000000000000000000000000000000000000000000000000000000000081565b6103196105e6366004614c48565b61168e565b6103196105f9366004615063565b6116d8565b61031961060c366004615063565b61175f565b61031961061f366004614dfe565b6118ee565b610319610632366004614c48565b61191b565b61043f611a25565b61031961064d366004614dfe565b611a5d565b61065a611a7f565b60405161ffff9091168152602001610323565b6103ba61067b36600461509a565b611a9e565b61031961068e366004614dfe565b611acc565b6103846106a136600461513e565b611aea565b6103196106b436600461513e565b6001600160a01b039182166000908152603b6020908152604080832093909416825291909152205490565b6106e7611b8b565b60405164ffffffffff9091168152602001610323565b610705611ba9565b604080516001600160a01b039093168352602083019190915201610323565b610319610732366004614c48565b611c91565b61074a61074536600461516c565b611cdb565b6040516001600160e01b03199091168152602001610323565b61076b612001565b6040516103239392919061522b565b6103ba610788366004614dfe565b6120bc565b6103ba61079b366004615260565b6121d8565b6103ba6107ae3660046152df565b61220a565b60006107bd6115c2565b156107cf576107ca612238565b905090565b60006107d9611ba9565b9150506000806107e76111a9565b9150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c52c43e1848461082760345490565b6040516001600160e01b031960e086901b16815261ffff909316600484015264ffffffffff909116602483015260448201524260648201526000608482015260a401602060405180830381865afa158015610886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa9190615325565b905060006305f5e1006108bd8684615354565b6108c791906153ef565b905060008112156108d757600080fd5b95945050505050565b6060603780548060200260200160405190810160405280929190818152602001828054801561093857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161091a575b5050505050905090565b6060603580546109519061541d565b80601f016020809104026020016040519081016040528092919081815260200182805461097d9061541d565b80156109385780601f1061099f57610100808354040283529160200191610938565b820191906000526020600020905b8154815290600101906020018083116109ad57509395945050505050565b60006109d56115c2565b15610a0a5760006109e4612238565b90506109ef60345490565b6109f98285615452565b610a039190615471565b9392505050565b600080610a156111a9565b60405163aaae47b560e01b815261ffff831660048201526024810187905264ffffffffff821660448201526000606482018190524260848301529294509092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aaae47b59060a401608060405180830381865afa158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca9190615496565b5091979650505050505050565b919050565b600033610aea8185856123bd565b5060019392505050565b6000610afe6115c2565b15610b1257610b0c8261191b565b92915050565b600080610b1d6111a9565b60405163bac9e8b160e01b815261ffff831660048201526024810187905264ffffffffff8216604482015260006064820152426084820152600160a482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bac9e8b19060c401606060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd691906154d3565b50506001600160581b0316949350505050565b610bf78484848460006124e4565b50505050565b600054610100900460ff16610c185760005460ff1615610c1c565b303b155b610c845760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff16158015610ca6576000805461ffff19166101011790555b60405163d4ccb0ed60e01b815261ffff841660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4ccb0ed90602401600060405180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d3991908101906155a1565b805190915060ff16610d805760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401610c7b565b8051610d979060ff1664ffffffffff85164261283c565b610dd65760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964206d6174757269747960801b6044820152606401610c7b565b610ded61ffff851664ffffffffff8516600161288c565b6065556000610dfa611ba9565b5090506000610e07612001565b50909150600090506001600160a01b03831615610e8957826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e8491908101906156d2565b610ea6565b6040518060400160405280600381526020016208aa8960eb1b8152505b90506000610eba8764ffffffffff166128e7565b9050610f128282604051602001610ed292919061573f565b6040516020818303038152906040528383604051602001610ef4929190615792565b60408051601f198184030181526000835260208301909152906129ec565b610f486001600160a01b0384167f0000000000000000000000000000000000000000000000000000000000000000600019612a1e565b836001600160a01b0316836001600160a01b031614158015610f7257506001600160a01b03841615155b15610fad57610fad6001600160a01b0385167f0000000000000000000000000000000000000000000000000000000000000000600019612a1e565b50505050508015610fc4576000805461ff00191690555b505050565b60006001600160a01b038316610ff15760405162461bcd60e51b8152600401610c7b906157dc565b6001600160a01b0384166110565760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610c7b565b6000339050611087818686866040518060200160405280600081525060405180602001604052806000815250612b66565b611092858285612c8e565b6110be818686866040518060200160405280600081525060405180602001604052806000815250612d1a565b6110ec8186868660405180602001604052806000815250604051806020016040528060008152506000612e80565b506001949350505050565b610bf78484848460016124e4565b600080600061111460016112ac565b91509150806111235781611145565b7f00000000000000000000000000000000000000000000000000000000000000005b9250505090565b610fc4836040518060800160405280600015158152602001600015158152602001856001600160a01b031681526020018463ffffffff16815250611a9e565b60006111956115c2565b6111a157600019610b0c565b600092915050565b6000806111c1606554603081901c91600882901c9190565b5090939092509050565b60006111d56115c2565b156111e357610b0c826109cb565b6000806111ee6111a9565b60405163416a158760e01b815261ffff831660048201526024810187905264ffffffffff821660448201526000606482015242608482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063416a15879060a401608060405180830381865afa15801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190615496565b50919695505050505050565b60008082156112c5576112bd611ba9565b5091506112d3565b6112cd612001565b50909250505b50916001600160a01b038316159150565b6112ee3386611aea565b61130a5760405162461bcd60e51b8152600401610c7b90615820565b61131985858585856001613045565b5050505050565b600061132b8261118b565b8311156113685760405162461bcd60e51b815260206004820152600b60248201526a13585e0811195c1bdcda5d60aa1b6044820152606401610c7b565b600061137384611c91565b905061138c8461138283613128565b85600060016124e4565b60408051858152602081018390526001600160a01b0385169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a39392505050565b610fc4836040518060800160405280600115158152602001600015158152602001856001600160a01b031681526020018463ffffffff16815250611a9e565b6000806114258461168e565b90506114348161138286613128565b60408051828152602081018690526001600160a01b0385169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791016113cb565b336001600160a01b03821614156114dc5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b6064820152608401610c7b565b6001600160a01b03811660009081526038602052604090205460ff161561152d57336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff1916905561155c565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b6060603680546109519061541d565b610fc433848484604051806020016040528060008152506001613045565b6000426115cd611b8b565b64ffffffffff161115905090565b60006001600160a01b0383166116035760405162461bcd60e51b8152600401610c7b906157dc565b6000339050611634818286866040518060200160405280600081525060405180602001604052806000815250612b66565b611660818286866040518060200160405280600081525060405180602001604052806000815250612d1a565b610aea8182868660405180602001604052806000815250604051806020016040528060008152506000612e80565b60006116986115c2565b156116cf5760405162461bcd60e51b815260206004820152600760248201526613585d1d5c995960ca1b6044820152606401610c7b565b610b0c826109cb565b6000806116e485610af4565b9050336001600160a01b0384161461170157611701833383612c8e565b61170c818585613142565b60408051868152602081018390526001600160a01b03808616929087169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a4949350505050565b60008061176a611105565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a0823190602401602060405180830381865afa1580156117b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d69190615325565b9050336001600160a01b038416146117f3576117f3833387612c8e565b6117fe858585613142565b6000611808611105565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa158015611850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118749190615325565b90506000611882838361586c565b9050846001600160a01b0316866001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848b6040516118dc929190918252602082015260400190565b60405180910390a49695505050505050565b60006118f86115c2565b611909576001600160581b0361190c565b60005b6001600160581b031692915050565b60006119256115c2565b1561194a576000611934612238565b90508061194060345490565b6109f99085615452565b6000806119556111a9565b604051631f0750c160e31b815261ffff831660048201526024810187905264ffffffffff82166044820152600060648201819052426084830152600160a48301529294509092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f83a86089060c401606060405180830381865afa1580156119ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1191906154d3565b50506001600160581b031695945050505050565b6000806000611a446007611a37611b8b565b64ffffffffff16426131a7565b915091508015611a575760009250505090565b50919050565b6001600160a01b038116600090815260336020526040812054610b0c906109cb565b6000611a96606554603081901c91600882901c9190565b509092915050565b600081604051602001611ab19190615883565b6040516020818303038152906040529050610fc4838261220a565b6001600160a01b038116600090815260336020526040812054610b0c565b6000816001600160a01b0316836001600160a01b03161480611b5557506001600160a01b03831660009081526038602052604090205460ff168015611b5557506001600160a01b038083166000908152603a602090815260408083209387168352929052205460ff16155b80610a0357506001600160a01b0380831660009081526039602090815260408083209387168352929052205460ff169392505050565b6000611ba2606554603081901c91600882901c9190565b5092915050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ebad18e611be6611a7f565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240161014060405180830381865afa158015611c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4a919061594f565b9092509050600482606001516004811115611c6757611c67615215565b1415611c7f5750805160409091015190939092509050565b80516040909101519094909350915050565b6000611c9b6115c2565b15611cd25760405162461bcd60e51b815260206004820152600760248201526613585d1d5c995960ca1b6044820152606401610c7b565b610b0c8261191b565b600060026066541415611d005760405162461bcd60e51b8152600401610c7b90615985565b60026066556000611d1060655490565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611d4957508086145b8015611d555750600085135b611d8b5760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b6044820152606401610c7b565b60405163b0de221760e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b0de22179060240160a060405180830381865afa158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1691906159bc565b604051635a9b7fdb60e11b81523060048201529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b536ffb690602401600060405180830381865afa158015611e80573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ea89190810190615a72565b60208301519091506001600160f81b031916158015611ec8575080516001145b8015611f37575082611f3582600081518110611ee657611ee6615b5b565b60200260200101516000015183600081518110611f0557611f05615b5b565b60200260200101516020015184600081518110611f2457611f24615b5b565b60200260200101516040015161288c565b145b611f4057600080fd5b6060808a6001600160a01b03168c6001600160a01b03161415611f9c5787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450611fd692505050565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b611fe48b8a848460006132f0565b505060016066555063f23a6e6160e01b9998505050505050505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ebad18e61203e611a7f565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240161014060405180830381865afa15801561207e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a2919061594f565b508051604082015160609092015190969195509350915050565b6001600160a01b03811633141561211f5760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b6064820152608401610c7b565b6001600160a01b03811660009081526038602052604090205460ff161561217357336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561219f565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b6121e23385611aea565b6121fe5760405162461bcd60e51b8152600401610c7b90615820565b610bf784848484613439565b61222533838360405180602001604052806000815250613439565b5050565b6001600160a01b03163b151590565b600080612243611a7f565b60405163fc1b134560e01b815261ffff821660048201523060248201529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc1b134590604401606060405180830381865afa1580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190615b71565b5050604051631baefc5d60e21b815261ffff8416600482015260248101829052600160448201529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636ebbf17490606401602060405180830381865afa158015612359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237d9190615325565b905060008113610a035760405162461bcd60e51b815260206004820152600b60248201526a4d75737420536574746c6560a81b6044820152606401610c7b565b6001600160a01b0383166124215760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c7b565b6001600160a01b0382166124835760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c7b565b6001600160a01b038381166000818152603b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600260665414156125075760405162461bcd60e51b8152600401610c7b90615985565b60026066556125146115c2565b156125515760405162461bcd60e51b815260206004820152600d60248201526c1990d85cda081b585d1d5c9959609a1b6044820152606401610c7b565b60008061255d836112ac565b915091506000816125d5576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190615325565b6125d7565b475b90508115612734576126146001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308b61375b565b604051632e1a7d4d60e01b8152600481018990527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561267657600080fd5b505af115801561268a573d6000803e3d6000fd5b5050505060006126ab61269b611a7f565b6126a3611a25565b8b8b8a613793565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630276b64b8a30846040518463ffffffff1660e01b81526004016126fc929190615bda565b6000604051808303818588803b15801561271557600080fd5b505af1158015612729573d6000803e3d6000fd5b5050505050506127eb565b6127496001600160a01b03841633308b61375b565b6000612766612756611a7f565b61275e611a25565b8a8989613978565b604051630541f52760e41b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063541f5270906127b79030908590600401615caa565b600060405180830381600087803b1580156127d157600080fd5b505af11580156127e5573d6000803e3d6000fd5b50505050505b61282086886001600160581b0316604051806020016040528060008152506040518060200160405280600081525060006132f0565b61282c83338484613ab4565b5050600160665550505050505050565b60008061284883613c0c565b9050600061285586613c76565b61285f9083615d2e565b90508085111561287457600092505050610a03565b60006128808587613e4e565b98975050505050505050565b6000613fff84111561289d57600080fd5b64ffffffffff8311156128af57600080fd5b60088211156128bd57600080fd5b5067ffff000000000000603084901b1665ffffffffff00600884901b161760ff8216179392505050565b60608161290b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612935578061291f81615d46565b915061292e9050600a83615471565b915061290f565b6000816001600160401b0381111561294f5761294f614e46565b6040519080825280601f01601f191660200182016040528015612979576020820181803683370190505b5090505b84156129e45761298e60018361586c565b915061299b600a86615d61565b6129a6906030615d2e565b60f81b8183815181106129bb576129bb615b5b565b60200101906001600160f81b031916908160001a9053506129dd600a86615471565b945061297d565b949350505050565b600054610100900460ff16612a135760405162461bcd60e51b8152600401610c7b90615d75565b610fc4838383614039565b801580612a985750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a969190615325565b155b612b035760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610c7b565b6040516001600160a01b038316602482015260448101829052610fc490849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614223565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015612be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0b9190615dc0565b90506001600160a01b03811615612c8557604051633ad5cbc160e11b81526001600160a01b038216906375ab978290612c52908a908a908a908a908a908a90600401615ddd565b600060405180830381600087803b158015612c6c57600080fd5b505af1158015612c80573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b038381166000908152603b60209081526040808320938616835292905220546000198114610bf75781811015612d0d5760405162461bcd60e51b815260206004820152601e60248201527f4552433737373a20696e73756666696369656e7420616c6c6f77616e636500006044820152606401610c7b565b610bf784848484036123bd565b6001600160a01b03851660009081526033602052604090205483811015612d935760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610c7b565b6001600160a01b03808716600090815260336020526040808220878503905591871681529081208054869290612dca908490615d2e565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051612e2293929190615e2a565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e6f91815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f259190615dc0565b90506001600160a01b03811615612fa1576040516223de2960e01b81526001600160a01b038216906223de2990612f6a908b908b908b908b908b908b90600401615ddd565b600060405180830381600087803b158015612f8457600080fd5b505af1158015612f98573d6000803e3d6000fd5b5050505061303b565b811561303b576001600160a01b0386163b1561303b5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a401610c7b565b5050505050505050565b6001600160a01b0386166130a65760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7b565b6001600160a01b0385166130fc5760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f20616464726573736044820152606401610c7b565b3361310b818888888888612b66565b613119818888888888612d1a565b612c8581888888888888612e80565b60006001600160581b0382111561313e57600080fd5b5090565b6040805160808101825260018152600060208083018290526001600160a01b03861683850152606083018290529251909261317e929101615883565b60408051601f1981840301815260208301909152600082529150610bf790839086908490613439565b600080600085116131f25760405162461bcd60e51b815260206004820152601560248201527410d1ce881b9bc81b585c9ad95d1cc81b1a5cdd1959605a1b6044820152606401610c7b565b600785111561323c5760405162461bcd60e51b815260206004820152601660248201527510d1ce881b585c9ad95d081a5b99195e08189bdd5b9960521b6044820152606401610c7b565b600061324784613c0c565b905060015b8681116132a957600061325e82613c76565b6132689084615d2e565b90508681141561328057509250600091506132e89050565b8681111561329657509250600191506132e89050565b50806132a181615d46565b91505061324c565b5060405162461bcd60e51b815260206004820152601360248201527210d1ce881b9bc81b585c9ad95d08199bdd5b99606a1b6044820152606401610c7b565b935093915050565b6001600160a01b0385166133465760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c7b565b6000339050846034600082825461335d9190615d2e565b90915550506001600160a01b0386166000908152603360205260408120805487929061338a908490615d2e565b909155506133a090508160008888888888612e80565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d8787876040516133e793929190615e2a565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050505050565b6002606654141561345c5760405162461bcd60e51b8152600401610c7b90615985565b6002606655600061346c60345490565b90506000838060200190518101906134849190615e5f565b60408101519091506001600160a01b03166134e15760405162461bcd60e51b815260206004820152601860248201527f5265636569766572206973207a65726f206164647265737300000000000000006044820152606401610c7b565b6134ed868686866142f5565b6134f56115c2565b1561369c5760405163f667f89760e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f667f89790602401600060405180830381600087803b15801561355b57600080fd5b505af115801561356f573d6000803e3d6000fd5b50505050600061357d611a7f565b60405163fc1b134560e01b815261ffff821660048201523060248201529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc1b134590604401606060405180830381865afa1580156135f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136159190615b71565b50509050806000126136615760405162461bcd60e51b81526020600482015260156024820152744e6567617469766520436173682042616c616e636560581b6044820152606401610c7b565b60008461366e8984615452565b6136789190615471565b905061369383856040015161368c84613128565b875161449e565b5050505061374e565b806020015115613734577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f242432a3083604001516136e460655490565b89896040518663ffffffff1660e01b8152600401613706959493929190615ee3565b600060405180830381600087803b15801561372057600080fd5b505af1158015613693573d6000803e3d6000fd5b61374c816040015186836000015184606001516145da565b505b5050600160665550505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610bf79085906323b872dd60e01b90608401612b2f565b604080516001808252818301909252606091816020015b6137b2614a60565b8152602001906001900390816137aa5790505090506002816000815181106137dc576137dc615b5b565b60200260200101516000019060068111156137f9576137f9615215565b9081600681111561380c5761380c615215565b81525050858160008151811061382457613824615b5b565b60200260200101516020019061ffff16908161ffff1681525050838160008151811061385257613852615b5b565b6020026020010151604001818152505060018160008151811061387757613877615b5b565b602002602001015160800190151590811515815250506001816000815181106138a2576138a2615b5b565b602090810291909101015190151560a0909101526040805160018082528183019092529081602001602082028036833701905050816000815181106138e9576138e9615b5b565b602090810291909101015160c0015263ffffffff60781b607883901b16600160981b600160f01b03609885901b1660ff60f01b60f088901b1660f860005b60ff16901b17171760001b8160008151811061394557613945615b5b565b602002602001015160c0015160008151811061396357613963615b5b565b60200260200101818152505095945050505050565b604080516001808252818301909252606091816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161398f57905050905085816000815181106139d4576139d4615b5b565b60200260200101516000019061ffff16908161ffff16815250508181600081518110613a0257613a02615b5b565b602090810291909101810151911515910152604080516001808252818301909252908160200160208202803683370190505081600081518110613a4757613a47615b5b565b602090810291909101015160400152805160f086901b60ff60f01b16609886901b600160981b600160f01b031617607885901b63ffffffff60781b1617908290600090613a9657613a96615b5b565b60200260200101516040015160008151811061396357613963615b5b565b60008083613b29576040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015613b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b249190615325565b613b2b565b475b9050613b37838261586c565b91508315613bef577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b9a57600080fd5b505af1158015613bae573d6000803e3d6000fd5b50613bea9350506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915087905084614725565b613c03565b613c036001600160a01b0387168684614725565b50949350505050565b6000613c1c620151806006615452565b613c27906005615452565b613c32906003615452565b821015613c3e57600080fd5b613c4c620151806006615452565b613c57906005615452565b613c62906003615452565b613c6c9083615d61565b610b0c908361586c565b60008160011415613ca557613c8f620151806006615452565b613c9a906005615452565b610b0c906003615452565b8160021415613cdd57613cbc620151806006615452565b613cc7906005615452565b613cd2906003615452565b610b0c906002615452565b8160031415613d1557613cf4620151806006615452565b613cff906005615452565b613d0a906003615452565b610b0c906004615452565b8160041415613d4d57613d2c620151806006615452565b613d37906005615452565b613d42906003615452565b613cd2906004615452565b8160051415613d9057613d64620151806006615452565b613d6f906005615452565b613d7a906003615452565b613d85906004615452565b610b0c906005615452565b8160061415613dd357613da7620151806006615452565b613db2906005615452565b613dbd906003615452565b613dc8906004615452565b610b0c90600a615452565b8160071415613e1657613dea620151806006615452565b613df5906005615452565b613e00906003615452565b613e0b906004615452565b610b0c906014615452565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610c7b565b6000806000613e5c85614755565b9050613e6b6201518085615d61565b15613e7d576000809250925050614032565b838110613e91576000809250925050614032565b600062015180613ea1838761586c565b613eab9190615471565b9050605a8111613ec2579250600191506140329050565b6101688111613f3757600062015180613edc816006615452565b613ee69085615d61565b613ef09190615471565b613efb605a8461586c565b613f059190615d2e565b9050613f12600682615471565b613f1d90605a615d2e565b613f28600683615d61565b60001494509450505050614032565b6108708111613fa957600062015180613f51816006615452565b613f5c906005615452565b613f669085615d61565b613f709190615471565b613f7c6101688461586c565b613f869190615d2e565b9050613f93601e82615471565b613f9e906087615d2e565b613f28601e83615d61565b611de2811161402657600062015180613fc3816006615452565b613fce906005615452565b613fd9906003615452565b613fe39085615d61565b613fed9190615471565b613ff96108708461586c565b6140039190615d2e565b9050614010605a82615471565b61401b9060c3615d2e565b613f28605a83615d61565b61010060009350935050505b9250929050565b600054610100900460ff166140605760405162461bcd60e51b8152600401610c7b90615d75565b8251614073906035906020860190614aa6565b508151614087906036906020850190614aa6565b50805161409b906037906020840190614b26565b5060005b8151811015614104576001603860008484815181106140c0576140c0615b5b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806140fc81615d46565b91505061409f565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b15801561417e57600080fd5b505af1158015614192573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b15801561420f57600080fd5b505af1158015612c85573d6000803e3d6000fd5b6000614278826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166147749092919063ffffffff16565b805190915015610fc457808060200190518101906142969190615f1d565b610fc45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c7b565b6001600160a01b0384166143565760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7b565b3361436681866000878787612b66565b6001600160a01b038516600090815260336020526040902054848110156143db5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b6064820152608401610c7b565b6001600160a01b038616600090815260336020526040812086830390556034805487929061440a90849061586c565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a409887878760405161445893929190615e2a565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001613429565b60008060006144ac846112ac565b91509150600081614524576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156144fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451f9190615325565b614526565b475b604051625e665d60e31b815261ffff8a1660048201526001600160581b038816602482015286151560448201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302f332e8906064016020604051808303816000875af11580156145a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145cd9190615325565b5061288083888484613ab4565b60008060006145e8856112ac565b91509150600081614660576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015614637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465b9190615325565b614662565b475b90506000614689614671611a7f565b614679611a25565b6146828b613128565b898b614783565b604051630276b64b60e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630276b64b906146da9030908590600401615bda565b600060405180830381600087803b1580156146f457600080fd5b505af1158015614708573d6000803e3d6000fd5b50505050614718848a8585613ab4565b9998505050505050505050565b6040516001600160a01b038316602482015260448101829052610fc490849063a9059cbb60e01b90606401612b2f565b60006201518082101561476757600080fd5b613c6c6201518083615d61565b60606129e484846000856148f6565b604080516001808252818301909252606091816020015b6147a2614a60565b81526020019060019003908161479a5790505090506000816000815181106147cc576147cc615b5b565b60200260200101516000019060068111156147e9576147e9615215565b908160068111156147fc576147fc615215565b81525050858160008151811061481457614814615b5b565b60200260200101516020019061ffff16908161ffff168152505060018160008151811061484357614843615b5b565b60200260200101516080019015159081151581525050818160008151811061486d5761486d615b5b565b602090810291909101015190151560a0909101526040805160018082528183019092529081602001602082028036833701905050816000815181106148b4576148b4615b5b565b602090810291909101015160c0015263ffffffff60781b607884901b16600160981b600160f01b03609886901b1660ff60f01b60f088901b1660f86001613927565b6060824710156149575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c7b565b6001600160a01b0385163b6149ae5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c7b565b600080866001600160a01b031685876040516149ca9190615f3a565b60006040518083038185875af1925050503d8060008114614a07576040519150601f19603f3d011682016040523d82523d6000602084013e614a0c565b606091505b5091509150614a1c828286614a27565b979650505050505050565b60608315614a36575081610a03565b825115614a465782518084602001fd5b8160405162461bcd60e51b8152600401610c7b9190614c35565b6040805160e081019091528060008152602001600061ffff1681526020016000815260200160008152602001600015158152602001600015158152602001606081525090565b828054614ab29061541d565b90600052602060002090601f016020900481019282614ad45760008555614b1a565b82601f10614aed57805160ff1916838001178555614b1a565b82800160010185558215614b1a579182015b82811115614b1a578251825591602001919060010190614aff565b5061313e929150614b7b565b828054828255906000526020600020908101928215614b1a579160200282015b82811115614b1a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614b46565b5b8082111561313e5760008155600101614b7c565b6020808252825182820181905260009190848201906040850190845b81811015614bd15783516001600160a01b031683529284019291840191600101614bac565b50909695505050505050565b60005b83811015614bf8578181015183820152602001614be0565b83811115610bf75750506000910152565b60008151808452614c21816020860160208601614bdd565b601f01601f19169290920160200192915050565b602081526000610a036020830184614c09565b600060208284031215614c5a57600080fd5b5035919050565b6001600160a01b0381168114614c7657600080fd5b50565b60008060408385031215614c8c57600080fd5b8235614c9781614c61565b946020939093013593505050565b6001600160581b0381168114614c7657600080fd5b63ffffffff81168114614c7657600080fd5b60008060008060808587031215614ce257600080fd5b843593506020850135614cf481614ca5565b92506040850135614d0481614c61565b91506060850135614d1481614cba565b939692955090935050565b61ffff81168114614c7657600080fd5b64ffffffffff81168114614c7657600080fd5b60008060408385031215614d5557600080fd5b8235614d6081614d1f565b91506020830135614d7081614d2f565b809150509250929050565b600080600060608486031215614d9057600080fd5b8335614d9b81614c61565b92506020840135614dab81614c61565b929592945050506040919091013590565b600080600060608486031215614dd157600080fd5b833592506020840135614de381614c61565b91506040840135614df381614cba565b809150509250925092565b600060208284031215614e1057600080fd5b8135610a0381614c61565b8015158114614c7657600080fd5b600060208284031215614e3b57600080fd5b8135610a0381614e1b565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715614e7f57614e7f614e46565b60405290565b60405160c081016001600160401b0381118282101715614e7f57614e7f614e46565b604051601f8201601f191681016001600160401b0381118282101715614ecf57614ecf614e46565b604052919050565b60006001600160401b03821115614ef057614ef0614e46565b50601f01601f191660200190565b600082601f830112614f0f57600080fd5b8135614f22614f1d82614ed7565b614ea7565b818152846020838601011115614f3757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215614f6c57600080fd5b8535614f7781614c61565b94506020860135614f8781614c61565b93506040860135925060608601356001600160401b0380821115614faa57600080fd5b614fb689838a01614efe565b93506080880135915080821115614fcc57600080fd5b50614fd988828901614efe565b9150509295509295909350565b60008060408385031215614ff957600080fd5b823591506020830135614d7081614c61565b60008060006060848603121561502057600080fd5b833561502b81614c61565b92506020840135915060408401356001600160401b0381111561504d57600080fd5b61505986828701614efe565b9150509250925092565b60008060006060848603121561507857600080fd5b83359250602084013561508a81614c61565b91506040840135614df381614c61565b60008082840360a08112156150ae57600080fd5b833592506080601f19820112156150c457600080fd5b50604051608081018181106001600160401b03821117156150e7576150e7614e46565b60405260208401356150f881614e1b565b8152604084013561510881614e1b565b6020820152606084013561511b81614c61565b6040820152608084013561512e81614cba565b6060820152919491935090915050565b6000806040838503121561515157600080fd5b823561515c81614c61565b91506020830135614d7081614c61565b60008060008060008060a0878903121561518557600080fd5b863561519081614c61565b955060208701356151a081614c61565b9450604087013593506060870135925060808701356001600160401b03808211156151ca57600080fd5b818901915089601f8301126151de57600080fd5b8135818111156151ed57600080fd5b8a60208285010111156151ff57600080fd5b6020830194508093505050509295509295509295565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038416815260208101839052606081016005831061525257615252615215565b826040830152949350505050565b6000806000806080858703121561527657600080fd5b843561528181614c61565b93506020850135925060408501356001600160401b03808211156152a457600080fd5b6152b088838901614efe565b935060608701359150808211156152c657600080fd5b506152d387828801614efe565b91505092959194509250565b600080604083850312156152f257600080fd5b8235915060208301356001600160401b0381111561530f57600080fd5b61531b85828601614efe565b9150509250929050565b60006020828403121561533757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001600160ff1b038184138284138082168684048611161561537a5761537a61533e565b600160ff1b60008712828116878305891216156153995761539961533e565b600087129250878205871284841616156153b5576153b561533e565b878505871281841616156153cb576153cb61533e565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826153fe576153fe6153d9565b600160ff1b8214600019841416156154185761541861533e565b500590565b600181811c9082168061543157607f821691505b60208210811415611a5757634e487b7160e01b600052602260045260246000fd5b600081600019048311821515161561546c5761546c61533e565b500290565b600082615480576154806153d9565b500490565b805160ff81168114610ad757600080fd5b600080600080608085870312156154ac57600080fd5b84519350602085015192506154c360408601615485565b6060959095015193969295505050565b6000806000606084860312156154e857600080fd5b83516154f381614ca5565b925061550160208501615485565b9150604084015190509250925092565b60006001600160401b0382111561552a5761552a614e46565b5060051b60200190565b600082601f83011261554557600080fd5b81516020615555614f1d83615511565b82815260059290921b8401810191818101908684111561557457600080fd5b8286015b848110156155965761558981615485565b8352918301918301615578565b509695505050505050565b6000602082840312156155b357600080fd5b81516001600160401b03808211156155ca57600080fd5b9083019061016082860312156155df57600080fd5b6155e7614e5c565b6155f083615485565b81526155fe60208401615485565b602082015261560f60408401615485565b604082015261562060608401615485565b606082015261563160808401615485565b608082015261564260a08401615485565b60a082015261565360c08401615485565b60c082015261566460e08401615485565b60e0820152610100615677818501615485565b90820152610120838101518381111561568f57600080fd5b61569b88828701615534565b82840152505061014080840151838111156156b557600080fd5b6156c188828701615534565b918301919091525095945050505050565b6000602082840312156156e457600080fd5b81516001600160401b038111156156fa57600080fd5b8201601f8101841361570b57600080fd5b8051615719614f1d82614ed7565b81815285602083850101111561572e57600080fd5b6108d7826020830160208601614bdd565b682bb930b83832b2103360b91b815260008351615763816009850160208801614bdd565b6201020160ed1b600991840191820152835161578681600c840160208801614bdd565b01600c01949350505050565b613bb360f11b8152600083516157af816002850160208801614bdd565b601d60f91b60029184019182015283516157d0816003840160208801614bdd565b01600301949350505050565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b60008282101561587e5761587e61533e565b500390565b8151151581526020808301511515908201526040808301516001600160a01b03169082015260609182015163ffffffff169181019190915260800190565b600060a082840312156158d357600080fd5b60405160a081018181106001600160401b03821117156158f5576158f5614e46565b8060405250809150825161590881614c61565b8152602083015161591881614e1b565b60208201526040838101519082015260608301516005811061593957600080fd5b6060820152608092830151920191909152919050565b600080610140838503121561596357600080fd5b61596d84846158c1565b915061597c8460a085016158c1565b90509250929050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060a082840312156159ce57600080fd5b60405160a081018181106001600160401b03821117156159f0576159f0614e46565b60405282516159fe81614d2f565b815260208301516001600160f81b031981168114615a1b57600080fd5b6020820152615a2c60408401615485565b60408201526060830151615a3f81614d1f565b606082015260808301516dffffffffffffffffffffffffffff1981168114615a6657600080fd5b60808201529392505050565b60006020808385031215615a8557600080fd5b82516001600160401b03811115615a9b57600080fd5b8301601f81018513615aac57600080fd5b8051615aba614f1d82615511565b81815260c09182028301840191848201919088841115615ad957600080fd5b938501935b83851015615b4f5780858a031215615af65760008081fd5b615afe614e85565b85518152868601518782015260408087015190820152606080870151908201526080808701519082015260a08087015160038110615b3c5760008081fd5b9082015283529384019391850191615ade565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600080600060608486031215615b8657600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015615bcf57815187529582019590820190600101615bb3565b509495945050505050565b6001600160a01b03831681526040602080830182905283518383018190526000929160609182860190600581901b87018401888401875b83811015615c9a57605f198a8403018552815160e0815160078110615c3857615c38615215565b85528188015161ffff1688860152898201518a860152888201518986015260808083015115159086015260a08083015115159086015260c091820151918501819052615c8681860183615b9f565b968801969450505090850190600101615c11565b50909a9950505050505050505050565b6001600160a01b03831681526040602080830182905283518383018190526000929160609182860190600581901b87018401888401875b83811015615c9a57898303605f190185528151805161ffff16845286810151151587850152880151888401889052615d1b88850182615b9f565b9587019593505090850190600101615ce1565b60008219821115615d4157615d4161533e565b500190565b6000600019821415615d5a57615d5a61533e565b5060010190565b600082615d7057615d706153d9565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215615dd257600080fd5b8151610a0381614c61565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090615e1890830185614c09565b82810360a08401526147188185614c09565b838152606060208201526000615e436060830185614c09565b8281036040840152615e558185614c09565b9695505050505050565b600060808284031215615e7157600080fd5b604051608081018181106001600160401b0382111715615e9357615e93614e46565b6040528251615ea181614e1b565b81526020830151615eb181614e1b565b60208201526040830151615ec481614c61565b60408201526060830151615ed781614cba565b60608201529392505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614a1c90830184614c09565b600060208284031215615f2f57600080fd5b8151610a0381614e1b565b60008251615f4c818460208701614bdd565b919091019291505056fea26469706673582212203a7f734b482cda160a7e96ede0f03e6e236489c70bae1c711713324ec8fb4dba64736f6c634300080b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061030c5760003560e01c8063959b8c3f1161019d578063cf387fed116100e9578063ee719bc8116100a2578063f8eef10f1161007c578063f8eef10f14610763578063fad8b32a1461077a578063fc673c4f1461078d578063fe9d9303146107a057600080fd5b8063ee719bc8146106fd578063ef8b30f714610724578063f23a6e611461073757600080fd5b8063cf387fed14610652578063d84878b81461066d578063d905777e14610680578063d95b637114610693578063dd62ed3e146106a6578063e16695b5146106df57600080fd5b8063b3d7f6b911610156578063c63d75b611610130578063c63d75b614610611578063c6e6f59214610624578063cb803ceb14610637578063ce96cb771461063f57600080fd5b8063b3d7f6b9146105d8578063b460af94146105eb578063ba087652146105fe57600080fd5b8063959b8c3f1461056857806395d89b411461057b5780639bd9bbc614610583578063a109329514610596578063a9059cbb1461059e578063ad5c4648146105b157600080fd5b8063313ce5671161025c57806351489551116102155780636e553f65116101ef5780636e553f651461050657806370a0823114610519578063745d08d91461054257806394bf804d1461055557600080fd5b806351489551146104ba578063556f0dc7146104ec57806362ad1b83146104f357600080fd5b8063313ce5671461043c57806338d52e0f146104515780633d3192cb14610459578063402d267d1461046c57806348d8f98d1461047f5780634cdad506146104a757600080fd5b80630a28a477116102c957806318160ddd116102a357806318160ddd146103cf57806319b53d35146103d757806323b872dd1461041657806329cf14051461042957600080fd5b80630a28a477146103945780630db8481c146103a7578063152b838c146103bc57600080fd5b806301e1d114146103115780630558d5001461032c57806306e485381461033457806306fdde031461034957806307a2d13a1461035e578063095ea7b314610371575b600080fd5b6103196107b3565b6040519081526020015b60405180910390f35b606554610319565b61033c6108e0565b6040516103239190614b90565b610351610942565b6040516103239190614c35565b61031961036c366004614c48565b6109cb565b61038461037f366004614c79565b610adc565b6040519015158152602001610323565b6103196103a2366004614c48565b610af4565b6103ba6103b5366004614ccc565b610be9565b005b6103ba6103ca366004614d42565b610bfd565b603454610319565b6103fe7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610323565b610384610424366004614d7b565b610fc9565b6103ba610437366004614ccc565b6110f7565b60085b60405160ff9091168152602001610323565b6103fe611105565b6103ba610467366004614dbc565b61114c565b61031961047a366004614dfe565b61118b565b6104876111a9565b6040805161ffff909316835264ffffffffff909116602083015201610323565b6103196104b5366004614c48565b6111cb565b6104cd6104c8366004614e29565b6112ac565b604080516001600160a01b039093168352901515602083015201610323565b6001610319565b6103ba610501366004614f54565b6112e4565b610319610514366004614fe6565b611320565b610319610527366004614dfe565b6001600160a01b031660009081526033602052604090205490565b6103ba610550366004614dbc565b6113da565b610319610563366004614fe6565b611419565b6103ba610576366004614dfe565b611477565b610351611595565b6103ba61059136600461500b565b6115a4565b6103846115c2565b6103846105ac366004614c79565b6115db565b6103fe7f000000000000000000000000000000000000000000000000000000000000000081565b6103196105e6366004614c48565b61168e565b6103196105f9366004615063565b6116d8565b61031961060c366004615063565b61175f565b61031961061f366004614dfe565b6118ee565b610319610632366004614c48565b61191b565b61043f611a25565b61031961064d366004614dfe565b611a5d565b61065a611a7f565b60405161ffff9091168152602001610323565b6103ba61067b36600461509a565b611a9e565b61031961068e366004614dfe565b611acc565b6103846106a136600461513e565b611aea565b6103196106b436600461513e565b6001600160a01b039182166000908152603b6020908152604080832093909416825291909152205490565b6106e7611b8b565b60405164ffffffffff9091168152602001610323565b610705611ba9565b604080516001600160a01b039093168352602083019190915201610323565b610319610732366004614c48565b611c91565b61074a61074536600461516c565b611cdb565b6040516001600160e01b03199091168152602001610323565b61076b612001565b6040516103239392919061522b565b6103ba610788366004614dfe565b6120bc565b6103ba61079b366004615260565b6121d8565b6103ba6107ae3660046152df565b61220a565b60006107bd6115c2565b156107cf576107ca612238565b905090565b60006107d9611ba9565b9150506000806107e76111a9565b9150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c52c43e1848461082760345490565b6040516001600160e01b031960e086901b16815261ffff909316600484015264ffffffffff909116602483015260448201524260648201526000608482015260a401602060405180830381865afa158015610886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108aa9190615325565b905060006305f5e1006108bd8684615354565b6108c791906153ef565b905060008112156108d757600080fd5b95945050505050565b6060603780548060200260200160405190810160405280929190818152602001828054801561093857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161091a575b5050505050905090565b6060603580546109519061541d565b80601f016020809104026020016040519081016040528092919081815260200182805461097d9061541d565b80156109385780601f1061099f57610100808354040283529160200191610938565b820191906000526020600020905b8154815290600101906020018083116109ad57509395945050505050565b60006109d56115c2565b15610a0a5760006109e4612238565b90506109ef60345490565b6109f98285615452565b610a039190615471565b9392505050565b600080610a156111a9565b60405163aaae47b560e01b815261ffff831660048201526024810187905264ffffffffff821660448201526000606482018190524260848301529294509092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aaae47b59060a401608060405180830381865afa158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca9190615496565b5091979650505050505050565b919050565b600033610aea8185856123bd565b5060019392505050565b6000610afe6115c2565b15610b1257610b0c8261191b565b92915050565b600080610b1d6111a9565b60405163bac9e8b160e01b815261ffff831660048201526024810187905264ffffffffff8216604482015260006064820152426084820152600160a482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bac9e8b19060c401606060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd691906154d3565b50506001600160581b0316949350505050565b610bf78484848460006124e4565b50505050565b600054610100900460ff16610c185760005460ff1615610c1c565b303b155b610c845760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff16158015610ca6576000805461ffff19166101011790555b60405163d4ccb0ed60e01b815261ffff841660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4ccb0ed90602401600060405180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d3991908101906155a1565b805190915060ff16610d805760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401610c7b565b8051610d979060ff1664ffffffffff85164261283c565b610dd65760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964206d6174757269747960801b6044820152606401610c7b565b610ded61ffff851664ffffffffff8516600161288c565b6065556000610dfa611ba9565b5090506000610e07612001565b50909150600090506001600160a01b03831615610e8957826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e8491908101906156d2565b610ea6565b6040518060400160405280600381526020016208aa8960eb1b8152505b90506000610eba8764ffffffffff166128e7565b9050610f128282604051602001610ed292919061573f565b6040516020818303038152906040528383604051602001610ef4929190615792565b60408051601f198184030181526000835260208301909152906129ec565b610f486001600160a01b0384167f0000000000000000000000000000000000000000000000000000000000000000600019612a1e565b836001600160a01b0316836001600160a01b031614158015610f7257506001600160a01b03841615155b15610fad57610fad6001600160a01b0385167f0000000000000000000000000000000000000000000000000000000000000000600019612a1e565b50505050508015610fc4576000805461ff00191690555b505050565b60006001600160a01b038316610ff15760405162461bcd60e51b8152600401610c7b906157dc565b6001600160a01b0384166110565760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610c7b565b6000339050611087818686866040518060200160405280600081525060405180602001604052806000815250612b66565b611092858285612c8e565b6110be818686866040518060200160405280600081525060405180602001604052806000815250612d1a565b6110ec8186868660405180602001604052806000815250604051806020016040528060008152506000612e80565b506001949350505050565b610bf78484848460016124e4565b600080600061111460016112ac565b91509150806111235781611145565b7f00000000000000000000000000000000000000000000000000000000000000005b9250505090565b610fc4836040518060800160405280600015158152602001600015158152602001856001600160a01b031681526020018463ffffffff16815250611a9e565b60006111956115c2565b6111a157600019610b0c565b600092915050565b6000806111c1606554603081901c91600882901c9190565b5090939092509050565b60006111d56115c2565b156111e357610b0c826109cb565b6000806111ee6111a9565b60405163416a158760e01b815261ffff831660048201526024810187905264ffffffffff821660448201526000606482015242608482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063416a15879060a401608060405180830381865afa15801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190615496565b50919695505050505050565b60008082156112c5576112bd611ba9565b5091506112d3565b6112cd612001565b50909250505b50916001600160a01b038316159150565b6112ee3386611aea565b61130a5760405162461bcd60e51b8152600401610c7b90615820565b61131985858585856001613045565b5050505050565b600061132b8261118b565b8311156113685760405162461bcd60e51b815260206004820152600b60248201526a13585e0811195c1bdcda5d60aa1b6044820152606401610c7b565b600061137384611c91565b905061138c8461138283613128565b85600060016124e4565b60408051858152602081018390526001600160a01b0385169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a39392505050565b610fc4836040518060800160405280600115158152602001600015158152602001856001600160a01b031681526020018463ffffffff16815250611a9e565b6000806114258461168e565b90506114348161138286613128565b60408051828152602081018690526001600160a01b0385169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791016113cb565b336001600160a01b03821614156114dc5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b6064820152608401610c7b565b6001600160a01b03811660009081526038602052604090205460ff161561152d57336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff1916905561155c565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b6060603680546109519061541d565b610fc433848484604051806020016040528060008152506001613045565b6000426115cd611b8b565b64ffffffffff161115905090565b60006001600160a01b0383166116035760405162461bcd60e51b8152600401610c7b906157dc565b6000339050611634818286866040518060200160405280600081525060405180602001604052806000815250612b66565b611660818286866040518060200160405280600081525060405180602001604052806000815250612d1a565b610aea8182868660405180602001604052806000815250604051806020016040528060008152506000612e80565b60006116986115c2565b156116cf5760405162461bcd60e51b815260206004820152600760248201526613585d1d5c995960ca1b6044820152606401610c7b565b610b0c826109cb565b6000806116e485610af4565b9050336001600160a01b0384161461170157611701833383612c8e565b61170c818585613142565b60408051868152602081018390526001600160a01b03808616929087169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a4949350505050565b60008061176a611105565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a0823190602401602060405180830381865afa1580156117b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d69190615325565b9050336001600160a01b038416146117f3576117f3833387612c8e565b6117fe858585613142565b6000611808611105565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa158015611850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118749190615325565b90506000611882838361586c565b9050846001600160a01b0316866001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848b6040516118dc929190918252602082015260400190565b60405180910390a49695505050505050565b60006118f86115c2565b611909576001600160581b0361190c565b60005b6001600160581b031692915050565b60006119256115c2565b1561194a576000611934612238565b90508061194060345490565b6109f99085615452565b6000806119556111a9565b604051631f0750c160e31b815261ffff831660048201526024810187905264ffffffffff82166044820152600060648201819052426084830152600160a48301529294509092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f83a86089060c401606060405180830381865afa1580156119ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1191906154d3565b50506001600160581b031695945050505050565b6000806000611a446007611a37611b8b565b64ffffffffff16426131a7565b915091508015611a575760009250505090565b50919050565b6001600160a01b038116600090815260336020526040812054610b0c906109cb565b6000611a96606554603081901c91600882901c9190565b509092915050565b600081604051602001611ab19190615883565b6040516020818303038152906040529050610fc4838261220a565b6001600160a01b038116600090815260336020526040812054610b0c565b6000816001600160a01b0316836001600160a01b03161480611b5557506001600160a01b03831660009081526038602052604090205460ff168015611b5557506001600160a01b038083166000908152603a602090815260408083209387168352929052205460ff16155b80610a0357506001600160a01b0380831660009081526039602090815260408083209387168352929052205460ff169392505050565b6000611ba2606554603081901c91600882901c9190565b5092915050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ebad18e611be6611a7f565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240161014060405180830381865afa158015611c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4a919061594f565b9092509050600482606001516004811115611c6757611c67615215565b1415611c7f5750805160409091015190939092509050565b80516040909101519094909350915050565b6000611c9b6115c2565b15611cd25760405162461bcd60e51b815260206004820152600760248201526613585d1d5c995960ca1b6044820152606401610c7b565b610b0c8261191b565b600060026066541415611d005760405162461bcd60e51b8152600401610c7b90615985565b60026066556000611d1060655490565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611d4957508086145b8015611d555750600085135b611d8b5760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b6044820152606401610c7b565b60405163b0de221760e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b0de22179060240160a060405180830381865afa158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1691906159bc565b604051635a9b7fdb60e11b81523060048201529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b536ffb690602401600060405180830381865afa158015611e80573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ea89190810190615a72565b60208301519091506001600160f81b031916158015611ec8575080516001145b8015611f37575082611f3582600081518110611ee657611ee6615b5b565b60200260200101516000015183600081518110611f0557611f05615b5b565b60200260200101516020015184600081518110611f2457611f24615b5b565b60200260200101516040015161288c565b145b611f4057600080fd5b6060808a6001600160a01b03168c6001600160a01b03161415611f9c5787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450611fd692505050565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b611fe48b8a848460006132f0565b505060016066555063f23a6e6160e01b9998505050505050505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ebad18e61203e611a7f565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240161014060405180830381865afa15801561207e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a2919061594f565b508051604082015160609092015190969195509350915050565b6001600160a01b03811633141561211f5760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b6064820152608401610c7b565b6001600160a01b03811660009081526038602052604090205460ff161561217357336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561219f565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b6121e23385611aea565b6121fe5760405162461bcd60e51b8152600401610c7b90615820565b610bf784848484613439565b61222533838360405180602001604052806000815250613439565b5050565b6001600160a01b03163b151590565b600080612243611a7f565b60405163fc1b134560e01b815261ffff821660048201523060248201529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc1b134590604401606060405180830381865afa1580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190615b71565b5050604051631baefc5d60e21b815261ffff8416600482015260248101829052600160448201529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636ebbf17490606401602060405180830381865afa158015612359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237d9190615325565b905060008113610a035760405162461bcd60e51b815260206004820152600b60248201526a4d75737420536574746c6560a81b6044820152606401610c7b565b6001600160a01b0383166124215760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c7b565b6001600160a01b0382166124835760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c7b565b6001600160a01b038381166000818152603b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600260665414156125075760405162461bcd60e51b8152600401610c7b90615985565b60026066556125146115c2565b156125515760405162461bcd60e51b815260206004820152600d60248201526c1990d85cda081b585d1d5c9959609a1b6044820152606401610c7b565b60008061255d836112ac565b915091506000816125d5576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190615325565b6125d7565b475b90508115612734576126146001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308b61375b565b604051632e1a7d4d60e01b8152600481018990527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561267657600080fd5b505af115801561268a573d6000803e3d6000fd5b5050505060006126ab61269b611a7f565b6126a3611a25565b8b8b8a613793565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630276b64b8a30846040518463ffffffff1660e01b81526004016126fc929190615bda565b6000604051808303818588803b15801561271557600080fd5b505af1158015612729573d6000803e3d6000fd5b5050505050506127eb565b6127496001600160a01b03841633308b61375b565b6000612766612756611a7f565b61275e611a25565b8a8989613978565b604051630541f52760e41b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063541f5270906127b79030908590600401615caa565b600060405180830381600087803b1580156127d157600080fd5b505af11580156127e5573d6000803e3d6000fd5b50505050505b61282086886001600160581b0316604051806020016040528060008152506040518060200160405280600081525060006132f0565b61282c83338484613ab4565b5050600160665550505050505050565b60008061284883613c0c565b9050600061285586613c76565b61285f9083615d2e565b90508085111561287457600092505050610a03565b60006128808587613e4e565b98975050505050505050565b6000613fff84111561289d57600080fd5b64ffffffffff8311156128af57600080fd5b60088211156128bd57600080fd5b5067ffff000000000000603084901b1665ffffffffff00600884901b161760ff8216179392505050565b60608161290b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612935578061291f81615d46565b915061292e9050600a83615471565b915061290f565b6000816001600160401b0381111561294f5761294f614e46565b6040519080825280601f01601f191660200182016040528015612979576020820181803683370190505b5090505b84156129e45761298e60018361586c565b915061299b600a86615d61565b6129a6906030615d2e565b60f81b8183815181106129bb576129bb615b5b565b60200101906001600160f81b031916908160001a9053506129dd600a86615471565b945061297d565b949350505050565b600054610100900460ff16612a135760405162461bcd60e51b8152600401610c7b90615d75565b610fc4838383614039565b801580612a985750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a969190615325565b155b612b035760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610c7b565b6040516001600160a01b038316602482015260448101829052610fc490849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614223565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015612be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0b9190615dc0565b90506001600160a01b03811615612c8557604051633ad5cbc160e11b81526001600160a01b038216906375ab978290612c52908a908a908a908a908a908a90600401615ddd565b600060405180830381600087803b158015612c6c57600080fd5b505af1158015612c80573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b038381166000908152603b60209081526040808320938616835292905220546000198114610bf75781811015612d0d5760405162461bcd60e51b815260206004820152601e60248201527f4552433737373a20696e73756666696369656e7420616c6c6f77616e636500006044820152606401610c7b565b610bf784848484036123bd565b6001600160a01b03851660009081526033602052604090205483811015612d935760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610c7b565b6001600160a01b03808716600090815260336020526040808220878503905591871681529081208054869290612dca908490615d2e565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051612e2293929190615e2a565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e6f91815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f259190615dc0565b90506001600160a01b03811615612fa1576040516223de2960e01b81526001600160a01b038216906223de2990612f6a908b908b908b908b908b908b90600401615ddd565b600060405180830381600087803b158015612f8457600080fd5b505af1158015612f98573d6000803e3d6000fd5b5050505061303b565b811561303b576001600160a01b0386163b1561303b5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a401610c7b565b5050505050505050565b6001600160a01b0386166130a65760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7b565b6001600160a01b0385166130fc5760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f20616464726573736044820152606401610c7b565b3361310b818888888888612b66565b613119818888888888612d1a565b612c8581888888888888612e80565b60006001600160581b0382111561313e57600080fd5b5090565b6040805160808101825260018152600060208083018290526001600160a01b03861683850152606083018290529251909261317e929101615883565b60408051601f1981840301815260208301909152600082529150610bf790839086908490613439565b600080600085116131f25760405162461bcd60e51b815260206004820152601560248201527410d1ce881b9bc81b585c9ad95d1cc81b1a5cdd1959605a1b6044820152606401610c7b565b600785111561323c5760405162461bcd60e51b815260206004820152601660248201527510d1ce881b585c9ad95d081a5b99195e08189bdd5b9960521b6044820152606401610c7b565b600061324784613c0c565b905060015b8681116132a957600061325e82613c76565b6132689084615d2e565b90508681141561328057509250600091506132e89050565b8681111561329657509250600191506132e89050565b50806132a181615d46565b91505061324c565b5060405162461bcd60e51b815260206004820152601360248201527210d1ce881b9bc81b585c9ad95d08199bdd5b99606a1b6044820152606401610c7b565b935093915050565b6001600160a01b0385166133465760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c7b565b6000339050846034600082825461335d9190615d2e565b90915550506001600160a01b0386166000908152603360205260408120805487929061338a908490615d2e565b909155506133a090508160008888888888612e80565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d8787876040516133e793929190615e2a565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050505050565b6002606654141561345c5760405162461bcd60e51b8152600401610c7b90615985565b6002606655600061346c60345490565b90506000838060200190518101906134849190615e5f565b60408101519091506001600160a01b03166134e15760405162461bcd60e51b815260206004820152601860248201527f5265636569766572206973207a65726f206164647265737300000000000000006044820152606401610c7b565b6134ed868686866142f5565b6134f56115c2565b1561369c5760405163f667f89760e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f667f89790602401600060405180830381600087803b15801561355b57600080fd5b505af115801561356f573d6000803e3d6000fd5b50505050600061357d611a7f565b60405163fc1b134560e01b815261ffff821660048201523060248201529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc1b134590604401606060405180830381865afa1580156135f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136159190615b71565b50509050806000126136615760405162461bcd60e51b81526020600482015260156024820152744e6567617469766520436173682042616c616e636560581b6044820152606401610c7b565b60008461366e8984615452565b6136789190615471565b905061369383856040015161368c84613128565b875161449e565b5050505061374e565b806020015115613734577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f242432a3083604001516136e460655490565b89896040518663ffffffff1660e01b8152600401613706959493929190615ee3565b600060405180830381600087803b15801561372057600080fd5b505af1158015613693573d6000803e3d6000fd5b61374c816040015186836000015184606001516145da565b505b5050600160665550505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610bf79085906323b872dd60e01b90608401612b2f565b604080516001808252818301909252606091816020015b6137b2614a60565b8152602001906001900390816137aa5790505090506002816000815181106137dc576137dc615b5b565b60200260200101516000019060068111156137f9576137f9615215565b9081600681111561380c5761380c615215565b81525050858160008151811061382457613824615b5b565b60200260200101516020019061ffff16908161ffff1681525050838160008151811061385257613852615b5b565b6020026020010151604001818152505060018160008151811061387757613877615b5b565b602002602001015160800190151590811515815250506001816000815181106138a2576138a2615b5b565b602090810291909101015190151560a0909101526040805160018082528183019092529081602001602082028036833701905050816000815181106138e9576138e9615b5b565b602090810291909101015160c0015263ffffffff60781b607883901b16600160981b600160f01b03609885901b1660ff60f01b60f088901b1660f860005b60ff16901b17171760001b8160008151811061394557613945615b5b565b602002602001015160c0015160008151811061396357613963615b5b565b60200260200101818152505095945050505050565b604080516001808252818301909252606091816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161398f57905050905085816000815181106139d4576139d4615b5b565b60200260200101516000019061ffff16908161ffff16815250508181600081518110613a0257613a02615b5b565b602090810291909101810151911515910152604080516001808252818301909252908160200160208202803683370190505081600081518110613a4757613a47615b5b565b602090810291909101015160400152805160f086901b60ff60f01b16609886901b600160981b600160f01b031617607885901b63ffffffff60781b1617908290600090613a9657613a96615b5b565b60200260200101516040015160008151811061396357613963615b5b565b60008083613b29576040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015613b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b249190615325565b613b2b565b475b9050613b37838261586c565b91508315613bef577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b9a57600080fd5b505af1158015613bae573d6000803e3d6000fd5b50613bea9350506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915087905084614725565b613c03565b613c036001600160a01b0387168684614725565b50949350505050565b6000613c1c620151806006615452565b613c27906005615452565b613c32906003615452565b821015613c3e57600080fd5b613c4c620151806006615452565b613c57906005615452565b613c62906003615452565b613c6c9083615d61565b610b0c908361586c565b60008160011415613ca557613c8f620151806006615452565b613c9a906005615452565b610b0c906003615452565b8160021415613cdd57613cbc620151806006615452565b613cc7906005615452565b613cd2906003615452565b610b0c906002615452565b8160031415613d1557613cf4620151806006615452565b613cff906005615452565b613d0a906003615452565b610b0c906004615452565b8160041415613d4d57613d2c620151806006615452565b613d37906005615452565b613d42906003615452565b613cd2906004615452565b8160051415613d9057613d64620151806006615452565b613d6f906005615452565b613d7a906003615452565b613d85906004615452565b610b0c906005615452565b8160061415613dd357613da7620151806006615452565b613db2906005615452565b613dbd906003615452565b613dc8906004615452565b610b0c90600a615452565b8160071415613e1657613dea620151806006615452565b613df5906005615452565b613e00906003615452565b613e0b906004615452565b610b0c906014615452565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610c7b565b6000806000613e5c85614755565b9050613e6b6201518085615d61565b15613e7d576000809250925050614032565b838110613e91576000809250925050614032565b600062015180613ea1838761586c565b613eab9190615471565b9050605a8111613ec2579250600191506140329050565b6101688111613f3757600062015180613edc816006615452565b613ee69085615d61565b613ef09190615471565b613efb605a8461586c565b613f059190615d2e565b9050613f12600682615471565b613f1d90605a615d2e565b613f28600683615d61565b60001494509450505050614032565b6108708111613fa957600062015180613f51816006615452565b613f5c906005615452565b613f669085615d61565b613f709190615471565b613f7c6101688461586c565b613f869190615d2e565b9050613f93601e82615471565b613f9e906087615d2e565b613f28601e83615d61565b611de2811161402657600062015180613fc3816006615452565b613fce906005615452565b613fd9906003615452565b613fe39085615d61565b613fed9190615471565b613ff96108708461586c565b6140039190615d2e565b9050614010605a82615471565b61401b9060c3615d2e565b613f28605a83615d61565b61010060009350935050505b9250929050565b600054610100900460ff166140605760405162461bcd60e51b8152600401610c7b90615d75565b8251614073906035906020860190614aa6565b508151614087906036906020850190614aa6565b50805161409b906037906020840190614b26565b5060005b8151811015614104576001603860008484815181106140c0576140c0615b5b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806140fc81615d46565b91505061409f565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b15801561417e57600080fd5b505af1158015614192573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b15801561420f57600080fd5b505af1158015612c85573d6000803e3d6000fd5b6000614278826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166147749092919063ffffffff16565b805190915015610fc457808060200190518101906142969190615f1d565b610fc45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c7b565b6001600160a01b0384166143565760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7b565b3361436681866000878787612b66565b6001600160a01b038516600090815260336020526040902054848110156143db5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b6064820152608401610c7b565b6001600160a01b038616600090815260336020526040812086830390556034805487929061440a90849061586c565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a409887878760405161445893929190615e2a565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001613429565b60008060006144ac846112ac565b91509150600081614524576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156144fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451f9190615325565b614526565b475b604051625e665d60e31b815261ffff8a1660048201526001600160581b038816602482015286151560448201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302f332e8906064016020604051808303816000875af11580156145a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145cd9190615325565b5061288083888484613ab4565b60008060006145e8856112ac565b91509150600081614660576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015614637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465b9190615325565b614662565b475b90506000614689614671611a7f565b614679611a25565b6146828b613128565b898b614783565b604051630276b64b60e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630276b64b906146da9030908590600401615bda565b600060405180830381600087803b1580156146f457600080fd5b505af1158015614708573d6000803e3d6000fd5b50505050614718848a8585613ab4565b9998505050505050505050565b6040516001600160a01b038316602482015260448101829052610fc490849063a9059cbb60e01b90606401612b2f565b60006201518082101561476757600080fd5b613c6c6201518083615d61565b60606129e484846000856148f6565b604080516001808252818301909252606091816020015b6147a2614a60565b81526020019060019003908161479a5790505090506000816000815181106147cc576147cc615b5b565b60200260200101516000019060068111156147e9576147e9615215565b908160068111156147fc576147fc615215565b81525050858160008151811061481457614814615b5b565b60200260200101516020019061ffff16908161ffff168152505060018160008151811061484357614843615b5b565b60200260200101516080019015159081151581525050818160008151811061486d5761486d615b5b565b602090810291909101015190151560a0909101526040805160018082528183019092529081602001602082028036833701905050816000815181106148b4576148b4615b5b565b602090810291909101015160c0015263ffffffff60781b607884901b16600160981b600160f01b03609886901b1660ff60f01b60f088901b1660f86001613927565b6060824710156149575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c7b565b6001600160a01b0385163b6149ae5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c7b565b600080866001600160a01b031685876040516149ca9190615f3a565b60006040518083038185875af1925050503d8060008114614a07576040519150601f19603f3d011682016040523d82523d6000602084013e614a0c565b606091505b5091509150614a1c828286614a27565b979650505050505050565b60608315614a36575081610a03565b825115614a465782518084602001fd5b8160405162461bcd60e51b8152600401610c7b9190614c35565b6040805160e081019091528060008152602001600061ffff1681526020016000815260200160008152602001600015158152602001600015158152602001606081525090565b828054614ab29061541d565b90600052602060002090601f016020900481019282614ad45760008555614b1a565b82601f10614aed57805160ff1916838001178555614b1a565b82800160010185558215614b1a579182015b82811115614b1a578251825591602001919060010190614aff565b5061313e929150614b7b565b828054828255906000526020600020908101928215614b1a579160200282015b82811115614b1a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614b46565b5b8082111561313e5760008155600101614b7c565b6020808252825182820181905260009190848201906040850190845b81811015614bd15783516001600160a01b031683529284019291840191600101614bac565b50909695505050505050565b60005b83811015614bf8578181015183820152602001614be0565b83811115610bf75750506000910152565b60008151808452614c21816020860160208601614bdd565b601f01601f19169290920160200192915050565b602081526000610a036020830184614c09565b600060208284031215614c5a57600080fd5b5035919050565b6001600160a01b0381168114614c7657600080fd5b50565b60008060408385031215614c8c57600080fd5b8235614c9781614c61565b946020939093013593505050565b6001600160581b0381168114614c7657600080fd5b63ffffffff81168114614c7657600080fd5b60008060008060808587031215614ce257600080fd5b843593506020850135614cf481614ca5565b92506040850135614d0481614c61565b91506060850135614d1481614cba565b939692955090935050565b61ffff81168114614c7657600080fd5b64ffffffffff81168114614c7657600080fd5b60008060408385031215614d5557600080fd5b8235614d6081614d1f565b91506020830135614d7081614d2f565b809150509250929050565b600080600060608486031215614d9057600080fd5b8335614d9b81614c61565b92506020840135614dab81614c61565b929592945050506040919091013590565b600080600060608486031215614dd157600080fd5b833592506020840135614de381614c61565b91506040840135614df381614cba565b809150509250925092565b600060208284031215614e1057600080fd5b8135610a0381614c61565b8015158114614c7657600080fd5b600060208284031215614e3b57600080fd5b8135610a0381614e1b565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715614e7f57614e7f614e46565b60405290565b60405160c081016001600160401b0381118282101715614e7f57614e7f614e46565b604051601f8201601f191681016001600160401b0381118282101715614ecf57614ecf614e46565b604052919050565b60006001600160401b03821115614ef057614ef0614e46565b50601f01601f191660200190565b600082601f830112614f0f57600080fd5b8135614f22614f1d82614ed7565b614ea7565b818152846020838601011115614f3757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215614f6c57600080fd5b8535614f7781614c61565b94506020860135614f8781614c61565b93506040860135925060608601356001600160401b0380821115614faa57600080fd5b614fb689838a01614efe565b93506080880135915080821115614fcc57600080fd5b50614fd988828901614efe565b9150509295509295909350565b60008060408385031215614ff957600080fd5b823591506020830135614d7081614c61565b60008060006060848603121561502057600080fd5b833561502b81614c61565b92506020840135915060408401356001600160401b0381111561504d57600080fd5b61505986828701614efe565b9150509250925092565b60008060006060848603121561507857600080fd5b83359250602084013561508a81614c61565b91506040840135614df381614c61565b60008082840360a08112156150ae57600080fd5b833592506080601f19820112156150c457600080fd5b50604051608081018181106001600160401b03821117156150e7576150e7614e46565b60405260208401356150f881614e1b565b8152604084013561510881614e1b565b6020820152606084013561511b81614c61565b6040820152608084013561512e81614cba565b6060820152919491935090915050565b6000806040838503121561515157600080fd5b823561515c81614c61565b91506020830135614d7081614c61565b60008060008060008060a0878903121561518557600080fd5b863561519081614c61565b955060208701356151a081614c61565b9450604087013593506060870135925060808701356001600160401b03808211156151ca57600080fd5b818901915089601f8301126151de57600080fd5b8135818111156151ed57600080fd5b8a60208285010111156151ff57600080fd5b6020830194508093505050509295509295509295565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038416815260208101839052606081016005831061525257615252615215565b826040830152949350505050565b6000806000806080858703121561527657600080fd5b843561528181614c61565b93506020850135925060408501356001600160401b03808211156152a457600080fd5b6152b088838901614efe565b935060608701359150808211156152c657600080fd5b506152d387828801614efe565b91505092959194509250565b600080604083850312156152f257600080fd5b8235915060208301356001600160401b0381111561530f57600080fd5b61531b85828601614efe565b9150509250929050565b60006020828403121561533757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001600160ff1b038184138284138082168684048611161561537a5761537a61533e565b600160ff1b60008712828116878305891216156153995761539961533e565b600087129250878205871284841616156153b5576153b561533e565b878505871281841616156153cb576153cb61533e565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826153fe576153fe6153d9565b600160ff1b8214600019841416156154185761541861533e565b500590565b600181811c9082168061543157607f821691505b60208210811415611a5757634e487b7160e01b600052602260045260246000fd5b600081600019048311821515161561546c5761546c61533e565b500290565b600082615480576154806153d9565b500490565b805160ff81168114610ad757600080fd5b600080600080608085870312156154ac57600080fd5b84519350602085015192506154c360408601615485565b6060959095015193969295505050565b6000806000606084860312156154e857600080fd5b83516154f381614ca5565b925061550160208501615485565b9150604084015190509250925092565b60006001600160401b0382111561552a5761552a614e46565b5060051b60200190565b600082601f83011261554557600080fd5b81516020615555614f1d83615511565b82815260059290921b8401810191818101908684111561557457600080fd5b8286015b848110156155965761558981615485565b8352918301918301615578565b509695505050505050565b6000602082840312156155b357600080fd5b81516001600160401b03808211156155ca57600080fd5b9083019061016082860312156155df57600080fd5b6155e7614e5c565b6155f083615485565b81526155fe60208401615485565b602082015261560f60408401615485565b604082015261562060608401615485565b606082015261563160808401615485565b608082015261564260a08401615485565b60a082015261565360c08401615485565b60c082015261566460e08401615485565b60e0820152610100615677818501615485565b90820152610120838101518381111561568f57600080fd5b61569b88828701615534565b82840152505061014080840151838111156156b557600080fd5b6156c188828701615534565b918301919091525095945050505050565b6000602082840312156156e457600080fd5b81516001600160401b038111156156fa57600080fd5b8201601f8101841361570b57600080fd5b8051615719614f1d82614ed7565b81815285602083850101111561572e57600080fd5b6108d7826020830160208601614bdd565b682bb930b83832b2103360b91b815260008351615763816009850160208801614bdd565b6201020160ed1b600991840191820152835161578681600c840160208801614bdd565b01600c01949350505050565b613bb360f11b8152600083516157af816002850160208801614bdd565b601d60f91b60029184019182015283516157d0816003840160208801614bdd565b01600301949350505050565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b60008282101561587e5761587e61533e565b500390565b8151151581526020808301511515908201526040808301516001600160a01b03169082015260609182015163ffffffff169181019190915260800190565b600060a082840312156158d357600080fd5b60405160a081018181106001600160401b03821117156158f5576158f5614e46565b8060405250809150825161590881614c61565b8152602083015161591881614e1b565b60208201526040838101519082015260608301516005811061593957600080fd5b6060820152608092830151920191909152919050565b600080610140838503121561596357600080fd5b61596d84846158c1565b915061597c8460a085016158c1565b90509250929050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060a082840312156159ce57600080fd5b60405160a081018181106001600160401b03821117156159f0576159f0614e46565b60405282516159fe81614d2f565b815260208301516001600160f81b031981168114615a1b57600080fd5b6020820152615a2c60408401615485565b60408201526060830151615a3f81614d1f565b606082015260808301516dffffffffffffffffffffffffffff1981168114615a6657600080fd5b60808201529392505050565b60006020808385031215615a8557600080fd5b82516001600160401b03811115615a9b57600080fd5b8301601f81018513615aac57600080fd5b8051615aba614f1d82615511565b81815260c09182028301840191848201919088841115615ad957600080fd5b938501935b83851015615b4f5780858a031215615af65760008081fd5b615afe614e85565b85518152868601518782015260408087015190820152606080870151908201526080808701519082015260a08087015160038110615b3c5760008081fd5b9082015283529384019391850191615ade565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600080600060608486031215615b8657600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015615bcf57815187529582019590820190600101615bb3565b509495945050505050565b6001600160a01b03831681526040602080830182905283518383018190526000929160609182860190600581901b87018401888401875b83811015615c9a57605f198a8403018552815160e0815160078110615c3857615c38615215565b85528188015161ffff1688860152898201518a860152888201518986015260808083015115159086015260a08083015115159086015260c091820151918501819052615c8681860183615b9f565b968801969450505090850190600101615c11565b50909a9950505050505050505050565b6001600160a01b03831681526040602080830182905283518383018190526000929160609182860190600581901b87018401888401875b83811015615c9a57898303605f190185528151805161ffff16845286810151151587850152880151888401889052615d1b88850182615b9f565b9587019593505090850190600101615ce1565b60008219821115615d4157615d4161533e565b500190565b6000600019821415615d5a57615d5a61533e565b5060010190565b600082615d7057615d706153d9565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215615dd257600080fd5b8151610a0381614c61565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090615e1890830185614c09565b82810360a08401526147188185614c09565b838152606060208201526000615e436060830185614c09565b8281036040840152615e558185614c09565b9695505050505050565b600060808284031215615e7157600080fd5b604051608081018181106001600160401b0382111715615e9357615e93614e46565b6040528251615ea181614e1b565b81526020830151615eb181614e1b565b60208201526040830151615ec481614c61565b60408201526060830151615ed781614cba565b60608201529392505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614a1c90830184614c09565b600060208284031215615f2f57600080fd5b8151610a0381614e1b565b60008251615f4c818460208701614bdd565b919091019291505056fea26469706673582212203a7f734b482cda160a7e96ede0f03e6e236489c70bae1c711713324ec8fb4dba64736f6c634300080b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
