{
  "_format": "hh-sol-artifact-1",
  "contractName": "KashiPair",
  "sourceName": "contracts/KashiPair.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IBentoBoxV1",
          "name": "bentoBox_",
          "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": false,
          "internalType": "uint256",
          "name": "accruedAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeFraction",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "rate",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "utilization",
          "type": "uint256"
        }
      ],
      "name": "LogAccrue",
      "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": "share",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fraction",
          "type": "uint256"
        }
      ],
      "name": "LogAddAsset",
      "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": "share",
          "type": "uint256"
        }
      ],
      "name": "LogAddCollateral",
      "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": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "part",
          "type": "uint256"
        }
      ],
      "name": "LogBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "name": "LogExchangeRate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newFeeTo",
          "type": "address"
        }
      ],
      "name": "LogFeeTo",
      "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": "share",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fraction",
          "type": "uint256"
        }
      ],
      "name": "LogRemoveAsset",
      "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": "share",
          "type": "uint256"
        }
      ],
      "name": "LogRemoveCollateral",
      "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": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "part",
          "type": "uint256"
        }
      ],
      "name": "LogRepay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "feeTo",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feesEarnedFraction",
          "type": "uint256"
        }
      ],
      "name": "LogWithdrawFees",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accrue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accrueInfo",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "interestPerSecond",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "lastAccrued",
          "type": "uint64"
        },
        {
          "internalType": "uint128",
          "name": "feesEarnedFraction",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "skim",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "addAsset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "fraction",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "skim",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "addCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "asset",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bentoBox",
      "outputs": [
        {
          "internalType": "contract IBentoBoxV1",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "borrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "part",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "collateral",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8[]",
          "name": "actions",
          "type": "uint8[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "datas",
          "type": "bytes[]"
        }
      ],
      "name": "cook",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "value1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value2",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "exchangeRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeTo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "init",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "users",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "maxBorrowParts",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "contract ISwapper",
          "name": "swapper",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "open",
          "type": "bool"
        }
      ],
      "name": "liquidate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "masterContract",
      "outputs": [
        {
          "internalType": "contract KashiPair",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract IOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracleData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "fraction",
          "type": "uint256"
        }
      ],
      "name": "removeAsset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "removeCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "skim",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "part",
          "type": "uint256"
        }
      ],
      "name": "repay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newFeeTo",
          "type": "address"
        }
      ],
      "name": "setFeeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISwapper",
          "name": "swapper",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "enable",
          "type": "bool"
        }
      ],
      "name": "setSwapper",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISwapper",
          "name": "",
          "type": "address"
        }
      ],
      "name": "swappers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalAsset",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "elastic",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "base",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalBorrow",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "elastic",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "base",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalCollateralShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "direct",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "renounce",
          "type": "bool"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateExchangeRate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "updated",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userBorrowPart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userCollateralShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawFees",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101006040523480156200001257600080fd5b50604051620062e9380380620062e98339810160408190526200003591620000fe565b4660a08190526200004681620000a8565b60805250600380546001600160a01b031916339081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606091821b1660c05230901b60e0526200014d565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692188230604051602001620000e1939291906200012e565b604051602081830303815290604052805190602001209050919050565b60006020828403121562000110578081fd5b81516001600160a01b038116811462000127578182fd5b9392505050565b92835260208301919091526001600160a01b0316604082015260600190565b60805160a05160c05160601c60e05160601c6160c06200022960003980610d745280611fff52806122ef52806129b852508061101d52806114f652806116be528061179652806119095280611aae5280611bdd5280611f5652806120ba52806121ea52806122a9528061248352806125cc52806127305280612e46528061339b52806134a35280613565528061374d528061380d5280613a075280613ced5280613e3c5280613f6552806140f252806141a8528061428452806144095280614704528061478b525080613b3e525080613b7352506160c06000f3fe6080604052600436106102c25760003560e01c8063656f3d641161017f5780638da5cb5b116100e1578063d8dfeb451161008a578063f46901ed11610064578063f46901ed1461078b578063f8ba4cff146107ab578063f9557ccb146107c0576102c2565b8063d8dfeb4514610741578063dd62ed3e14610756578063e30c397814610776576102c2565b8063b27c0e74116100bb578063b27c0e74146106e8578063cd446e221461070c578063d505accf14610721576102c2565b80638da5cb5b1461069e57806395d89b41146106b3578063a9059cbb146106c8576102c2565b80637dc0d1d011610143578063860ffea11161011d578063860ffea11461063e578063876467f81461065e5780638cad7fbe1461067e576102c2565b80637dc0d1d0146105e65780637ecebe00146105fb5780638285ef401461061b576102c2565b8063656f3d64146105695780636b2ace871461057c57806370a082311461059157806374645ff3146105b157806376ee101b146105c6576102c2565b8063313ce56711610228578063473e3ce7116101ec5780634b8a3529116101c65780634b8a3529146105135780634ddf47d4146105415780634e71e0c814610554576102c2565b8063473e3ce7146104c9578063476343ee146104de57806348e4163e146104f3576102c2565b8063313ce567146104485780633644e5151461046a57806338d52e0f1461047f5780633ba0b9a9146104945780633f2617cb146104a9576102c2565b806315294c401161028a5780631c9e379b116102645780631c9e379b146103e85780632317ef671461040857806323b872dd14610428576102c2565b806315294c401461038657806318160ddd146103b35780631b51e940146103c8576102c2565b8063017e7e58146102c757806302ce728f146102f257806306fdde0314610315578063078dfbe714610337578063095ea7b314610359575b600080fd5b3480156102d357600080fd5b506102dc6107d5565b6040516102e991906156ab565b60405180910390f35b3480156102fe57600080fd5b506103076107e4565b6040516102e9929190615703565b34801561032157600080fd5b5061032a6108c1565b6040516102e9919061578d565b34801561034357600080fd5b50610357610352366004614f30565b610999565b005b34801561036557600080fd5b50610379610374366004614fa9565b610a89565b6040516102e991906156f8565b34801561039257600080fd5b506103a66103a1366004614f7a565b610af4565b6040516102e99190615713565b3480156103bf57600080fd5b506103a6610b11565b3480156103d457600080fd5b506103a66103e3366004614f7a565b610b27565b3480156103f457600080fd5b506103a6610403366004614d19565b610b3c565b34801561041457600080fd5b506103a6610423366004614fa9565b610b4e565b34801561043457600080fd5b50610379610443366004614e80565b610b69565b34801561045457600080fd5b5061045d610cd1565b6040516102e99190615f2e565b34801561047657600080fd5b506103a6610cee565b34801561048b57600080fd5b506102dc610cf8565b3480156104a057600080fd5b506103a6610d07565b3480156104b557600080fd5b506103576104c43660046153ba565b610d0d565b3480156104d557600080fd5b506103a6610d62565b3480156104ea57600080fd5b50610357610d68565b3480156104ff57600080fd5b506103a661050e366004614d19565b610ed8565b34801561051f57600080fd5b5061053361052e366004614fa9565b610eea565b6040516102e9929190615ede565b61035761054f36600461518b565b610f38565b34801561056057600080fd5b506103576110e0565b610533610577366004615079565b61116e565b34801561058857600080fd5b506102dc611aac565b34801561059d57600080fd5b506103a66105ac366004614d19565b611ad0565b3480156105bd57600080fd5b5061032a611ae2565b3480156105d257600080fd5b506103576105e1366004614fd4565b611b70565b3480156105f257600080fd5b506102dc61267a565b34801561060757600080fd5b506103a6610616366004614d19565b612689565b34801561062757600080fd5b5061063061269b565b6040516102e9929190615ec4565b34801561064a57600080fd5b50610357610659366004614f7a565b6126b5565b34801561066a57600080fd5b50610357610679366004614fa9565b612796565b34801561068a57600080fd5b50610379610699366004614d19565b6127d6565b3480156106aa57600080fd5b506102dc6127eb565b3480156106bf57600080fd5b5061032a6127fa565b3480156106d457600080fd5b506103796106e3366004614fa9565b6128be565b3480156106f457600080fd5b506106fd612989565b6040516102e993929190615f02565b34801561071857600080fd5b506102dc6129b6565b34801561072d57600080fd5b5061035761073c366004614ec0565b6129da565b34801561074d57600080fd5b506102dc612b7b565b34801561076257600080fd5b506103a6610771366004614e48565b612b8a565b34801561078257600080fd5b506102dc612ba7565b34801561079757600080fd5b506103576107a6366004614d19565b612bb6565b3480156107b757600080fd5b50610357612c2a565b3480156107cc57600080fd5b506106306131f6565b6005546001600160a01b031681565b60095460405163d6d7d52560e01b815260009182916001600160a01b039091169063d6d7d5259061081a90600a906004016157a0565b6040805180830381600087803b15801561083357600080fd5b505af1158015610847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086b919061512a565b909250905081156108b85760108190556040517f9f9192b5edb17356c524e08d9e025c8e2f6307e6ea52fb7968faa3081f51c3c8906108ab908390615713565b60405180910390a16108bd565b506010545b9091565b6007546060906108d9906001600160a01b0316613210565b6008546108ee906001600160a01b0316613210565b60095460405163355a219b60e21b81526001600160a01b039091169063d568866c9061091f90600a906004016157a0565b60006040518083038186803b15801561093757600080fd5b505afa15801561094b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109739190810190615449565b604051602001610985939291906155c1565b604051602081830303815290604052905090565b6003546001600160a01b031633146109cc5760405162461bcd60e51b81526004016109c390615c6b565b60405180910390fd5b8115610a68576001600160a01b0383161515806109e65750805b610a025760405162461bcd60e51b81526004016109c390615a8b565b6003546040516001600160a01b038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0385166001600160a01b031991821617909155600480549091169055610a84565b600480546001600160a01b0319166001600160a01b0385161790555b505050565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ae2908690615713565b60405180910390a35060015b92915050565b6000610afe612c2a565b610b098484846132d5565b949350505050565b600c54600160801b90046001600160801b031690565b6000610b31612c2a565b610b0984848461350e565b600e6020526000908152604090205481565b6000610b58612c2a565b610b6283836137b9565b9392505050565b60008115610c8e576001600160a01b03841660009081526020819052604090205482811015610baa5760405162461bcd60e51b81526004016109c390615d7a565b836001600160a01b0316856001600160a01b031614610c8c576001600160a01b03851660009081526001602090815260408083203384529091529020546000198114610c395783811015610c105760405162461bcd60e51b81526004016109c390615b9e565b6001600160a01b0386166000908152600160209081526040808320338452909152902084820390555b6001600160a01b038516610c5f5760405162461bcd60e51b81526004016109c390615a1d565b506001600160a01b0380861660009081526020819052604080822086850390559186168152208054840190555b505b826001600160a01b0316846001600160a01b031660008051602061606b83398151915284604051610cbf9190615713565b60405180910390a35060019392505050565b600854600090610ce9906001600160a01b0316613a80565b905090565b6000610ce9613b39565b6008546001600160a01b031681565b60105481565b6003546001600160a01b03163314610d375760405162461bcd60e51b81526004016109c390615c6b565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600b5481565b610d70612c2a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015610dcb57600080fd5b505afa158015610ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e039190614d35565b6011546001600160a01b038216600090815260208190526040902054919250600160801b90046001600160801b031690610e3d9082613b99565b6001600160a01b03831660008181526020819052604080822093909355915190919060008051602061606b83398151915290610e7a908590615713565b60405180910390a3601180546001600160801b031690556040516001600160a01b038316907fbe641c3ffc44b2d6c184f023fa4ed7bda4b6ffa71e03b3c98ae0c776da1f17e790610ecc908490615713565b60405180910390a25050565b600f6020526000908152604090205481565b600080610ef5612c2a565b610eff8484613bbc565b8092508193505050610f15336000601054613eb6565b610f315760405162461bcd60e51b81526004016109c390615c34565b9250929050565b6007546001600160a01b031615610f615760405162461bcd60e51b81526004016109c3906159e6565b610f6d81830183615310565b805160079060009060089082906009908290610f9090600a9060208a0190614b4c565b5081546001600160a01b0398891661010092830a908102908a021990911617909155825497871691810a918202918702199097161790558154958416940a938402938302199094169290921790925550600754166110005760405162461bcd60e51b81526004016109c390615b67565b600854604051633de222bb60e21b81526001916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f7888aec9261105792169061dead9060040161582a565b60206040518083038186803b15801561106f57600080fd5b505afa158015611083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a791906154bd565b10156110c55760405162461bcd60e51b81526004016109c390615ca0565b50506011805467ffffffffffffffff19166312e687c0179055565b6004546001600160a01b031633811461110b5760405162461bcd60e51b81526004016109c390615cd7565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b039092166001600160a01b0319928316179055600480549091169055565b600080611179614bc6565b60005b88811015611a6e5760008a8a8381811061119257fe5b90506020020160208101906111a791906154f8565b905082602001511580156111be5750600a8160ff16105b156111d3576111cb612c2a565b600160208401525b60ff8116600a141561122d5760008060008989868181106111f057fe5b90506020028101906112029190615f3c565b81019061120f9190615423565b9250925092506112258282610659868c8c614031565b505050611a65565b60ff81166001141561128e57600080600089898681811061124a57fe5b905060200281019061125c9190615f3c565b8101906112699190615423565b925092509250611284828261127f868c8c614031565b61350e565b9750505050611a65565b60ff8116600214156112ee5760008060008989868181106112ab57fe5b90506020028101906112bd9190615f3c565b8101906112ca9190615423565b9250925092506112e582826112e0868c8c614031565b6132d5565b50505050611a65565b60ff8116600314156113495760008088888581811061130957fe5b905060200281019061131b9190615f3c565b81019061132891906153ff565b915091506113408161133b848a8a614031565b6137b9565b96505050611a65565b60ff8116600414156113a65760008088888581811061136457fe5b90506020028101906113769190615f3c565b81019061138391906153ff565b9150915061139b81611396848a8a614031565b614059565b505060018352611a65565b60ff811660051415611409576000808888858181106113c157fe5b90506020028101906113d39190615f3c565b8101906113e091906153ff565b915091506113f8816113f3848a8a614031565b613bbc565b600187529097509550611a65915050565b60ff8116600b14156114a857600080600089898681811061142657fe5b90506020028101906114389190615f3c565b8101906114459190615157565b9250925092506000806114566107e4565b915091508415806114645750815b801561146f57508381115b8015611482575082158061148257508281115b61149e5760405162461bcd60e51b81526004016109c390615e56565b5050505050611a65565b60ff811660181415611587576000806000806000808c8c898181106114c957fe5b90506020028101906114db9190615f3c565b8101906114e89190614d51565b9550955095509550955095507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c0a47c938787878787876040518763ffffffff1660e01b815260040161154a969594939291906156bf565b600060405180830381600087803b15801561156457600080fd5b505af1158015611578573d6000803e3d6000fd5b50505050505050505050611a65565b60ff81166014141561160f576116058787848181106115a257fe5b90506020028101906115b49190615f3c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c91508690508181106115f757fe5b905060200201358787614167565b9095509350611a65565b60ff81166015141561167a5761160587878481811061162a57fe5b905060200281019061163c9190615f3c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915061425d9050565b60ff81166016141561175257600080600089898681811061169757fe5b90506020028101906116a99190615f3c565b8101906116b69190614e80565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc8433856116f9868e8e614031565b6040518563ffffffff1660e01b81526004016117189493929190615844565b600060405180830381600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b50505050505050611a65565b60ff8116601714156117e657600060608089898681811061176f57fe5b90506020028101906117819190615f3c565b81019061178e919061523e565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fca8843843385856040518563ffffffff1660e01b815260040161171894939291906158a2565b60ff8116601e14156118c057606060006118688b8b8681811061180557fe5b905060200201358a8a8781811061181857fe5b905060200281019061182a9190615f3c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b915061434b9050565b915091508060ff1660011415611893578180602001905181019061188c91906154bd565b96506118b9565b8060ff16600214156118b957818060200190518101906118b391906154d5565b90975095505b5050611a65565b60ff8116600614156119e85760008787848181106118da57fe5b90506020028101906118ec9190615f3c565b8101906118f991906153e7565b6008549091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163da5139ca9116611970611940858b8b614031565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906001614501565b60016040518463ffffffff1660e01b815260040161199093929190615968565b60206040518083038186803b1580156119a857600080fd5b505afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e091906154bd565b955050611a65565b60ff811660071415611a65576000878784818110611a0257fe5b9050602002810190611a149190615f3c565b810190611a2191906153e7565b9050611a61611a31828888614031565b60408051808201909152600d546001600160801b038082168352600160801b90910416602082015290600061459a565b9550505b5060010161117c565b50805115611aa057611a84336000601054613eb6565b611aa05760405162461bcd60e51b81526004016109c390615c34565b50965096945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006020819052908152604090205481565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611b685780601f10611b3d57610100808354040283529160200191611b68565b820191906000526020600020905b815481529060010190602001808311611b4b57829003601f168201915b505050505081565b6000611b7a6107e4565b915050611b85612c2a565b6000806000611b92614bc6565b5060408051808201909152600d546001600160801b038082168352600160801b909104166020820152611bc3614bc6565b600754604051634ffe34db60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692634ffe34db92611c169291909116906004016156ab565b604080518083038186803b158015611c2d57600080fd5b505afa158015611c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c65919061547b565b905060005b8c811015611e8c5760008e8e83818110611c8057fe5b9050602002016020810190611c959190614d19565b9050611ca2818a8a613eb6565b611e83576001600160a01b0381166000908152600f6020526040812054808f8f86818110611ccc57fe5b9050602002013511611cf0578e8e85818110611ce457fe5b90506020020135611cf2565b805b9150611cfe8183614613565b6001600160a01b0384166000908152600f60205260408120919091559050611d27868383614501565b90506000611d6269152d02c7e14af6800000611d508d611d4a866201b580614636565b90614636565b81611d5757fe5b88919004600061459a565b6001600160a01b0385166000908152600e6020526040902054909150611d889082614613565b6001600160a01b038086166000908152600e60205260409020919091558d1615611db2578c611db4565b8d5b6001600160a01b0316846001600160a01b03167f8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c40283604051611df69190615713565b60405180910390a36001600160a01b03808516908e1615611e17578d611e19565b335b6001600160a01b03167fc8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e8486604051611e53929190615ede565b60405180910390a3611e658a82613b99565b9950611e718983613b99565b9850611e7d8884613b99565b97505050505b50600101611c6a565b5083611eaa5760405162461bcd60e51b81526004016109c390615a54565b611ec7611eb68561466d565b83516001600160801b03169061469a565b6001600160801b03168252611ef2611ede8461466d565b60208401516001600160801b03169061469a565b6001600160801b03908116602084018190528351600d80546001600160801b03191691841691909117909216600160801b909102179055600b54611f369086614613565b600b55600854604051636d289ce560e11b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92611f919216908990600190600401615968565b60206040518083038186803b158015611fa957600080fd5b505afa158015611fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe191906154bd565b90508761247657604051634656bfdf60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638cad7fbe90612034908c906004016156ab565b60206040518083038186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612084919061510e565b6120a05760405162461bcd60e51b81526004016109c390615de8565b600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc926120f992919091169030908e908c90600401615844565b600060405180830381600087803b15801561211357600080fd5b505af1158015612127573d6000803e3d6000fd5b50506007546008546040516371a1ff0960e11b81526001600160a01b03808f16955063e343fe129450612167938116921690309087908d9060040161586e565b6040805180830381600087803b15801561218057600080fd5b505af1158015612194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b891906154d5565b5050600c54600854604051633de222bb60e21b815260009261227b926001600160801b03909116916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f7888aec92612225929190911690309060040161582a565b60206040518083038186803b15801561223d57600080fd5b505afa158015612251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227591906154bd565b90614613565b905060006122898284614613565b90506000620186a061229d83612710614636565b816122a457fe5b0490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc600860009054906101000a90046001600160a01b0316307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561234657600080fd5b505afa15801561235a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237e9190614d35565b856040518563ffffffff1660e01b815260040161239e9493929190615844565b600060405180830381600087803b1580156123b857600080fd5b505af11580156123cc573d6000803e3d6000fd5b505050506124006123ee6123e9838661461390919063ffffffff16565b61466d565b600c546001600160801b0316906146c9565b600c80546001600160801b0319166001600160801b0392909216919091179055306001600160a01b038d167f30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e386124568585614613565b6000604051612466929190615ede565b60405180910390a350505061266a565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163f18d03cc919081169030908d16156124be578c6124c0565b8d5b8a6040518563ffffffff1660e01b81526004016124e09493929190615844565b600060405180830381600087803b1580156124fa57600080fd5b505af115801561250e573d6000803e3d6000fd5b505050506001600160a01b038916156125b2576007546008546040516371a1ff0960e11b81526001600160a01b03808d169363e343fe129361255e93918316921690339087908d9060040161586e565b6040805180830381600087803b15801561257757600080fd5b505af115801561258b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125af91906154d5565b50505b600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc9261260b929190911690339030908790600401615844565b600060405180830381600087803b15801561262557600080fd5b505af1158015612639573d6000803e3d6000fd5b505050506126496123ee8261466d565b600c80546001600160801b0319166001600160801b03929092169190911790555b5050505050505050505050505050565b6009546001600160a01b031681565b60026020526000908152604090205481565b600d546001600160801b0380821691600160801b90041682565b6001600160a01b0383166000908152600e60205260409020546126d89082613b99565b6001600160a01b0384166000908152600e6020526040902055600b546126fe8183613b99565b600b55600754612719906001600160a01b03168383866146f8565b836001600160a01b03168361272e5733612750565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f9ed03113de523cebfe5e49d5f8e12894b1c0d42ce805990461726444c90eab87846040516127889190615713565b60405180910390a350505050565b61279e612c2a565b6127a88282614059565b6127b6336000601054613eb6565b6127d25760405162461bcd60e51b81526004016109c390615c34565b5050565b60066020526000908152604090205460ff1681565b6003546001600160a01b031681565b600754606090612812906001600160a01b03166147ff565b600854612827906001600160a01b03166147ff565b60095460405163634ce26b60e11b81526001600160a01b039091169063c699c4d69061285890600a906004016157a0565b60006040518083038186803b15801561287057600080fd5b505afa158015612884573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128ac9190810190615449565b6040516020016109859392919061563e565b600081156129585733600090815260208190526040902054828110156128f65760405162461bcd60e51b81526004016109c390615d7a565b336001600160a01b03851614612956576001600160a01b03841661292c5760405162461bcd60e51b81526004016109c390615a1d565b3360009081526020819052604080822085840390556001600160a01b038616825290208054840190555b505b826001600160a01b0316336001600160a01b031660008051602061606b83398151915284604051610ae29190615713565b6011546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b038716612a005760405162461bcd60e51b81526004016109c390615d0c565b834210612a1f5760405162461bcd60e51b81526004016109c390615c0c565b6001600160a01b0387166000818152600260209081526040918290208054600181810190925592519092612a9d92612a82927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928e928e928e92918e910161571c565b60405160208183030381529060405280519060200120614846565b85858560405160008152602001604052604051612abd949392919061576f565b6020604051602081039080840390855afa158015612adf573d6000803e3d6000fd5b505050602060405103516001600160a01b031614612b0f5760405162461bcd60e51b81526004016109c390615e8d565b6001600160a01b038088166000818152600160209081526040808320948b168084529490915290819020889055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612b6a908990615713565b60405180910390a350505050505050565b6007546001600160a01b031681565b600160209081526000928352604080842090915290825290205481565b6004546001600160a01b031681565b6003546001600160a01b03163314612be05760405162461bcd60e51b81526004016109c390615c6b565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fcf1d3f17e521c635e0d20b8acba94ba170afc041d0546d46dafa09d3c9c19eb390600090a250565b612c32614bdd565b50604080516060810182526011546001600160401b038082168352600160401b82041660208301819052600160801b9091046001600160801b03169282019290925290420380612c835750506131f4565b6001600160401b0342166020830152612c9a614bc6565b5060408051808201909152600d546001600160801b038082168352600160801b9091041660208201819052612d915782516001600160401b03166312e687c014612d24576312e687c08084526040517f33af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026b91612d1b916000918291829061598b565b60405180910390a15b5050805160118054602084015160409094015167ffffffffffffffff199091166001600160401b03938416176fffffffffffffffff00000000000000001916600160401b9390941692909202929092176001600160801b03908116600160801b91909216021790556131f4565b600080612d9c614bc6565b5060408051808201909152600c546001600160801b038082168352600160801b9091048116602083015286518551670de0b6b3a764000092612dee928992611d4a9216906001600160401b0316614636565b81612df557fe5b049250612e15612e048461466d565b85516001600160801b0316906146c9565b6001600160801b03168085526008548251604051630acc462360e31b8152600093612ed69390926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693635662311893612e809392169190889060040161593c565b60206040518083038186803b158015612e9857600080fd5b505afa158015612eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed091906154bd565b90613b99565b90506000620186a0612eea86612710614636565b81612ef157fe5b04905081612f1584602001516001600160801b03168361463690919063ffffffff16565b81612f1c57fe5b049350612f3f612f2b8561466d565b60408a01516001600160801b0316906146c9565b6001600160801b03166040890152612f6d612f598561466d565b60208501516001600160801b0316906146c9565b600c80546001600160801b03908116600160801b9382168402179091558751600d805460208b01516001600160801b031990911692841692831784169316909302919091179091556000908390612fcc90670de0b6b3a7640000614636565b81612fd357fe5b0490506709b6e64a8ec600008110156130955760006709b6e64a8ec60000613007670de0b6b3a7640000611d4a8386614613565b8161300e57fe5b049050600061303c6130248b611d4a8580614636565b7054a2b63d65d79d094abb6688000000000090613b99565b8b519091508190613067906001600160401b03167054a2b63d65d79d094abb66880000000000614636565b8161306e57fe5b046001600160401b0316808c526304b9a1f0111561308e576304b9a1f08b525b5050613146565b670b1a2bc2ec5000008111156131465760006702c68af0bb1400006130ce670de0b6b3a7640000611d4a85670b1a2bc2ec500000614613565b816130d557fe5b04905060006130eb6130248b611d4a8580614636565b8b519091506000907054a2b63d65d79d094abb6688000000000090613119906001600160401b031684614636565b8161312057fe5b0490506449d482460081111561313857506449d48246005b6001600160401b03168b5250505b88516040517f33af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026b9161317c9189918991869061598b565b60405180910390a1505086516011805460208a01516040909a015167ffffffffffffffff199091166001600160401b03938416176fffffffffffffffff00000000000000001916600160401b93909a1692909202989098176001600160801b03908116600160801b9190921602179096555050505050505b565b600c546001600160801b0380821691600160801b90041682565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b179052905160609160009183916001600160a01b03861691613257919061555c565b600060405180830381855afa9150503d8060008114613292576040519150601f19603f3d011682016040523d82523d6000602084013e613297565b606091505b5091509150816132c257604051806040016040528060038152602001623f3f3f60e81b8152506132cb565b6132cb8161489b565b925050505b919050565b60408051808201909152600d546001600160801b038082168352600160801b90910416602082015260009061330c90836001614a00565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b0386166000908152600f90925260409091205490915061336a9083614613565b6001600160a01b038086166000908152600f6020526040808220939093556008549251636d289ce560e11b815290927f000000000000000000000000000000000000000000000000000000000000000083169263da5139ca926133d892909116908690600190600401615968565b60206040518083038186803b1580156133f057600080fd5b505afa158015613404573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342891906154bd565b600c546008549192506001600160801b031690613450906001600160a01b03168383886146f8565b61346c61345c8361466d565b6001600160801b038316906146c9565b600c80546001600160801b0319166001600160801b03929092169190911790556001600160a01b038616856134a157336134c3565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167fc8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e85876040516134fd929190615ede565b60405180910390a350509392505050565b6000613518614bc6565b50604080518082018252600c546001600160801b03808216808452600160801b90920481166020840152600854600d549451636d289ce560e11b8152939492936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca946135a194921692169060019060040161593c565b60206040518083038186803b1580156135b957600080fd5b505afa1580156135cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f191906154bd565b83516001600160801b03160190508015613633578061362684602001516001600160801b03168761463690919063ffffffff16565b8161362d57fe5b04613635565b845b93506103e861365a6136468661466d565b60208601516001600160801b0316906146c9565b6001600160801b031610156136755760009350505050610b62565b613680838686614a75565b8051600c80546020938401516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b03881660009081529081905260409020546136d99085613b99565b6001600160a01b03881660008181526020819052604080822093909355915190919060008051602061606b83398151915290613716908890615713565b60405180910390a3600854613736906001600160a01b03168684896146f8565b866001600160a01b03168661374b573361376d565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e3887876040516137a7929190615ede565b60405180910390a35050509392505050565b60006137c3614bc6565b50604080518082018252600c546001600160801b038082168352600160801b90910481166020830152600854600d549351636d289ce560e11b815292936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca9461384a9492169291169060019060040161593c565b60206040518083038186803b15801561386257600080fd5b505afa158015613876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389a91906154bd565b825160208401516001600160801b03918216929092019250166138bd8583614636565b816138c457fe5b3360009081526020819052604090205491900493506138e39085614613565b3360008181526020819052604080822093909355915160008051602061606b83398151915290613914908890615713565b60405180910390a3613928611eb68461466d565b6001600160801b0316825261393f611ede8561466d565b6001600160801b0316602083018190526103e811156139705760405162461bcd60e51b81526004016109c390615d43565b8151600c805460208501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556040516001600160a01b0386169033907f6e853a5fd6b51d773691f542ebac8513c9992a51380d4c342031056a64114228906139e59087908990615ede565b60405180910390a3600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613a4692919091169030908a908990600401615844565b600060405180830381600087803b158015613a6057600080fd5b505af1158015613a74573d6000803e3d6000fd5b50505050505092915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b03861691613ac7919061555c565b600060405180830381855afa9150503d8060008114613b02576040519150601f19603f3d011682016040523d82523d6000602084013e613b07565b606091505b5091509150818015613b1a575080516020145b613b255760126132cb565b808060200190518101906132cb9190615514565b6000467f00000000000000000000000000000000000000000000000000000000000000008114613b7157613b6c81614ab6565b613b93565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b81810181811015610aee5760405162461bcd60e51b81526004016109c390615b30565b600080613bc76107e4565b5060009050620186a0613bdb856032614636565b81613be257fe5b049050613c22613bf28583613b99565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906001614aed565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b03199092169190911716919091179055336000908152600f909252604090912054909350613c779084613b99565b336000818152600f6020526040908190209290925590516001600160a01b03871691907f3a5151e57d3bc9798e7853034ac52293d1a0e12a2b44725e75b03b21f86477a690613ccb90889086908990615eec565b60405180910390a3600854604051636d289ce560e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92613d2b9291909116908890600090600401615968565b60206040518083038186803b158015613d4357600080fd5b505afa158015613d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7b91906154bd565b9150613d85614bc6565b5060408051808201909152600c546001600160801b038082168352600160801b90910416602082018190526103e81115613dd15760405162461bcd60e51b81526004016109c390615d43565b613dee613ddd8461466d565b82516001600160801b03169061469a565b6001600160801b03908116808352600c805460208501518416600160801b026001600160801b0319909116909217909216179055600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613e7b92919091169030908b908990600401615844565b600060405180830381600087803b158015613e9557600080fd5b505af1158015613ea9573d6000803e3d6000fd5b5050505050509250929050565b6001600160a01b0383166000908152600f602052604081205480613ede576001915050610b62565b6001600160a01b0385166000908152600e602052604090205480613f0757600092505050610b62565b613f0f614bc6565b5060408051808201909152600d546001600160801b03808216808452600160801b909204166020830181905290613f4d908790611d4a908790614636565b81613f5457fe5b600754919004906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163566231189116613fb48a613f9f57620124f8613fa4565b62012cc85b611d4a886509184e72a000614636565b60006040518463ffffffff1660e01b8152600401613fd493929190615968565b60206040518083038186803b158015613fec57600080fd5b505afa158015614000573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402491906154bd565b1015979650505050505050565b60008084121561405157600019841461404a578161404c565b825b610b09565b509192915050565b336000908152600e60205260409020546140739082614613565b336000908152600e6020526040902055600b546140909082614613565b600b556040516001600160a01b0383169033907f8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c402906140d0908590615713565b60405180910390a3600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92614131929190911690309087908790600401615844565b600060405180830381600087803b15801561414b57600080fd5b505af115801561415f573d6000803e3d6000fd5b505050505050565b6000806000806000808980602001905181019061418491906151f7565b9350935093509350614197828989614031565b91506141a4818989614031565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302b9446c8a86338787876040518763ffffffff1660e01b81526004016141fb95949392919061586e565b60408051808303818588803b15801561421357600080fd5b505af1158015614227573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061424c91906154d5565b955095505050505094509492505050565b6000806000806000808880602001905181019061427a91906151f7565b93509350935093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d308533866142bf878e8e614031565b6142ca878f8f614031565b6040518663ffffffff1660e01b81526004016142ea95949392919061586e565b6040805180830381600087803b15801561430357600080fd5b505af1158015614317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061433b91906154d5565b9550955050505050935093915050565b6060600080606060008060008980602001905181019061436b9190614dbe565b94509450945094509450828015614380575081155b156143ae578389604051602001614398929190615578565b6040516020818303038152906040529350614407565b821580156143b95750815b156143d1578388604051602001614398929190615578565b8280156143db5750815b15614407578389896040516020016143f59392919061559a565b60405160208183030381529060405293505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415801561445257506001600160a01b0385163014155b61446e5760405162461bcd60e51b81526004016109c390615bd5565b60006060866001600160a01b03168d8760405161448b919061555c565b60006040518083038185875af1925050503d80600081146144c8576040519150601f19603f3d011682016040523d82523d6000602084013e6144cd565b606091505b5091509150816144ef5760405162461bcd60e51b81526004016109c390615ac2565b9c919b50909950505050505050505050565b600083602001516001600160801b031660001415614520575081610b62565b602084015184516001600160801b039182169161453f91869116614636565b8161454657fe5b04905081801561458a57508284600001516001600160801b031661458086602001516001600160801b03168461463690919063ffffffff16565b8161458757fe5b04105b15610b6257610b09816001613b99565b82516000906001600160801b03166145b3575081610b62565b835160208501516001600160801b03918216916145d291869116614636565b816145d957fe5b04905081801561458a57508284602001516001600160801b031661458086600001516001600160801b03168461463690919063ffffffff16565b80820382811115610aee5760405162461bcd60e51b81526004016109c3906159af565b60008115806146515750508082028282828161464e57fe5b04145b610aee5760405162461bcd60e51b81526004016109c390615e1f565b60006001600160801b038211156146965760405162461bcd60e51b81526004016109c390615af9565b5090565b8082036001600160801b038084169082161115610aee5760405162461bcd60e51b81526004016109c3906159af565b8181016001600160801b038083169082161015610aee5760405162461bcd60e51b81526004016109c390615b30565b801561477457614750827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f7888aec87306040518363ffffffff1660e01b815260040161222592919061582a565b83111561476f5760405162461bcd60e51b81526004016109c390615db1565b6147f9565b604051633c6340f360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc906147c6908790339030908990600401615844565b600060405180830381600087803b1580156147e057600080fd5b505af11580156147f4573d6000803e3d6000fd5b505050505b50505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b03861691613257919061555c565b600060405180604001604052806002815260200161190160f01b81525061486b613b39565b8360405160200161487e9392919061559a565b604051602081830303815290604052805190602001209050919050565b606060408251106148c157818060200190518101906148ba9190615449565b90506132d0565b8151602014156149e05760005b60208160ff161080156148fd5750828160ff16815181106148eb57fe5b01602001516001600160f81b03191615155b1561490a576001016148ce565b60608160ff166001600160401b038111801561492557600080fd5b506040519080825280601f01601f191660200182016040528015614950576020820181803683370190505b509050600091505b60208260ff161080156149875750838260ff168151811061497557fe5b01602001516001600160f81b03191615155b156149d757838260ff168151811061499b57fe5b602001015160f81c60f81b818360ff16815181106149b557fe5b60200101906001600160f81b031916908160001a905350600190910190614958565b91506132d09050565b506040805180820190915260038152623f3f3f60e81b60208201526132d0565b614a08614bc6565b6000614a15858585614501565b9050614a34614a238261466d565b86516001600160801b03169061469a565b6001600160801b03168552614a5f614a4b8561466d565b60208701516001600160801b03169061469a565b6001600160801b03166020860152939492505050565b614a7d614bc6565b614a89612e048461466d565b6001600160801b03168452614aa06136468361466d565b6001600160801b03166020850152509192915050565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218823060405160200161487e93929190615750565b614af5614bc6565b6000614b0285858561459a565b9050614b21614b108561466d565b86516001600160801b0316906146c9565b6001600160801b03168552614a5f614b388261466d565b60208701516001600160801b0316906146c9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614b8d57805160ff1916838001178555614bba565b82800160010185558215614bba579182015b82811115614bba578251825591602001919060010190614b9f565b50614696929150614bfd565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b5b808211156146965760008155600101614bfe565b8035610aee81616020565b60008083601f840112614c2e578182fd5b5081356001600160401b03811115614c44578182fd5b6020830191508360208083028501011115610f3157600080fd5b600082601f830112614c6e578081fd5b8135614c81614c7c82615fa6565b615f80565b818152915060208083019084810181840286018201871015614ca257600080fd5b60005b84811015614cc157813584529282019290820190600101614ca5565b505050505092915050565b600082601f830112614cdc578081fd5b8151614cea614c7c82615fc5565b9150808252836020828501011115614d0157600080fd5b614d12816020840160208601615ff4565b5092915050565b600060208284031215614d2a578081fd5b8135610b6281616020565b600060208284031215614d46578081fd5b8151610b6281616020565b60008060008060008060c08789031215614d69578182fd5b8635614d7481616020565b95506020870135614d8481616020565b94506040870135614d9481616038565b93506060870135614da48161605b565b9598949750929560808101359460a0909101359350915050565b600080600080600060a08688031215614dd5578283fd5b8551614de081616020565b60208701519095506001600160401b03811115614dfb578384fd5b614e0788828901614ccc565b9450506040860151614e1881616038565b6060870151909350614e2981616038565b6080870151909250614e3a8161605b565b809150509295509295909350565b60008060408385031215614e5a578182fd5b8235614e6581616020565b91506020830135614e7581616020565b809150509250929050565b600080600060608486031215614e94578081fd5b8335614e9f81616020565b92506020840135614eaf81616020565b929592945050506040919091013590565b600080600080600080600060e0888a031215614eda578485fd5b8735614ee581616020565b96506020880135614ef581616020565b955060408801359450606088013593506080880135614f138161605b565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215614f44578081fd5b8335614f4f81616020565b92506020840135614f5f81616038565b91506040840135614f6f81616038565b809150509250925092565b600080600060608486031215614f8e578081fd5b8335614f9981616020565b92506020840135614eaf81616038565b60008060408385031215614fbb578182fd5b8235614fc681616020565b946020939093013593505050565b600080600080600080600060a0888a031215614fee578081fd5b87356001600160401b0380821115615004578283fd5b6150108b838c01614c1d565b909950975060208a0135915080821115615028578283fd5b506150358a828b01614c1d565b909650945050604088013561504981616020565b9250606088013561505981616020565b9150608088013561506981616038565b8091505092959891949750929550565b60008060008060008060608789031215615091578384fd5b86356001600160401b03808211156150a7578586fd5b6150b38a838b01614c1d565b909850965060208901359150808211156150cb578586fd5b6150d78a838b01614c1d565b909650945060408901359150808211156150ef578384fd5b506150fc89828a01614c1d565b979a9699509497509295939492505050565b60006020828403121561511f578081fd5b8151610b6281616038565b6000806040838503121561513c578182fd5b825161514781616038565b6020939093015192949293505050565b60008060006060848603121561516b578081fd5b833561517681616038565b95602085013595506040909401359392505050565b6000806020838503121561519d578182fd5b82356001600160401b03808211156151b3578384fd5b818501915085601f8301126151c6578384fd5b8135818111156151d4578485fd5b8660208285010111156151e5578485fd5b60209290920196919550909350505050565b6000806000806080858703121561520c578182fd5b845161521781616020565b602086015190945061522881616020565b6040860151606090960151949790965092505050565b600080600060608486031215615252578081fd5b833561525d81616020565b92506020848101356001600160401b0380821115615279578384fd5b818701915087601f83011261528c578384fd5b813561529a614c7c82615fa6565b81815284810190848601868402860187018c10156152b6578788fd5b8795505b838610156152e0576152cc8c82614c12565b8352600195909501949186019186016152ba565b509650505060408701359250808311156152f8578384fd5b505061530686828701614c5e565b9150509250925092565b60008060008060808587031215615325578182fd5b843561533081616020565b9350602085013561534081616020565b9250604085013561535081616020565b915060608501356001600160401b0381111561536a578182fd5b8501601f8101871361537a578182fd5b8035615388614c7c82615fc5565b81815288602083850101111561539c578384fd5b81602084016020830137908101602001929092525092959194509250565b600080604083850312156153cc578182fd5b82356153d781616020565b91506020830135614e7581616038565b6000602082840312156153f8578081fd5b5035919050565b60008060408385031215615411578182fd5b823591506020830135614e7581616020565b600080600060608486031215615437578081fd5b833592506020840135614f5f81616020565b60006020828403121561545a578081fd5b81516001600160401b0381111561546f578182fd5b610b0984828501614ccc565b60006040828403121561548c578081fd5b6154966040615f80565b82516154a181616046565b815260208301516154b181616046565b60208201529392505050565b6000602082840312156154ce578081fd5b5051919050565b600080604083850312156154e7578182fd5b505080516020909101519092909150565b600060208284031215615509578081fd5b8135610b628161605b565b600060208284031215615525578081fd5b8151610b628161605b565b60008151808452615548816020860160208601615ff4565b601f01601f19169290920160200192915050565b6000825161556e818460208701615ff4565b9190910192915050565b6000835161558a818460208801615ff4565b9190910191825250602001919050565b600084516155ac818460208901615ff4565b91909101928352506020820152604001919050565b600071025b0b9b4349026b2b234bab6902934b9b5960751b825284516155ee816012850160208901615ff4565b602f60f81b601291840191820152845161560f816013840160208901615ff4565b602d60f81b601392909101918201528351615631816014840160208801615ff4565b0160140195945050505050565b6000616b6d60f01b8252845161565b816002850160208901615ff4565b602f60f81b600291840191820152845161567c816003840160208901615ff4565b602d60f81b60039290910191820152835161569e816004840160208801615ff4565b0160040195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152949095166020850152911515604084015260ff166060830152608082015260a081019190915260c00190565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b92835260208301919091526001600160a01b0316604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610b626020830184615530565b600060208083018184528285546001808216600081146157c757600181146157e55761581d565b60028304607f16855260ff198316604089015260608801935061581d565b600283048086526157f58a615fe8565b885b828110156158135781548b8201604001529084019088016157f7565b8a01604001955050505b5091979650505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6000608082016001600160a01b0380881684526020818816818601526080604086015282875180855260a0870191508289019450855b818110156158f65785518516835294830194918301916001016158d8565b50508581036060870152865180825290820193509150808601845b8381101561592d57815185529382019390820190600101615911565b50929998505050505050505050565b6001600160a01b039390931683526001600160801b039190911660208301521515604082015260600190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b93845260208401929092526001600160401b03166040830152606082015260800190565b60208082526015908201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604082015260600190565b6020808252601e908201527f4b61736869506169723a20616c726561647920696e697469616c697a65640000604082015260600190565b60208082526016908201527f45524332303a206e6f207a65726f206164647265737300000000000000000000604082015260600190565b6020808252601a908201527f4b61736869506169723a20616c6c2061726520736f6c76656e74000000000000604082015260600190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b60208082526016908201527f4b61736869506169723a2063616c6c206661696c656400000000000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526013908201527f4b61736869506169723a20626164207061697200000000000000000000000000604082015260600190565b60208082526018908201527f45524332303a20616c6c6f77616e636520746f6f206c6f770000000000000000604082015260600190565b60208082526015908201527f4b61736869506169723a2063616e27742063616c6c0000000000000000000000604082015260600190565b6020808252600e908201526d115490cc8c0e88115e1c1a5c995960921b604082015260600190565b60208082526019908201527f4b61736869506169723a207573657220696e736f6c76656e7400000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f4b61736869506169723a20646561642062616c616e6365206c65737300000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b60208082526018908201527f45524332303a204f776e65722063616e6e6f7420626520300000000000000000604082015260600190565b60208082526014908201527f4b617368693a2062656c6f77206d696e696d756d000000000000000000000000604082015260600190565b60208082526016908201527f45524332303a2062616c616e636520746f6f206c6f7700000000000000000000604082015260600190565b60208082526018908201527f4b61736869506169723a20536b696d20746f6f206d7563680000000000000000604082015260600190565b6020808252601a908201527f4b61736869506169723a20496e76616c69642073776170706572000000000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b60208082526016908201527f4b61736869506169723a2072617465206e6f74206f6b00000000000000000000604082015260600190565b60208082526018908201527f45524332303a20496e76616c6964205369676e61747572650000000000000000604082015260600190565b6001600160801b0392831681529116602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b60ff91909116815260200190565b6000808335601e19843603018112615f52578283fd5b8301803591506001600160401b03821115615f6b578283fd5b602001915036819003821315610f3157600080fd5b6040518181016001600160401b0381118282101715615f9e57600080fd5b604052919050565b60006001600160401b03821115615fbb578081fd5b5060209081020190565b60006001600160401b03821115615fda578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b8381101561600f578181015183820152602001615ff7565b838111156147f95750506000910152565b6001600160a01b038116811461603557600080fd5b50565b801515811461603557600080fd5b6001600160801b038116811461603557600080fd5b60ff8116811461603557600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a960a5451905a1220486a760ae1d1fc9d5f7173e3a15df02521e6b96f0f3e59664736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106102c25760003560e01c8063656f3d641161017f5780638da5cb5b116100e1578063d8dfeb451161008a578063f46901ed11610064578063f46901ed1461078b578063f8ba4cff146107ab578063f9557ccb146107c0576102c2565b8063d8dfeb4514610741578063dd62ed3e14610756578063e30c397814610776576102c2565b8063b27c0e74116100bb578063b27c0e74146106e8578063cd446e221461070c578063d505accf14610721576102c2565b80638da5cb5b1461069e57806395d89b41146106b3578063a9059cbb146106c8576102c2565b80637dc0d1d011610143578063860ffea11161011d578063860ffea11461063e578063876467f81461065e5780638cad7fbe1461067e576102c2565b80637dc0d1d0146105e65780637ecebe00146105fb5780638285ef401461061b576102c2565b8063656f3d64146105695780636b2ace871461057c57806370a082311461059157806374645ff3146105b157806376ee101b146105c6576102c2565b8063313ce56711610228578063473e3ce7116101ec5780634b8a3529116101c65780634b8a3529146105135780634ddf47d4146105415780634e71e0c814610554576102c2565b8063473e3ce7146104c9578063476343ee146104de57806348e4163e146104f3576102c2565b8063313ce567146104485780633644e5151461046a57806338d52e0f1461047f5780633ba0b9a9146104945780633f2617cb146104a9576102c2565b806315294c401161028a5780631c9e379b116102645780631c9e379b146103e85780632317ef671461040857806323b872dd14610428576102c2565b806315294c401461038657806318160ddd146103b35780631b51e940146103c8576102c2565b8063017e7e58146102c757806302ce728f146102f257806306fdde0314610315578063078dfbe714610337578063095ea7b314610359575b600080fd5b3480156102d357600080fd5b506102dc6107d5565b6040516102e991906156ab565b60405180910390f35b3480156102fe57600080fd5b506103076107e4565b6040516102e9929190615703565b34801561032157600080fd5b5061032a6108c1565b6040516102e9919061578d565b34801561034357600080fd5b50610357610352366004614f30565b610999565b005b34801561036557600080fd5b50610379610374366004614fa9565b610a89565b6040516102e991906156f8565b34801561039257600080fd5b506103a66103a1366004614f7a565b610af4565b6040516102e99190615713565b3480156103bf57600080fd5b506103a6610b11565b3480156103d457600080fd5b506103a66103e3366004614f7a565b610b27565b3480156103f457600080fd5b506103a6610403366004614d19565b610b3c565b34801561041457600080fd5b506103a6610423366004614fa9565b610b4e565b34801561043457600080fd5b50610379610443366004614e80565b610b69565b34801561045457600080fd5b5061045d610cd1565b6040516102e99190615f2e565b34801561047657600080fd5b506103a6610cee565b34801561048b57600080fd5b506102dc610cf8565b3480156104a057600080fd5b506103a6610d07565b3480156104b557600080fd5b506103576104c43660046153ba565b610d0d565b3480156104d557600080fd5b506103a6610d62565b3480156104ea57600080fd5b50610357610d68565b3480156104ff57600080fd5b506103a661050e366004614d19565b610ed8565b34801561051f57600080fd5b5061053361052e366004614fa9565b610eea565b6040516102e9929190615ede565b61035761054f36600461518b565b610f38565b34801561056057600080fd5b506103576110e0565b610533610577366004615079565b61116e565b34801561058857600080fd5b506102dc611aac565b34801561059d57600080fd5b506103a66105ac366004614d19565b611ad0565b3480156105bd57600080fd5b5061032a611ae2565b3480156105d257600080fd5b506103576105e1366004614fd4565b611b70565b3480156105f257600080fd5b506102dc61267a565b34801561060757600080fd5b506103a6610616366004614d19565b612689565b34801561062757600080fd5b5061063061269b565b6040516102e9929190615ec4565b34801561064a57600080fd5b50610357610659366004614f7a565b6126b5565b34801561066a57600080fd5b50610357610679366004614fa9565b612796565b34801561068a57600080fd5b50610379610699366004614d19565b6127d6565b3480156106aa57600080fd5b506102dc6127eb565b3480156106bf57600080fd5b5061032a6127fa565b3480156106d457600080fd5b506103796106e3366004614fa9565b6128be565b3480156106f457600080fd5b506106fd612989565b6040516102e993929190615f02565b34801561071857600080fd5b506102dc6129b6565b34801561072d57600080fd5b5061035761073c366004614ec0565b6129da565b34801561074d57600080fd5b506102dc612b7b565b34801561076257600080fd5b506103a6610771366004614e48565b612b8a565b34801561078257600080fd5b506102dc612ba7565b34801561079757600080fd5b506103576107a6366004614d19565b612bb6565b3480156107b757600080fd5b50610357612c2a565b3480156107cc57600080fd5b506106306131f6565b6005546001600160a01b031681565b60095460405163d6d7d52560e01b815260009182916001600160a01b039091169063d6d7d5259061081a90600a906004016157a0565b6040805180830381600087803b15801561083357600080fd5b505af1158015610847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086b919061512a565b909250905081156108b85760108190556040517f9f9192b5edb17356c524e08d9e025c8e2f6307e6ea52fb7968faa3081f51c3c8906108ab908390615713565b60405180910390a16108bd565b506010545b9091565b6007546060906108d9906001600160a01b0316613210565b6008546108ee906001600160a01b0316613210565b60095460405163355a219b60e21b81526001600160a01b039091169063d568866c9061091f90600a906004016157a0565b60006040518083038186803b15801561093757600080fd5b505afa15801561094b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109739190810190615449565b604051602001610985939291906155c1565b604051602081830303815290604052905090565b6003546001600160a01b031633146109cc5760405162461bcd60e51b81526004016109c390615c6b565b60405180910390fd5b8115610a68576001600160a01b0383161515806109e65750805b610a025760405162461bcd60e51b81526004016109c390615a8b565b6003546040516001600160a01b038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0385166001600160a01b031991821617909155600480549091169055610a84565b600480546001600160a01b0319166001600160a01b0385161790555b505050565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ae2908690615713565b60405180910390a35060015b92915050565b6000610afe612c2a565b610b098484846132d5565b949350505050565b600c54600160801b90046001600160801b031690565b6000610b31612c2a565b610b0984848461350e565b600e6020526000908152604090205481565b6000610b58612c2a565b610b6283836137b9565b9392505050565b60008115610c8e576001600160a01b03841660009081526020819052604090205482811015610baa5760405162461bcd60e51b81526004016109c390615d7a565b836001600160a01b0316856001600160a01b031614610c8c576001600160a01b03851660009081526001602090815260408083203384529091529020546000198114610c395783811015610c105760405162461bcd60e51b81526004016109c390615b9e565b6001600160a01b0386166000908152600160209081526040808320338452909152902084820390555b6001600160a01b038516610c5f5760405162461bcd60e51b81526004016109c390615a1d565b506001600160a01b0380861660009081526020819052604080822086850390559186168152208054840190555b505b826001600160a01b0316846001600160a01b031660008051602061606b83398151915284604051610cbf9190615713565b60405180910390a35060019392505050565b600854600090610ce9906001600160a01b0316613a80565b905090565b6000610ce9613b39565b6008546001600160a01b031681565b60105481565b6003546001600160a01b03163314610d375760405162461bcd60e51b81526004016109c390615c6b565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600b5481565b610d70612c2a565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015610dcb57600080fd5b505afa158015610ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e039190614d35565b6011546001600160a01b038216600090815260208190526040902054919250600160801b90046001600160801b031690610e3d9082613b99565b6001600160a01b03831660008181526020819052604080822093909355915190919060008051602061606b83398151915290610e7a908590615713565b60405180910390a3601180546001600160801b031690556040516001600160a01b038316907fbe641c3ffc44b2d6c184f023fa4ed7bda4b6ffa71e03b3c98ae0c776da1f17e790610ecc908490615713565b60405180910390a25050565b600f6020526000908152604090205481565b600080610ef5612c2a565b610eff8484613bbc565b8092508193505050610f15336000601054613eb6565b610f315760405162461bcd60e51b81526004016109c390615c34565b9250929050565b6007546001600160a01b031615610f615760405162461bcd60e51b81526004016109c3906159e6565b610f6d81830183615310565b805160079060009060089082906009908290610f9090600a9060208a0190614b4c565b5081546001600160a01b0398891661010092830a908102908a021990911617909155825497871691810a918202918702199097161790558154958416940a938402938302199094169290921790925550600754166110005760405162461bcd60e51b81526004016109c390615b67565b600854604051633de222bb60e21b81526001916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f7888aec9261105792169061dead9060040161582a565b60206040518083038186803b15801561106f57600080fd5b505afa158015611083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a791906154bd565b10156110c55760405162461bcd60e51b81526004016109c390615ca0565b50506011805467ffffffffffffffff19166312e687c0179055565b6004546001600160a01b031633811461110b5760405162461bcd60e51b81526004016109c390615cd7565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b039092166001600160a01b0319928316179055600480549091169055565b600080611179614bc6565b60005b88811015611a6e5760008a8a8381811061119257fe5b90506020020160208101906111a791906154f8565b905082602001511580156111be5750600a8160ff16105b156111d3576111cb612c2a565b600160208401525b60ff8116600a141561122d5760008060008989868181106111f057fe5b90506020028101906112029190615f3c565b81019061120f9190615423565b9250925092506112258282610659868c8c614031565b505050611a65565b60ff81166001141561128e57600080600089898681811061124a57fe5b905060200281019061125c9190615f3c565b8101906112699190615423565b925092509250611284828261127f868c8c614031565b61350e565b9750505050611a65565b60ff8116600214156112ee5760008060008989868181106112ab57fe5b90506020028101906112bd9190615f3c565b8101906112ca9190615423565b9250925092506112e582826112e0868c8c614031565b6132d5565b50505050611a65565b60ff8116600314156113495760008088888581811061130957fe5b905060200281019061131b9190615f3c565b81019061132891906153ff565b915091506113408161133b848a8a614031565b6137b9565b96505050611a65565b60ff8116600414156113a65760008088888581811061136457fe5b90506020028101906113769190615f3c565b81019061138391906153ff565b9150915061139b81611396848a8a614031565b614059565b505060018352611a65565b60ff811660051415611409576000808888858181106113c157fe5b90506020028101906113d39190615f3c565b8101906113e091906153ff565b915091506113f8816113f3848a8a614031565b613bbc565b600187529097509550611a65915050565b60ff8116600b14156114a857600080600089898681811061142657fe5b90506020028101906114389190615f3c565b8101906114459190615157565b9250925092506000806114566107e4565b915091508415806114645750815b801561146f57508381115b8015611482575082158061148257508281115b61149e5760405162461bcd60e51b81526004016109c390615e56565b5050505050611a65565b60ff811660181415611587576000806000806000808c8c898181106114c957fe5b90506020028101906114db9190615f3c565b8101906114e89190614d51565b9550955095509550955095507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c0a47c938787878787876040518763ffffffff1660e01b815260040161154a969594939291906156bf565b600060405180830381600087803b15801561156457600080fd5b505af1158015611578573d6000803e3d6000fd5b50505050505050505050611a65565b60ff81166014141561160f576116058787848181106115a257fe5b90506020028101906115b49190615f3c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c91508690508181106115f757fe5b905060200201358787614167565b9095509350611a65565b60ff81166015141561167a5761160587878481811061162a57fe5b905060200281019061163c9190615f3c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915061425d9050565b60ff81166016141561175257600080600089898681811061169757fe5b90506020028101906116a99190615f3c565b8101906116b69190614e80565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc8433856116f9868e8e614031565b6040518563ffffffff1660e01b81526004016117189493929190615844565b600060405180830381600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b50505050505050611a65565b60ff8116601714156117e657600060608089898681811061176f57fe5b90506020028101906117819190615f3c565b81019061178e919061523e565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fca8843843385856040518563ffffffff1660e01b815260040161171894939291906158a2565b60ff8116601e14156118c057606060006118688b8b8681811061180557fe5b905060200201358a8a8781811061181857fe5b905060200281019061182a9190615f3c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b915061434b9050565b915091508060ff1660011415611893578180602001905181019061188c91906154bd565b96506118b9565b8060ff16600214156118b957818060200190518101906118b391906154d5565b90975095505b5050611a65565b60ff8116600614156119e85760008787848181106118da57fe5b90506020028101906118ec9190615f3c565b8101906118f991906153e7565b6008549091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163da5139ca9116611970611940858b8b614031565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906001614501565b60016040518463ffffffff1660e01b815260040161199093929190615968565b60206040518083038186803b1580156119a857600080fd5b505afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e091906154bd565b955050611a65565b60ff811660071415611a65576000878784818110611a0257fe5b9050602002810190611a149190615f3c565b810190611a2191906153e7565b9050611a61611a31828888614031565b60408051808201909152600d546001600160801b038082168352600160801b90910416602082015290600061459a565b9550505b5060010161117c565b50805115611aa057611a84336000601054613eb6565b611aa05760405162461bcd60e51b81526004016109c390615c34565b50965096945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006020819052908152604090205481565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611b685780601f10611b3d57610100808354040283529160200191611b68565b820191906000526020600020905b815481529060010190602001808311611b4b57829003601f168201915b505050505081565b6000611b7a6107e4565b915050611b85612c2a565b6000806000611b92614bc6565b5060408051808201909152600d546001600160801b038082168352600160801b909104166020820152611bc3614bc6565b600754604051634ffe34db60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692634ffe34db92611c169291909116906004016156ab565b604080518083038186803b158015611c2d57600080fd5b505afa158015611c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c65919061547b565b905060005b8c811015611e8c5760008e8e83818110611c8057fe5b9050602002016020810190611c959190614d19565b9050611ca2818a8a613eb6565b611e83576001600160a01b0381166000908152600f6020526040812054808f8f86818110611ccc57fe5b9050602002013511611cf0578e8e85818110611ce457fe5b90506020020135611cf2565b805b9150611cfe8183614613565b6001600160a01b0384166000908152600f60205260408120919091559050611d27868383614501565b90506000611d6269152d02c7e14af6800000611d508d611d4a866201b580614636565b90614636565b81611d5757fe5b88919004600061459a565b6001600160a01b0385166000908152600e6020526040902054909150611d889082614613565b6001600160a01b038086166000908152600e60205260409020919091558d1615611db2578c611db4565b8d5b6001600160a01b0316846001600160a01b03167f8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c40283604051611df69190615713565b60405180910390a36001600160a01b03808516908e1615611e17578d611e19565b335b6001600160a01b03167fc8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e8486604051611e53929190615ede565b60405180910390a3611e658a82613b99565b9950611e718983613b99565b9850611e7d8884613b99565b97505050505b50600101611c6a565b5083611eaa5760405162461bcd60e51b81526004016109c390615a54565b611ec7611eb68561466d565b83516001600160801b03169061469a565b6001600160801b03168252611ef2611ede8461466d565b60208401516001600160801b03169061469a565b6001600160801b03908116602084018190528351600d80546001600160801b03191691841691909117909216600160801b909102179055600b54611f369086614613565b600b55600854604051636d289ce560e11b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92611f919216908990600190600401615968565b60206040518083038186803b158015611fa957600080fd5b505afa158015611fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe191906154bd565b90508761247657604051634656bfdf60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638cad7fbe90612034908c906004016156ab565b60206040518083038186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612084919061510e565b6120a05760405162461bcd60e51b81526004016109c390615de8565b600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc926120f992919091169030908e908c90600401615844565b600060405180830381600087803b15801561211357600080fd5b505af1158015612127573d6000803e3d6000fd5b50506007546008546040516371a1ff0960e11b81526001600160a01b03808f16955063e343fe129450612167938116921690309087908d9060040161586e565b6040805180830381600087803b15801561218057600080fd5b505af1158015612194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b891906154d5565b5050600c54600854604051633de222bb60e21b815260009261227b926001600160801b03909116916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f7888aec92612225929190911690309060040161582a565b60206040518083038186803b15801561223d57600080fd5b505afa158015612251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227591906154bd565b90614613565b905060006122898284614613565b90506000620186a061229d83612710614636565b816122a457fe5b0490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc600860009054906101000a90046001600160a01b0316307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561234657600080fd5b505afa15801561235a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237e9190614d35565b856040518563ffffffff1660e01b815260040161239e9493929190615844565b600060405180830381600087803b1580156123b857600080fd5b505af11580156123cc573d6000803e3d6000fd5b505050506124006123ee6123e9838661461390919063ffffffff16565b61466d565b600c546001600160801b0316906146c9565b600c80546001600160801b0319166001600160801b0392909216919091179055306001600160a01b038d167f30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e386124568585614613565b6000604051612466929190615ede565b60405180910390a350505061266a565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163f18d03cc919081169030908d16156124be578c6124c0565b8d5b8a6040518563ffffffff1660e01b81526004016124e09493929190615844565b600060405180830381600087803b1580156124fa57600080fd5b505af115801561250e573d6000803e3d6000fd5b505050506001600160a01b038916156125b2576007546008546040516371a1ff0960e11b81526001600160a01b03808d169363e343fe129361255e93918316921690339087908d9060040161586e565b6040805180830381600087803b15801561257757600080fd5b505af115801561258b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125af91906154d5565b50505b600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc9261260b929190911690339030908790600401615844565b600060405180830381600087803b15801561262557600080fd5b505af1158015612639573d6000803e3d6000fd5b505050506126496123ee8261466d565b600c80546001600160801b0319166001600160801b03929092169190911790555b5050505050505050505050505050565b6009546001600160a01b031681565b60026020526000908152604090205481565b600d546001600160801b0380821691600160801b90041682565b6001600160a01b0383166000908152600e60205260409020546126d89082613b99565b6001600160a01b0384166000908152600e6020526040902055600b546126fe8183613b99565b600b55600754612719906001600160a01b03168383866146f8565b836001600160a01b03168361272e5733612750565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f9ed03113de523cebfe5e49d5f8e12894b1c0d42ce805990461726444c90eab87846040516127889190615713565b60405180910390a350505050565b61279e612c2a565b6127a88282614059565b6127b6336000601054613eb6565b6127d25760405162461bcd60e51b81526004016109c390615c34565b5050565b60066020526000908152604090205460ff1681565b6003546001600160a01b031681565b600754606090612812906001600160a01b03166147ff565b600854612827906001600160a01b03166147ff565b60095460405163634ce26b60e11b81526001600160a01b039091169063c699c4d69061285890600a906004016157a0565b60006040518083038186803b15801561287057600080fd5b505afa158015612884573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128ac9190810190615449565b6040516020016109859392919061563e565b600081156129585733600090815260208190526040902054828110156128f65760405162461bcd60e51b81526004016109c390615d7a565b336001600160a01b03851614612956576001600160a01b03841661292c5760405162461bcd60e51b81526004016109c390615a1d565b3360009081526020819052604080822085840390556001600160a01b038616825290208054840190555b505b826001600160a01b0316336001600160a01b031660008051602061606b83398151915284604051610ae29190615713565b6011546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b038716612a005760405162461bcd60e51b81526004016109c390615d0c565b834210612a1f5760405162461bcd60e51b81526004016109c390615c0c565b6001600160a01b0387166000818152600260209081526040918290208054600181810190925592519092612a9d92612a82927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928e928e928e92918e910161571c565b60405160208183030381529060405280519060200120614846565b85858560405160008152602001604052604051612abd949392919061576f565b6020604051602081039080840390855afa158015612adf573d6000803e3d6000fd5b505050602060405103516001600160a01b031614612b0f5760405162461bcd60e51b81526004016109c390615e8d565b6001600160a01b038088166000818152600160209081526040808320948b168084529490915290819020889055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612b6a908990615713565b60405180910390a350505050505050565b6007546001600160a01b031681565b600160209081526000928352604080842090915290825290205481565b6004546001600160a01b031681565b6003546001600160a01b03163314612be05760405162461bcd60e51b81526004016109c390615c6b565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fcf1d3f17e521c635e0d20b8acba94ba170afc041d0546d46dafa09d3c9c19eb390600090a250565b612c32614bdd565b50604080516060810182526011546001600160401b038082168352600160401b82041660208301819052600160801b9091046001600160801b03169282019290925290420380612c835750506131f4565b6001600160401b0342166020830152612c9a614bc6565b5060408051808201909152600d546001600160801b038082168352600160801b9091041660208201819052612d915782516001600160401b03166312e687c014612d24576312e687c08084526040517f33af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026b91612d1b916000918291829061598b565b60405180910390a15b5050805160118054602084015160409094015167ffffffffffffffff199091166001600160401b03938416176fffffffffffffffff00000000000000001916600160401b9390941692909202929092176001600160801b03908116600160801b91909216021790556131f4565b600080612d9c614bc6565b5060408051808201909152600c546001600160801b038082168352600160801b9091048116602083015286518551670de0b6b3a764000092612dee928992611d4a9216906001600160401b0316614636565b81612df557fe5b049250612e15612e048461466d565b85516001600160801b0316906146c9565b6001600160801b03168085526008548251604051630acc462360e31b8152600093612ed69390926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693635662311893612e809392169190889060040161593c565b60206040518083038186803b158015612e9857600080fd5b505afa158015612eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed091906154bd565b90613b99565b90506000620186a0612eea86612710614636565b81612ef157fe5b04905081612f1584602001516001600160801b03168361463690919063ffffffff16565b81612f1c57fe5b049350612f3f612f2b8561466d565b60408a01516001600160801b0316906146c9565b6001600160801b03166040890152612f6d612f598561466d565b60208501516001600160801b0316906146c9565b600c80546001600160801b03908116600160801b9382168402179091558751600d805460208b01516001600160801b031990911692841692831784169316909302919091179091556000908390612fcc90670de0b6b3a7640000614636565b81612fd357fe5b0490506709b6e64a8ec600008110156130955760006709b6e64a8ec60000613007670de0b6b3a7640000611d4a8386614613565b8161300e57fe5b049050600061303c6130248b611d4a8580614636565b7054a2b63d65d79d094abb6688000000000090613b99565b8b519091508190613067906001600160401b03167054a2b63d65d79d094abb66880000000000614636565b8161306e57fe5b046001600160401b0316808c526304b9a1f0111561308e576304b9a1f08b525b5050613146565b670b1a2bc2ec5000008111156131465760006702c68af0bb1400006130ce670de0b6b3a7640000611d4a85670b1a2bc2ec500000614613565b816130d557fe5b04905060006130eb6130248b611d4a8580614636565b8b519091506000907054a2b63d65d79d094abb6688000000000090613119906001600160401b031684614636565b8161312057fe5b0490506449d482460081111561313857506449d48246005b6001600160401b03168b5250505b88516040517f33af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026b9161317c9189918991869061598b565b60405180910390a1505086516011805460208a01516040909a015167ffffffffffffffff199091166001600160401b03938416176fffffffffffffffff00000000000000001916600160401b93909a1692909202989098176001600160801b03908116600160801b9190921602179096555050505050505b565b600c546001600160801b0380821691600160801b90041682565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b179052905160609160009183916001600160a01b03861691613257919061555c565b600060405180830381855afa9150503d8060008114613292576040519150601f19603f3d011682016040523d82523d6000602084013e613297565b606091505b5091509150816132c257604051806040016040528060038152602001623f3f3f60e81b8152506132cb565b6132cb8161489b565b925050505b919050565b60408051808201909152600d546001600160801b038082168352600160801b90910416602082015260009061330c90836001614a00565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b0386166000908152600f90925260409091205490915061336a9083614613565b6001600160a01b038086166000908152600f6020526040808220939093556008549251636d289ce560e11b815290927f000000000000000000000000000000000000000000000000000000000000000083169263da5139ca926133d892909116908690600190600401615968565b60206040518083038186803b1580156133f057600080fd5b505afa158015613404573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342891906154bd565b600c546008549192506001600160801b031690613450906001600160a01b03168383886146f8565b61346c61345c8361466d565b6001600160801b038316906146c9565b600c80546001600160801b0319166001600160801b03929092169190911790556001600160a01b038616856134a157336134c3565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167fc8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e85876040516134fd929190615ede565b60405180910390a350509392505050565b6000613518614bc6565b50604080518082018252600c546001600160801b03808216808452600160801b90920481166020840152600854600d549451636d289ce560e11b8152939492936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca946135a194921692169060019060040161593c565b60206040518083038186803b1580156135b957600080fd5b505afa1580156135cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f191906154bd565b83516001600160801b03160190508015613633578061362684602001516001600160801b03168761463690919063ffffffff16565b8161362d57fe5b04613635565b845b93506103e861365a6136468661466d565b60208601516001600160801b0316906146c9565b6001600160801b031610156136755760009350505050610b62565b613680838686614a75565b8051600c80546020938401516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b03881660009081529081905260409020546136d99085613b99565b6001600160a01b03881660008181526020819052604080822093909355915190919060008051602061606b83398151915290613716908890615713565b60405180910390a3600854613736906001600160a01b03168684896146f8565b866001600160a01b03168661374b573361376d565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e3887876040516137a7929190615ede565b60405180910390a35050509392505050565b60006137c3614bc6565b50604080518082018252600c546001600160801b038082168352600160801b90910481166020830152600854600d549351636d289ce560e11b815292936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca9461384a9492169291169060019060040161593c565b60206040518083038186803b15801561386257600080fd5b505afa158015613876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389a91906154bd565b825160208401516001600160801b03918216929092019250166138bd8583614636565b816138c457fe5b3360009081526020819052604090205491900493506138e39085614613565b3360008181526020819052604080822093909355915160008051602061606b83398151915290613914908890615713565b60405180910390a3613928611eb68461466d565b6001600160801b0316825261393f611ede8561466d565b6001600160801b0316602083018190526103e811156139705760405162461bcd60e51b81526004016109c390615d43565b8151600c805460208501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556040516001600160a01b0386169033907f6e853a5fd6b51d773691f542ebac8513c9992a51380d4c342031056a64114228906139e59087908990615ede565b60405180910390a3600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613a4692919091169030908a908990600401615844565b600060405180830381600087803b158015613a6057600080fd5b505af1158015613a74573d6000803e3d6000fd5b50505050505092915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b03861691613ac7919061555c565b600060405180830381855afa9150503d8060008114613b02576040519150601f19603f3d011682016040523d82523d6000602084013e613b07565b606091505b5091509150818015613b1a575080516020145b613b255760126132cb565b808060200190518101906132cb9190615514565b6000467f00000000000000000000000000000000000000000000000000000000000000008114613b7157613b6c81614ab6565b613b93565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b81810181811015610aee5760405162461bcd60e51b81526004016109c390615b30565b600080613bc76107e4565b5060009050620186a0613bdb856032614636565b81613be257fe5b049050613c22613bf28583613b99565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906001614aed565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b03199092169190911716919091179055336000908152600f909252604090912054909350613c779084613b99565b336000818152600f6020526040908190209290925590516001600160a01b03871691907f3a5151e57d3bc9798e7853034ac52293d1a0e12a2b44725e75b03b21f86477a690613ccb90889086908990615eec565b60405180910390a3600854604051636d289ce560e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92613d2b9291909116908890600090600401615968565b60206040518083038186803b158015613d4357600080fd5b505afa158015613d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7b91906154bd565b9150613d85614bc6565b5060408051808201909152600c546001600160801b038082168352600160801b90910416602082018190526103e81115613dd15760405162461bcd60e51b81526004016109c390615d43565b613dee613ddd8461466d565b82516001600160801b03169061469a565b6001600160801b03908116808352600c805460208501518416600160801b026001600160801b0319909116909217909216179055600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613e7b92919091169030908b908990600401615844565b600060405180830381600087803b158015613e9557600080fd5b505af1158015613ea9573d6000803e3d6000fd5b5050505050509250929050565b6001600160a01b0383166000908152600f602052604081205480613ede576001915050610b62565b6001600160a01b0385166000908152600e602052604090205480613f0757600092505050610b62565b613f0f614bc6565b5060408051808201909152600d546001600160801b03808216808452600160801b909204166020830181905290613f4d908790611d4a908790614636565b81613f5457fe5b600754919004906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163566231189116613fb48a613f9f57620124f8613fa4565b62012cc85b611d4a886509184e72a000614636565b60006040518463ffffffff1660e01b8152600401613fd493929190615968565b60206040518083038186803b158015613fec57600080fd5b505afa158015614000573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402491906154bd565b1015979650505050505050565b60008084121561405157600019841461404a578161404c565b825b610b09565b509192915050565b336000908152600e60205260409020546140739082614613565b336000908152600e6020526040902055600b546140909082614613565b600b556040516001600160a01b0383169033907f8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c402906140d0908590615713565b60405180910390a3600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92614131929190911690309087908790600401615844565b600060405180830381600087803b15801561414b57600080fd5b505af115801561415f573d6000803e3d6000fd5b505050505050565b6000806000806000808980602001905181019061418491906151f7565b9350935093509350614197828989614031565b91506141a4818989614031565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302b9446c8a86338787876040518763ffffffff1660e01b81526004016141fb95949392919061586e565b60408051808303818588803b15801561421357600080fd5b505af1158015614227573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061424c91906154d5565b955095505050505094509492505050565b6000806000806000808880602001905181019061427a91906151f7565b93509350935093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d308533866142bf878e8e614031565b6142ca878f8f614031565b6040518663ffffffff1660e01b81526004016142ea95949392919061586e565b6040805180830381600087803b15801561430357600080fd5b505af1158015614317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061433b91906154d5565b9550955050505050935093915050565b6060600080606060008060008980602001905181019061436b9190614dbe565b94509450945094509450828015614380575081155b156143ae578389604051602001614398929190615578565b6040516020818303038152906040529350614407565b821580156143b95750815b156143d1578388604051602001614398929190615578565b8280156143db5750815b15614407578389896040516020016143f59392919061559a565b60405160208183030381529060405293505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415801561445257506001600160a01b0385163014155b61446e5760405162461bcd60e51b81526004016109c390615bd5565b60006060866001600160a01b03168d8760405161448b919061555c565b60006040518083038185875af1925050503d80600081146144c8576040519150601f19603f3d011682016040523d82523d6000602084013e6144cd565b606091505b5091509150816144ef5760405162461bcd60e51b81526004016109c390615ac2565b9c919b50909950505050505050505050565b600083602001516001600160801b031660001415614520575081610b62565b602084015184516001600160801b039182169161453f91869116614636565b8161454657fe5b04905081801561458a57508284600001516001600160801b031661458086602001516001600160801b03168461463690919063ffffffff16565b8161458757fe5b04105b15610b6257610b09816001613b99565b82516000906001600160801b03166145b3575081610b62565b835160208501516001600160801b03918216916145d291869116614636565b816145d957fe5b04905081801561458a57508284602001516001600160801b031661458086600001516001600160801b03168461463690919063ffffffff16565b80820382811115610aee5760405162461bcd60e51b81526004016109c3906159af565b60008115806146515750508082028282828161464e57fe5b04145b610aee5760405162461bcd60e51b81526004016109c390615e1f565b60006001600160801b038211156146965760405162461bcd60e51b81526004016109c390615af9565b5090565b8082036001600160801b038084169082161115610aee5760405162461bcd60e51b81526004016109c3906159af565b8181016001600160801b038083169082161015610aee5760405162461bcd60e51b81526004016109c390615b30565b801561477457614750827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f7888aec87306040518363ffffffff1660e01b815260040161222592919061582a565b83111561476f5760405162461bcd60e51b81526004016109c390615db1565b6147f9565b604051633c6340f360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc906147c6908790339030908990600401615844565b600060405180830381600087803b1580156147e057600080fd5b505af11580156147f4573d6000803e3d6000fd5b505050505b50505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b03861691613257919061555c565b600060405180604001604052806002815260200161190160f01b81525061486b613b39565b8360405160200161487e9392919061559a565b604051602081830303815290604052805190602001209050919050565b606060408251106148c157818060200190518101906148ba9190615449565b90506132d0565b8151602014156149e05760005b60208160ff161080156148fd5750828160ff16815181106148eb57fe5b01602001516001600160f81b03191615155b1561490a576001016148ce565b60608160ff166001600160401b038111801561492557600080fd5b506040519080825280601f01601f191660200182016040528015614950576020820181803683370190505b509050600091505b60208260ff161080156149875750838260ff168151811061497557fe5b01602001516001600160f81b03191615155b156149d757838260ff168151811061499b57fe5b602001015160f81c60f81b818360ff16815181106149b557fe5b60200101906001600160f81b031916908160001a905350600190910190614958565b91506132d09050565b506040805180820190915260038152623f3f3f60e81b60208201526132d0565b614a08614bc6565b6000614a15858585614501565b9050614a34614a238261466d565b86516001600160801b03169061469a565b6001600160801b03168552614a5f614a4b8561466d565b60208701516001600160801b03169061469a565b6001600160801b03166020860152939492505050565b614a7d614bc6565b614a89612e048461466d565b6001600160801b03168452614aa06136468361466d565b6001600160801b03166020850152509192915050565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218823060405160200161487e93929190615750565b614af5614bc6565b6000614b0285858561459a565b9050614b21614b108561466d565b86516001600160801b0316906146c9565b6001600160801b03168552614a5f614b388261466d565b60208701516001600160801b0316906146c9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614b8d57805160ff1916838001178555614bba565b82800160010185558215614bba579182015b82811115614bba578251825591602001919060010190614b9f565b50614696929150614bfd565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b5b808211156146965760008155600101614bfe565b8035610aee81616020565b60008083601f840112614c2e578182fd5b5081356001600160401b03811115614c44578182fd5b6020830191508360208083028501011115610f3157600080fd5b600082601f830112614c6e578081fd5b8135614c81614c7c82615fa6565b615f80565b818152915060208083019084810181840286018201871015614ca257600080fd5b60005b84811015614cc157813584529282019290820190600101614ca5565b505050505092915050565b600082601f830112614cdc578081fd5b8151614cea614c7c82615fc5565b9150808252836020828501011115614d0157600080fd5b614d12816020840160208601615ff4565b5092915050565b600060208284031215614d2a578081fd5b8135610b6281616020565b600060208284031215614d46578081fd5b8151610b6281616020565b60008060008060008060c08789031215614d69578182fd5b8635614d7481616020565b95506020870135614d8481616020565b94506040870135614d9481616038565b93506060870135614da48161605b565b9598949750929560808101359460a0909101359350915050565b600080600080600060a08688031215614dd5578283fd5b8551614de081616020565b60208701519095506001600160401b03811115614dfb578384fd5b614e0788828901614ccc565b9450506040860151614e1881616038565b6060870151909350614e2981616038565b6080870151909250614e3a8161605b565b809150509295509295909350565b60008060408385031215614e5a578182fd5b8235614e6581616020565b91506020830135614e7581616020565b809150509250929050565b600080600060608486031215614e94578081fd5b8335614e9f81616020565b92506020840135614eaf81616020565b929592945050506040919091013590565b600080600080600080600060e0888a031215614eda578485fd5b8735614ee581616020565b96506020880135614ef581616020565b955060408801359450606088013593506080880135614f138161605b565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215614f44578081fd5b8335614f4f81616020565b92506020840135614f5f81616038565b91506040840135614f6f81616038565b809150509250925092565b600080600060608486031215614f8e578081fd5b8335614f9981616020565b92506020840135614eaf81616038565b60008060408385031215614fbb578182fd5b8235614fc681616020565b946020939093013593505050565b600080600080600080600060a0888a031215614fee578081fd5b87356001600160401b0380821115615004578283fd5b6150108b838c01614c1d565b909950975060208a0135915080821115615028578283fd5b506150358a828b01614c1d565b909650945050604088013561504981616020565b9250606088013561505981616020565b9150608088013561506981616038565b8091505092959891949750929550565b60008060008060008060608789031215615091578384fd5b86356001600160401b03808211156150a7578586fd5b6150b38a838b01614c1d565b909850965060208901359150808211156150cb578586fd5b6150d78a838b01614c1d565b909650945060408901359150808211156150ef578384fd5b506150fc89828a01614c1d565b979a9699509497509295939492505050565b60006020828403121561511f578081fd5b8151610b6281616038565b6000806040838503121561513c578182fd5b825161514781616038565b6020939093015192949293505050565b60008060006060848603121561516b578081fd5b833561517681616038565b95602085013595506040909401359392505050565b6000806020838503121561519d578182fd5b82356001600160401b03808211156151b3578384fd5b818501915085601f8301126151c6578384fd5b8135818111156151d4578485fd5b8660208285010111156151e5578485fd5b60209290920196919550909350505050565b6000806000806080858703121561520c578182fd5b845161521781616020565b602086015190945061522881616020565b6040860151606090960151949790965092505050565b600080600060608486031215615252578081fd5b833561525d81616020565b92506020848101356001600160401b0380821115615279578384fd5b818701915087601f83011261528c578384fd5b813561529a614c7c82615fa6565b81815284810190848601868402860187018c10156152b6578788fd5b8795505b838610156152e0576152cc8c82614c12565b8352600195909501949186019186016152ba565b509650505060408701359250808311156152f8578384fd5b505061530686828701614c5e565b9150509250925092565b60008060008060808587031215615325578182fd5b843561533081616020565b9350602085013561534081616020565b9250604085013561535081616020565b915060608501356001600160401b0381111561536a578182fd5b8501601f8101871361537a578182fd5b8035615388614c7c82615fc5565b81815288602083850101111561539c578384fd5b81602084016020830137908101602001929092525092959194509250565b600080604083850312156153cc578182fd5b82356153d781616020565b91506020830135614e7581616038565b6000602082840312156153f8578081fd5b5035919050565b60008060408385031215615411578182fd5b823591506020830135614e7581616020565b600080600060608486031215615437578081fd5b833592506020840135614f5f81616020565b60006020828403121561545a578081fd5b81516001600160401b0381111561546f578182fd5b610b0984828501614ccc565b60006040828403121561548c578081fd5b6154966040615f80565b82516154a181616046565b815260208301516154b181616046565b60208201529392505050565b6000602082840312156154ce578081fd5b5051919050565b600080604083850312156154e7578182fd5b505080516020909101519092909150565b600060208284031215615509578081fd5b8135610b628161605b565b600060208284031215615525578081fd5b8151610b628161605b565b60008151808452615548816020860160208601615ff4565b601f01601f19169290920160200192915050565b6000825161556e818460208701615ff4565b9190910192915050565b6000835161558a818460208801615ff4565b9190910191825250602001919050565b600084516155ac818460208901615ff4565b91909101928352506020820152604001919050565b600071025b0b9b4349026b2b234bab6902934b9b5960751b825284516155ee816012850160208901615ff4565b602f60f81b601291840191820152845161560f816013840160208901615ff4565b602d60f81b601392909101918201528351615631816014840160208801615ff4565b0160140195945050505050565b6000616b6d60f01b8252845161565b816002850160208901615ff4565b602f60f81b600291840191820152845161567c816003840160208901615ff4565b602d60f81b60039290910191820152835161569e816004840160208801615ff4565b0160040195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152949095166020850152911515604084015260ff166060830152608082015260a081019190915260c00190565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b92835260208301919091526001600160a01b0316604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610b626020830184615530565b600060208083018184528285546001808216600081146157c757600181146157e55761581d565b60028304607f16855260ff198316604089015260608801935061581d565b600283048086526157f58a615fe8565b885b828110156158135781548b8201604001529084019088016157f7565b8a01604001955050505b5091979650505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6000608082016001600160a01b0380881684526020818816818601526080604086015282875180855260a0870191508289019450855b818110156158f65785518516835294830194918301916001016158d8565b50508581036060870152865180825290820193509150808601845b8381101561592d57815185529382019390820190600101615911565b50929998505050505050505050565b6001600160a01b039390931683526001600160801b039190911660208301521515604082015260600190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b93845260208401929092526001600160401b03166040830152606082015260800190565b60208082526015908201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604082015260600190565b6020808252601e908201527f4b61736869506169723a20616c726561647920696e697469616c697a65640000604082015260600190565b60208082526016908201527f45524332303a206e6f207a65726f206164647265737300000000000000000000604082015260600190565b6020808252601a908201527f4b61736869506169723a20616c6c2061726520736f6c76656e74000000000000604082015260600190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b60208082526016908201527f4b61736869506169723a2063616c6c206661696c656400000000000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526013908201527f4b61736869506169723a20626164207061697200000000000000000000000000604082015260600190565b60208082526018908201527f45524332303a20616c6c6f77616e636520746f6f206c6f770000000000000000604082015260600190565b60208082526015908201527f4b61736869506169723a2063616e27742063616c6c0000000000000000000000604082015260600190565b6020808252600e908201526d115490cc8c0e88115e1c1a5c995960921b604082015260600190565b60208082526019908201527f4b61736869506169723a207573657220696e736f6c76656e7400000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f4b61736869506169723a20646561642062616c616e6365206c65737300000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b60208082526018908201527f45524332303a204f776e65722063616e6e6f7420626520300000000000000000604082015260600190565b60208082526014908201527f4b617368693a2062656c6f77206d696e696d756d000000000000000000000000604082015260600190565b60208082526016908201527f45524332303a2062616c616e636520746f6f206c6f7700000000000000000000604082015260600190565b60208082526018908201527f4b61736869506169723a20536b696d20746f6f206d7563680000000000000000604082015260600190565b6020808252601a908201527f4b61736869506169723a20496e76616c69642073776170706572000000000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b60208082526016908201527f4b61736869506169723a2072617465206e6f74206f6b00000000000000000000604082015260600190565b60208082526018908201527f45524332303a20496e76616c6964205369676e61747572650000000000000000604082015260600190565b6001600160801b0392831681529116602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b60ff91909116815260200190565b6000808335601e19843603018112615f52578283fd5b8301803591506001600160401b03821115615f6b578283fd5b602001915036819003821315610f3157600080fd5b6040518181016001600160401b0381118282101715615f9e57600080fd5b604052919050565b60006001600160401b03821115615fbb578081fd5b5060209081020190565b60006001600160401b03821115615fda578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b8381101561600f578181015183820152602001615ff7565b838111156147f95750506000910152565b6001600160a01b038116811461603557600080fd5b50565b801515811461603557600080fd5b6001600160801b038116811461603557600080fd5b60ff8116811461603557600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a960a5451905a1220486a760ae1d1fc9d5f7173e3a15df02521e6b96f0f3e59664736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
