{
  "_format": "hh-sol-artifact-1",
  "contractName": "PangoChef",
  "sourceName": "contracts/staking-positions/PangoChef.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newRewardsToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        },
        {
          "internalType": "contract IPangolinFactory",
          "name": "newFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newWrappedNativeToken",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "FailedTransfer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "HighSlippage",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidType",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Locked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MismatchedArrayLengths",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoEffect",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NonExistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NullInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OutOfBounds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Overflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Reentrancy",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TooEarly",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TooLate",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Underflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnprivilegedCaller",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newDuration",
          "type": "uint256"
        }
      ],
      "name": "PeriodDurationUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "PeriodEnded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOrRecipient",
          "type": "address"
        }
      ],
      "name": "PoolInitialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "name": "RewardAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewarder",
          "type": "address"
        }
      ],
      "name": "RewarderSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "userId",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "name": "Staked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newWeight",
          "type": "uint256"
        }
      ],
      "name": "WeightSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "userId",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "addReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        }
      ],
      "name": "claim",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minPairAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxPairAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct PangoChef.Slippage",
          "name": "slippage",
          "type": "tuple"
        }
      ],
      "name": "compound",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "harvestPoolId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "compoundPoolId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minPairAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxPairAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct PangoChef.Slippage",
          "name": "slippage",
          "type": "tuple"
        }
      ],
      "name": "compoundTo",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        }
      ],
      "name": "emergencyExitLevel1",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "confirmation",
          "type": "bytes32"
        }
      ],
      "name": "emergencyExitLevel2",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "endPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "contract IPangolinFactory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "userId",
          "type": "address"
        }
      ],
      "name": "getLockedPools",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "userId",
          "type": "address"
        }
      ],
      "name": "getUser",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint104",
                  "name": "balance",
                  "type": "uint104"
                },
                {
                  "internalType": "uint152",
                  "name": "sumOfEntryTimes",
                  "type": "uint152"
                }
              ],
              "internalType": "struct PangoChef.ValueVariables",
              "name": "valueVariables",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "idealPosition",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "rewardPerValue",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PangoChef.RewardSummations",
              "name": "rewardSummationsPaid",
              "type": "tuple"
            },
            {
              "internalType": "uint152",
              "name": "previousValues",
              "type": "uint152"
            },
            {
              "internalType": "uint48",
              "name": "lastUpdate",
              "type": "uint48"
            },
            {
              "internalType": "uint56",
              "name": "lockCount",
              "type": "uint56"
            },
            {
              "internalType": "uint96",
              "name": "stashedRewards",
              "type": "uint96"
            }
          ],
          "internalType": "struct PangoChef.User",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        }
      ],
      "name": "harvest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOrRecipient",
          "type": "address"
        },
        {
          "internalType": "enum PangoChef.PoolType",
          "name": "poolType",
          "type": "uint8"
        }
      ],
      "name": "initializePool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastUpdate",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "periodDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "periodFinish",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "poolRewardInfos",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "weight",
          "type": "uint32"
        },
        {
          "internalType": "uint96",
          "name": "stashedRewards",
          "type": "uint96"
        },
        {
          "internalType": "uint128",
          "name": "rewardPerWeightPaid",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        }
      ],
      "name": "poolRewardRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "pools",
      "outputs": [
        {
          "internalType": "address",
          "name": "tokenOrRecipient",
          "type": "address"
        },
        {
          "internalType": "enum PangoChef.PoolType",
          "name": "poolType",
          "type": "uint8"
        },
        {
          "internalType": "contract IRewarder",
          "name": "rewarder",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "rewardPair",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint104",
              "name": "balance",
              "type": "uint104"
            },
            {
              "internalType": "uint152",
              "name": "sumOfEntryTimes",
              "type": "uint152"
            }
          ],
          "internalType": "struct PangoChef.ValueVariables",
          "name": "valueVariables",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "idealPosition",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardPerValue",
              "type": "uint256"
            }
          ],
          "internalType": "struct PangoChef.RewardSummations",
          "name": "rewardSummationsStored",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolsLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPerWeightStored",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardsToken",
      "outputs": [
        {
          "internalType": "contract ERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newDuration",
          "type": "uint256"
        }
      ],
      "name": "setPeriodDuration",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "rewarder",
          "type": "address"
        }
      ],
      "name": "setRewarder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "poolIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint32[]",
          "name": "weights",
          "type": "uint32[]"
        }
      ],
      "name": "setWeights",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "userId",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "stakeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalRewardAdded",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalWeight",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "userId",
          "type": "address"
        }
      ],
      "name": "userPendingRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "userId",
          "type": "address"
        }
      ],
      "name": "userRewardRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wrappedNativeToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60e060405262015180600555600160065560006009553480156200002257600080fd5b5060405162004fa138038062004fa1833981016040819052620000459162000681565b83836001600160a01b0381166200006f57604051632505ecc360e11b815260040160405180910390fd5b6001600160a01b038216608052620000896000826200024e565b620000b57f0914bb97ca83e85ef385857d9d418f187ff630589e0c9f44db92976d8e4519cb826200024e565b620000e17f6077685936c8169d09204a1d97db12e41713588c38e1d29a61867d3dcee98aff826200024e565b5050600080805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b80546103e863ffffffff199091161790556004805463ffffffff60901b1916607d60931b17815560405163e6a4390560e01b81526001600160a01b038781169282019290925283821660248201529084169063e6a4390590604401602060405180830381865afa15801562000187573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ad9190620006e9565b90506001600160a01b038116620001d757604051632505ecc360e11b815260040160405180910390fd5b6001600160a01b0380841660a052821660c052604051620001f8906200065a565b604051809103906000f08015801562000215573d6000803e3d6000fd5b50600a80546001600160a01b0319166001600160a01b03929092169190911790556200024381600162000291565b50505050506200078d565b6200026582826200054760201b620019201760201c565b60008281526001602090815260409091206200028c918390620019be620005e8821b17901c565b505050565b6009805460009182620002a48362000710565b9091555060008181526007602052604090209091506001600160a01b0384161580620002e457506000836002811115620002e257620002e262000738565b145b156200030357604051632505ecc360e11b815260040160405180910390fd5b80546001600160a01b0385166001600160a01b0319821681178355849183916001600160a81b031990911617600160a01b83600281111562000349576200034962000738565b0217905550600183600281111562000365576200036562000738565b036200050b57836001600160a01b03163b600003620003975760405163c1ab6dc160e01b815260040160405180910390fd5b600a54604051630edcc0f960e41b81526001600160a01b0386811660048301529091169063edcc0f90906024016040805180830381865afa925050508015620003ff575060408051601f3d908101601f19168201909252620003fc918101906200074e565b60015b156200050b5760a05160405163e6a4390560e01b81526001600160a01b038481166004830152838116602483015288811692169063e6a4390590604401602060405180830381865afa1580156200045a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004809190620006e9565b6001600160a01b03160362000508576080516001600160a01b0316826001600160a01b031603620004ce576002830180546001600160a01b0319166001600160a01b03831617905562000508565b6080516001600160a01b0316816001600160a01b03160362000508576002830180546001600160a01b0319166001600160a01b0384161790555b50505b6040516001600160a01b0385169083907f3d82013e0d368d05bfb8b953d35bffd6eec15520773228de41146f306a241aec90600090a350505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620005e4576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620005a33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620005ff836001600160a01b03841662000608565b90505b92915050565b6000818152600183016020526040812054620006515750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000602565b50600062000602565b61021a8062004d8783390190565b6001600160a01b03811681146200067e57600080fd5b50565b600080600080608085870312156200069857600080fd5b8451620006a58162000668565b6020860151909450620006b88162000668565b6040860151909350620006cb8162000668565b6060860151909250620006de8162000668565b939692955090935050565b600060208284031215620006fc57600080fd5b8151620007098162000668565b9392505050565b6000600182016200073157634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156200076257600080fd5b82516200076f8162000668565b6020840151909250620007828162000668565b809150509250929050565b60805160a05160c051614584620008036000396000818161036901526133000152600081816109950152612dd40152600081816109e901528181610d5a015281816113850152818161157b015281816122a401528181612e5101528181612eb901528181613221015261343401526145846000f3fe6080604052600436106102d15760003560e01c80637b0a47ee11610179578063c0463711116100d6578063d61f06801161008a578063ebe2b12b11610064578063ebe2b12b14610a7e578063f2d1e1cd14610a9d578063f851844b14610abd57600080fd5b8063d61f068014610a2b578063d97f8ed614610a4b578063ddc6326214610a5e57600080fd5b8063ca15c873116100bb578063ca15c873146109b7578063d1af0c7d146109d7578063d547741f14610a0b57600080fd5b8063c046371114610946578063c45a01551461098357600080fd5b806391d148541161012d578063a217fddf11610112578063a217fddf1461084b578063ac4afa3814610860578063b470aade1461093057600080fd5b806391d14854146107ce57806396c82e571461081257600080fd5b806380754b281161015e57806380754b281461077b57806382f084d31461078e5780639010d07c146107ae57600080fd5b80637b0a47ee146107465780637c2d6e011461075b57600080fd5b806343d5599e11610232578063562d12d7116101e65780636bc9f703116101c05780636bc9f7031461066057806374de4ec4146107065780637b0472f01461072657600080fd5b8063562d12d71461060b57806359b02eb31461062b5780635faa65ff1461064b57600080fd5b8063441a3e7011610217578063441a3e701461059e57806347df36c0146105be57806354f8c475146105eb57600080fd5b806343d5599e1461055e57806343de32071461057e57600080fd5b80632716ae66116102895780633228dd591161026e5780633228dd59146104d457806336568abe1461051e578063379607f51461053e57600080fd5b80632716ae661461049d5780632f2ff15d146104b257600080fd5b806317fcb39b116102ba57806317fcb39b14610357578063248a9ca3146103a3578063257664a4146103e157600080fd5b806301ffc9a7146102d6578063098b88581461030b575b600080fd5b3480156102e257600080fd5b506102f66102f1366004613d1a565b610add565b60405190151581526020015b60405180910390f35b34801561031757600080fd5b5060045461033a90660100000000000090046bffffffffffffffffffffffff1681565b6040516bffffffffffffffffffffffff9091168152602001610302565b34801561036357600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610302565b3480156103af57600080fd5b506103d36103be366004613d5c565b60009081526020819052604090206001015490565b604051908152602001610302565b3480156103ed57600080fd5b506104016103fc366004613d8a565b610b39565b6040516103029190815180516001600160681b031682526020908101516001600160981b031690820152610100810160208381015180516040850152908101516060840152506001600160981b03604084015116608083015265ffffffffffff60608401511660a083015266ffffffffffffff60808401511660c08301526bffffffffffffffffffffffff60a08401511660e083015292915050565b3480156104a957600080fd5b506009546103d3565b3480156104be57600080fd5b506104d26104cd366004613d8a565b610c1d565b005b3480156104e057600080fd5b506003546104fd906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610302565b34801561052a57600080fd5b506104d2610539366004613d8a565b610c47565b34801561054a57600080fd5b506103d3610559366004613d5c565b610cd8565b34801561056a57600080fd5b506104d2610579366004613dba565b610dcd565b34801561058a57600080fd5b506104d2610599366004613d8a565b610df9565b3480156105aa57600080fd5b506104d26105b9366004613df2565b610e98565b3480156105ca57600080fd5b506105de6105d9366004613d8a565b610eaa565b6040516103029190613e14565b3480156105f757600080fd5b506104d2610606366004613ea4565b610edf565b34801561061757600080fd5b506104d2610626366004613df2565b611184565b34801561063757600080fd5b506103d3610646366004613d8a565b611260565b34801561065757600080fd5b506104d26112aa565b34801561066c57600080fd5b506106c561067b366004613d5c565b60026020526000908152604090205463ffffffff81169064010000000081046bffffffffffffffffffffffff1690600160801b90046fffffffffffffffffffffffffffffffff1683565b6040805163ffffffff90941684526bffffffffffffffffffffffff90921660208401526fffffffffffffffffffffffffffffffff1690820152606001610302565b34801561071257600080fd5b506104d2610721366004613d5c565b6113e1565b34801561073257600080fd5b506104d2610741366004613df2565b6115e4565b34801561075257600080fd5b506103d3611610565b34801561076757600080fd5b506104d2610776366004613d5c565b611655565b6104d2610789366004613f28565b61172b565b34801561079a57600080fd5b506103d36107a9366004613d8a565b61176d565b3480156107ba57600080fd5b5061038b6107c9366004613df2565b6117e7565b3480156107da57600080fd5b506102f66107e9366004613d8a565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561081e57600080fd5b5060045461083690600160901b900463ffffffff1681565b60405163ffffffff9091168152602001610302565b34801561085757600080fd5b506103d3600081565b34801561086c57600080fd5b5061091e61087b366004613d5c565b6007602090815260009182526040918290208054600182015460028301548551808701875260038501546001600160681b03811682526d010000000000000000000000000090046001600160981b031681870152865180880190975260048501548752600590940154948601949094526001600160a01b03808316957401000000000000000000000000000000000000000090930460ff16949181169391169186565b60405161030296959493929190613f74565b34801561093c57600080fd5b506103d360055481565b34801561095257600080fd5b5060035461096c90600160801b900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610302565b34801561098f57600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109c357600080fd5b506103d36109d2366004613d5c565b6117ff565b3480156109e357600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1757600080fd5b506104d2610a26366004613d8a565b611816565b348015610a3757600080fd5b506104d2610a46366004613ff7565b61183b565b6104d2610a59366004614029565b61186f565b348015610a6a57600080fd5b506104d2610a79366004613d5c565b611894565b348015610a8a57600080fd5b5060045461096c9065ffffffffffff1681565b348015610aa957600080fd5b506103d3610ab8366004613d5c565b6118aa565b348015610ac957600080fd5b506104d2610ad8366004613d5c565b611900565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610b335750610b33826119d3565b92915050565b610b41613cb7565b5060008281526007602090815260408083206001600160a01b038516845260060182529182902082516101008101845281546001600160681b03811660c083019081526d01000000000000000000000000009091046001600160981b0390811660e0840152908252845180860186526001840154815260028401548186015293820193909352600382015492831693810193909352600160981b820465ffffffffffff166060840152600160c81b90910466ffffffffffffff166080830152600401546bffffffffffffffffffffffff1660a082015292915050565b600082815260208190526040902060010154610c3881611a6a565b610c428383611a74565b505050565b6001600160a01b0381163314610cca5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610cd48282611a96565b5050565b6000610ce2611ab8565b6000828152600760205260409020610cf981611af6565b80546001600160a01b03163314610d3c576040517f38c5856200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4583611b5e565b91508115610d8157610d816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611bac565b6000336001600160a01b0316847f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace85604051610dbf91815260200190565b60405180910390a450919050565b610dd5611ab8565b610c4283838360006040518060400160405280600081526020016000815250611c51565b7f6077685936c8169d09204a1d97db12e41713588c38e1d29a61867d3dcee98aff610e2381611a6a565b6000838152600760205260409020610e3a816120eb565b60018101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03851690811790915560405185907f865fdcfd963a9e21f0dbb101fecee79dda3ecc602d0fe55e29268c843f2a3b7c90600090a350505050565b610ea0611ab8565b610cd482826120f2565b60008281526008602090815260408083206001600160a01b03851684529091529020606090610ed8906123bc565b9392505050565b7f6077685936c8169d09204a1d97db12e41713588c38e1d29a61867d3dcee98aff610f0981611a6a565b610f116123c9565b83828114610f4b576040517f568efce200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5660095490565b90506000805b838110156110d7576000898983818110610f7857610f78614056565b9050602002013590506000888884818110610f9557610f95614056565b9050602002016020810190610faa919061407e565b63ffffffff169050848210610fd257604051632d0483c560e21b815260040160405180910390fd5b6000828152600260205260409020805463ffffffff16808303611008576040516324d0659d60e11b815260040160405180910390fd5b61101281846140b1565b61101c9087614125565b955061102782612452565b82547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166401000000006bffffffffffffffffffffffff92909216919091027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff841617825560405183815284907f645b3dc30fbdcc9749f62868ae25c191ff0090b1c21905c2793ec7159856e4389060200160405180910390a284600101945050505050610f5c565b506004546000906110f6908390600160901b900463ffffffff16614125565b90506000811361111957604051632d0483c560e21b815260040160405180910390fd5b63ffffffff81111561113e57604051632d0483c560e21b815260040160405180910390fd5b6004805463ffffffff909216600160901b027fffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff9092169190911790555050505050505050565b61118c611ab8565b6002600655604080517f4920616d20726561647920746f206c6f73652065766572797468696e6720696e60208201527f207468697320706f6f6c2e204c6574206d6520676f2e00000000000000000000918101919091526bffffffffffffffffffffffff193360601b166056820152606a0160405160208183030381529060405280519060200120811461124c576040517f38c5856200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61125782600061248c565b50506001600655565b60008281526007602090815260408083206001600160a01b038516845260068101909252822082611294868484600161269b565b90506112a081836127bb565b9695505050505050565b60006112b581611a6a565b60045465ffffffffffff1642106112f8576040517fecdd1c2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600480547fffffffffffffffffffffffffffff0000000000000000000000000000000000008116600160b01b90930469ffffffffffffffffffff164265ffffffffffff808416829003929092026601000000000000938490046bffffffffffffffffffffffff9081168290031690930265ffffffffffff19169490941793169290921790556113b47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163383611bac565b6040517fac02d07d013ae7c7e3ee940f8df0877c2ab1103bf87ab258ce31665f7111f09290600090a15050565b7f0914bb97ca83e85ef385857d9d418f187ff630589e0c9f44db92976d8e4519cb61140b81611a6a565b6114136123c9565b6005546bffffffffffffffffffffffff83111561145c576040517f35278d1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600460068282829054906101000a90046bffffffffffffffffffffffff166114859190614199565b82546bffffffffffffffffffffffff9182166101009390930a92830291909202199091161790555060045460009065ffffffffffff1642106114ca57508083046114fb565b506003546004544265ffffffffffff9091160369ffffffffffffffffffff600160b01b909204919091160283018190045b8060000361151c576040516324d0659d60e11b815260040160405180910390fd5b6003805475ffffffffffffffffffffffffffffffffffffffffffff16600160b01b69ffffffffffffffffffff84160217905561155882426141c9565b6004805465ffffffffffff191665ffffffffffff929092169190911790556115ab7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087612871565b6040518481527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a150505050565b6115ec611ab8565b610cd482338360006040518060400160405280600081526020016000815250611c51565b6004546000904265ffffffffffff9091161061164157600354600160b01b900469ffffffffffffffffffff16611644565b60005b69ffffffffffffffffffff16905090565b600061166081611a6a565b6004544265ffffffffffff90911611156116a6576040517f085de62500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620100018210156116ca57604051632d0483c560e21b815260040160405180910390fd5b63ffffffff8211156116ef57604051632d0483c560e21b815260040160405180910390fd5b60058290556040518281527fbd6eb9cf4d6e2902587c57e3163aaafdb46e3b3f2086bdfa75c790228930a9d79060200160405180910390a15050565b611733611ab8565b60026006556000611744848461291d565b9050611762833383600261175d368890038801886141f7565b611c51565b505060016006555050565b60008281526007602052604081208161178860038301612b74565b6001600160a01b03851660009081526006840160205260408120919250906117af90612b74565b905080156117db5781816117c2886118aa565b6117cc9190614254565b6117d69190614273565b6112a0565b50600095945050505050565b6000828152600160205260408120610ed89083612bb1565b6000818152600160205260408120610b3390612bbd565b60008281526020819052604090206001015461183181611a6a565b610c428383611a96565b7f6077685936c8169d09204a1d97db12e41713588c38e1d29a61867d3dcee98aff61186581611a6a565b610c428383612bc7565b611877611ab8565b600260065561125782336000600161175d368790038701876141f7565b61189c611ab8565b6118a78160006120f2565b50565b60008181526002602052604081205463ffffffff1680156118f757600454600160901b900463ffffffff16816118de611610565b6118e89190614254565b6118f29190614273565b610ed8565b60009392505050565b611908611ab8565b600260065561191881600161248c565b506001600655565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610cd4576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561197a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610ed8836001600160a01b038416612f5a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610b3357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610b33565b6118a78133612fa9565b611a7e8282611920565b6000828152600160205260409020610c4290826119be565b611aa0828261301c565b6000828152600160205260409020610c42908261309b565b600654600203611af4576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60025b815474010000000000000000000000000000000000000000900460ff166002811115611b2757611b27613f5e565b146118a7576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611b686123c9565b6000828152600260205260409020611b7f81612452565b81547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff1690915592915050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c4b5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610cc1565b50505050565b60008581526007602090815260408083206001600160a01b038816845260068101909252909120611c81826120eb565b6003820180546001600160681b03168015611ca257611ca089856130b0565b505b6000611caf8a8686613116565b9050600080886002811115611cc657611cc6613f5e565b03611d0057506004840180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff92909216919091179055600087611db0565b6002886002811115611d1457611d14613f5e565b03611d5c57611d24868a8961313b565b6004860180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff9490941693909317909255909750600090611db0565b6001886002811115611d7057611d70613f5e565b14611d7d57611d7d614295565b8815611d8b57611d8b614295565b611d9686838961313b565b6004860180546bffffffffffffffffffffffff1916905598505b88600003611dd1576040516324d0659d60e11b815260040160405180910390fd5b600080611dde8b866141c9565b90506001600160681b03811115611e21576040517f35278d1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008b420290508087600001600d8282829054906101000a90046001600160981b03160192506101000a8154816001600160981b0302191690836001600160981b03160217905550818760000160006101000a8154816001600160681b0302191690836001600160681b03160217905550600088600001905060008160000160009054906101000a90046001600160681b03166001600160681b031690508d81019450848260000160006101000a8154816001600160681b0302191690836001600160681b031602179055508282600001600d8282829054906101000a90046001600160981b03160192506101000a8154816001600160981b0302191690836001600160981b031602179055508960030160139054906101000a900465ffffffffffff1665ffffffffffff16420381028a60030160008282829054906101000a90046001600160981b03160192506101000a8154816001600160981b0302191690836001600160981b0316021790555050505050611fee878760038101805465ffffffffffff4216600160981b027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff90911617905560048201546001820155600590910154600290910155565b811561200b57865461200b906001600160a01b0316333085612871565b898b6001600160a01b03168d7f17700ceb1658b18206f427c1578048e87504106b14ec69e9b4586d9a95174a328660405161204891815260200190565b60405180910390a460018701546001600160a01b031680156120dc57604051635d3c15f760e11b8152600481018e90526001600160a01b038d8116602483015260006044830152606482018690526084820184905282169063ba782bee9060a401600060405180830381600087803b1580156120c357600080fd5b505af11580156120d7573d6000803e3d6000fd5b505050505b50505050505050505050505050565b6001611af9565b600082815260076020908152604080832033845260068101909252909120612119826120eb565b61212384836130b0565b5061212e81856134eb565b805481906001600160681b031680851115612175576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612182878686613116565b6004850180546bffffffffffffffffffffffff191690559050851580156121a7575080155b156121c5576040516324d0659d60e11b815260040160405180910390fd5b600385810180546001600160681b038082168a900381166cffffffffffffffffffffffffff19909216821780845587546001600160981b036d0100000000000000000000000000918290048116928290048116428e8b03818102928301959095038316840290961790965594909416909302908316178655918601805465ffffffffffff909316600160981b027fffffffffffffff0000000000000000000000000000000000000000000000000090931692909217909155600486015460018601556005860154600286015581156122cb576122cb6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611bac565b86156122e75785546122e7906001600160a01b03163389611bac565b86336001600160a01b0316897f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace8560405161232491815260200190565b60405180910390a460018601546001600160a01b031680156123b157604051635d3c15f760e11b8152600481018a90523360248201526001604482015260648101849052608481018390526001600160a01b0382169063ba782bee9060a401600060405180830381600087803b15801561239d57600080fd5b505af11580156120dc573d6000803e3d6000fd5b505050505050505050565b60606000610ed88361361f565b6123d161367b565b600380546000906123f59084906fffffffffffffffffffffffffffffffff166142ab565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555042600360106101000a81548165ffffffffffff021916908365ffffffffffff160217905550565b6000806124608360006136a7565b6003548454600160801b6fffffffffffffffffffffffffffffffff928316029116179093555090919050565b6000828152600760209081526040808320338452600681019092529091206124b3826120eb565b6124bd81856134eb565b8054600383019082906001600160681b031660008190036124f1576040516324d0659d60e11b815260040160405180910390fd5b82546001600160681b03808216839003166cffffffffffffffffffffffffff19909116811780855583546001600160981b036d01000000000000000000000000009182900481169282900481169290920390911602178355600087815260076020908152604080832033845260060190915281208181556001810182905560028101829055600381019190915560040180546bffffffffffffffffffffffff1916905585156126095784546125b9906001600160a01b0316336001600160681b038416611bac565b806001600160681b0316336001600160a01b0316887f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace600060405161260091815260200190565b60405180910390a45b60018581015460408051602481018b9052336044820152606481019390935260006084840181905260a48085018290528251808603909101815260c49094019091526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16635d3c15f760e11b17815283516001600160a01b039093169392829182865af150505050505050505050565b60408051808201909152600080825260208201526003830154600160981b900465ffffffffffff166000036126e4575060408051808201909152600080825260208201526127b3565b6001830160048501831561277a57600087815260026020526040812061270a90866136a7565b90506000806127198984613757565b915091506040518060400160405280866000015484876000015461273d91906141c9565b61274791906142d6565b8152602001866001015483876001015461276191906141c9565b61276b91906142d6565b815250955050505050506127b3565b60408051808201909152825482548291612793916142d6565b8152602001836001015483600101546127ac91906142d6565b9052925050505b949350505050565b6003810154600090600160981b900465ffffffffffff1680156128675760038301546020850151600160801b916127fd916001600160981b0390911690614254565b845460208701516001600160681b039091169061281b908590614254565b875161282791906142d6565b6128319190614254565b61283b91906141c9565b6128459190614273565b600484015461286291906bffffffffffffffffffffffff166141c9565b6127b3565b6000949350505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806129165760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610cc1565b5050505050565b6000828152600760209081526040808320338452600681019092528220612943826120eb565b60028201546001600160a01b03161561296f5760405163c1ab6dc160e01b815260040160405180910390fd5b61297985836130b0565b5061298485856137ba565b61298f858383613116565b6004820180546bffffffffffffffffffffffff19169055925060008390036129ca576040516324d0659d60e11b815260040160405180910390fd5b805460038201546001600160681b03909116906129f690600160981b900465ffffffffffff16426142d6565b612a009082614254565b600383018054600090612a1d9084906001600160981b03166142ed565b92506101000a8154816001600160981b0302191690836001600160981b03160217905550612a9a838360038101805465ffffffffffff4216600160981b027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff90911617905560048201546001820155600590910154600290910155565b6000336001600160a01b0316877f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace87604051612ad891815260200190565b60405180910390a460018301546001600160a01b03168015612b6a57604051635d3c15f760e11b8152600481018890523360248201526000604482015260648101869052608481018390526001600160a01b0382169063ba782bee9060a401600060405180830381600087803b158015612b5157600080fd5b505af1158015612b65573d6000803e3d6000fd5b505050505b5050505092915050565b80546000906001600160981b036d010000000000000000000000000082041690612ba7906001600160681b031642614254565b610b3391906142d6565b6000610ed88383613888565b6000610b33825490565b6009805460009182612bd88361430f565b9091555060008181526007602052604090209091506001600160a01b0384161580612c1457506000836002811115612c1257612c12613f5e565b145b15612c4b576040517f4a0bd98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160a01b03851673ffffffffffffffffffffffffffffffffffffffff19821681178355849183917fffffffffffffffffffffff0000000000000000000000000000000000000000009091161774010000000000000000000000000000000000000000836002811115612cc457612cc4613f5e565b02179055506001836002811115612cdd57612cdd613f5e565b03612f1e57836001600160a01b03163b600003612d0d5760405163c1ab6dc160e01b815260040160405180910390fd5b600a546040517fedcc0f900000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301529091169063edcc0f90906024016040805180830381865afa925050508015612d8b575060408051601f3d908101601f19168201909252612d8891810190614329565b60015b15612f1e576040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528281166024830152808816917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa158015612e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e419190614358565b6001600160a01b031603612f1b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612eb75760028301805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055612f1b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603612f1b5760028301805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b50505b6040516001600160a01b0385169083907f3d82013e0d368d05bfb8b953d35bffd6eec15520773228de41146f306a241aec90600090a350505050565b6000818152600183016020526040812054612fa157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b33565b506000610b33565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610cd457612fda816138b2565b612fe58360206138c4565b604051602001612ff69291906143a1565b60408051601f198184030181529082905262461bcd60e51b8252610cc191600401614422565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610cd4576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610ed8836001600160a01b038416613aed565b6000806130bc84611b5e565b90506000806130cb8584613757565b915091506000856004019050828160000160008282546130eb91906141c9565b925050819055508181600101600082825461310691906141c9565b9091555093979650505050505050565b600080613126858585600061269b565b905061313281846127bb565b95945050505050565b825460028401546000916001600160a01b03908116911680613189576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ee9190614478565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000836001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161061326857816132598985614254565b6132639190614273565b61327d565b826132738984614254565b61327d9190614273565b905086602001518111156132bd576040517f4c9b2c5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86518110156132f8576040517f4c9b2c5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415613412577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316146133505760405163c1ab6dc160e01b815260040160405180910390fd5b8660200151341461338d576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156133c857600080fd5b505af11580156133dc573d6000803e3d6000fd5b506133f7935050506001600160a01b03861690508683611bac565b3481810390821461340c5761340c3382613be0565b50613427565b6134276001600160a01b038516338784612871565b61345b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868a611bac565b6040517f6a6278420000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03861690636a627842906024016020604051808303816000875af11580156134ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134de91906144bf565b9998505050505050505050565b6003820154600160c81b900466ffffffffffffff1615613537576040517f0f2e5b6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600860209081526040808320338452909152812061355990612bbd565b90505b8015610c4257600082815260086020908152604080832033845290915281206000199092019161358c9083612bb1565b600084815260086020908152604080832033845290915290209091506135b29082613c3b565b15613619576000818152600760209081526040808320338452600601909152902060030180546019906135f490600160c81b900466ffffffffffffff166144d8565b91906101000a81548166ffffffffffffff021916908366ffffffffffffff1602179055505b5061355c565b60608160000180548060200260200160405190810160405280929190818152602001828054801561366f57602002820191906000526020600020905b81548152602001906001019080831161365b575b50505050509050919050565b600080613686613c47565b60045463ffffffff600160901b909104166401000000009091020492915050565b600080826136c9576003546fffffffffffffffffffffffffffffffff166136e8565b6136d161367b565b6003546fffffffffffffffffffffffffffffffff16015b84546fffffffffffffffffffffffffffffffff9182169250600160801b81049091168203906401000000009063ffffffff16820286546bffffffffffffffffffffffff64010000000090910481169290910491909101935083111561374f5761374f614295565b505092915050565b600080600061376885600301612b74565b905080156137b25780600160801b6137804287614254565b61378a9190614254565b6137949190614273565b9250806137a5600160801b86614254565b6137af9190614273565b91505b509250929050565b600082815260086020908152604080832033845290915290206137dd9082613cab565b156138445760008181526007602090815260408083203384526006019091529020600301805460199061381f90600160c81b900466ffffffffffffff166144fb565b91906101000a81548166ffffffffffffff021916908366ffffffffffffff1602179055505b60008281526008602090815260408083203384529091529020600a9061386990612bbd565b1115610cd457604051632d0483c560e21b815260040160405180910390fd5b600082600001828154811061389f5761389f614056565b9060005260206000200154905092915050565b6060610b336001600160a01b03831660145b606060006138d3836002614254565b6138de9060026141c9565b67ffffffffffffffff8111156138f6576138f66141e1565b6040519080825280601f01601f191660200182016040528015613920576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061395757613957614056565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106139ba576139ba614056565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006139f6846002614254565b613a019060016141c9565b90505b6001811115613a9e577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613a4257613a42614056565b1a60f81b828281518110613a5857613a58614056565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613a9781614521565b9050613a04565b508315610ed85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cc1565b60008181526001830160205260408120548015613bd6576000613b116001836142d6565b8554909150600090613b25906001906142d6565b9050818114613b8a576000866000018281548110613b4557613b45614056565b9060005260206000200154905080876000018481548110613b6857613b68614056565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613b9b57613b9b614538565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b33565b6000915050610b33565b600080600080600085875af1905080610c425760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610cc1565b6000610ed88383613aed565b60045460009065ffffffffffff1681428210613c635742613c65565b815b600354909150600160801b900465ffffffffffff1680821115613ca157600354600160b01b900469ffffffffffffffffffff1691030292915050565b6000935050505090565b6000610ed88383612f5a565b604080516101008101909152600060c0820181815260e083019190915281908152602001613cf8604051806040016040528060008152602001600081525090565b8152600060208201819052604082018190526060820181905260809091015290565b600060208284031215613d2c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ed857600080fd5b600060208284031215613d6e57600080fd5b5035919050565b6001600160a01b03811681146118a757600080fd5b60008060408385031215613d9d57600080fd5b823591506020830135613daf81613d75565b809150509250929050565b600080600060608486031215613dcf57600080fd5b833592506020840135613de181613d75565b929592945050506040919091013590565b60008060408385031215613e0557600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015613e4c57835183529284019291840191600101613e30565b50909695505050505050565b60008083601f840112613e6a57600080fd5b50813567ffffffffffffffff811115613e8257600080fd5b6020830191508360208260051b8501011115613e9d57600080fd5b9250929050565b60008060008060408587031215613eba57600080fd5b843567ffffffffffffffff80821115613ed257600080fd5b613ede88838901613e58565b90965094506020870135915080821115613ef757600080fd5b50613f0487828801613e58565b95989497509550505050565b600060408284031215613f2257600080fd5b50919050565b600080600060808486031215613f3d57600080fd5b8335925060208401359150613f558560408601613f10565b90509250925092565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03878116825261010082019060038810613fa557634e487b7160e01b600052602160045260246000fd5b602083810198909852958616604083015293909416606085015281516001600160681b03166080850152908401516001600160981b031660a0840152805160c08401529092015160e090910152919050565b6000806040838503121561400a57600080fd5b823561401581613d75565b9150602083013560038110613daf57600080fd5b6000806060838503121561403c57600080fd5b8235915061404d8460208501613f10565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b63ffffffff811681146118a757600080fd5b60006020828403121561409057600080fd5b8135610ed88161406c565b634e487b7160e01b600052601160045260246000fd5b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156140eb576140eb61409b565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561411f5761411f61409b565b50500390565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561415f5761415f61409b565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156141935761419361409b565b50500190565b60006bffffffffffffffffffffffff8083168185168083038211156141c0576141c061409b565b01949350505050565b600082198211156141dc576141dc61409b565b500190565b634e487b7160e01b600052604160045260246000fd5b60006040828403121561420957600080fd5b6040516040810181811067ffffffffffffffff8211171561423a57634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b600081600019048311821515161561426e5761426e61409b565b500290565b60008261429057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156141c0576141c061409b565b6000828210156142e8576142e861409b565b500390565b60006001600160981b038083168185168083038211156141c0576141c061409b565b600060001982036143225761432261409b565b5060010190565b6000806040838503121561433c57600080fd5b825161434781613d75565b6020840151909250613daf81613d75565b60006020828403121561436a57600080fd5b8151610ed881613d75565b60005b83811015614390578181015183820152602001614378565b83811115611c4b5750506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516143d9816017850160208801614375565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614416816028840160208801614375565b01602801949350505050565b6020815260008251806020840152614441816040850160208701614375565b601f01601f19169190910160400192915050565b80516dffffffffffffffffffffffffffff8116811461447357600080fd5b919050565b60008060006060848603121561448d57600080fd5b61449684614455565b92506144a460208501614455565b915060408401516144b48161406c565b809150509250925092565b6000602082840312156144d157600080fd5b5051919050565b600066ffffffffffffff8216806144f1576144f161409b565b6000190192915050565b600066ffffffffffffff8083168181036145175761451761409b565b6001019392505050565b6000816145305761453061409b565b506000190190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220c54ca783d2ac4b2f2501d59ab077dc4f5ec2d943421f01e891bbcadf49fa934f64736f6c634300080f0033608060405234801561001057600080fd5b506101fa806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063edcc0f9014610030575b600080fd5b61004361003e366004610183565b610074565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520160405180910390f35b6000808273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e691906101a7565b8373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015591906101a7565b91509150915091565b73ffffffffffffffffffffffffffffffffffffffff8116811461018057600080fd5b50565b60006020828403121561019557600080fd5b81356101a08161015e565b9392505050565b6000602082840312156101b957600080fd5b81516101a08161015e56fea264697066735822122014fa7d9d3ee9fa5ab29bc69556bfcd9bededc44946d2ae245867adab447317f464736f6c634300080f0033",
  "deployedBytecode": "0x6080604052600436106102d15760003560e01c80637b0a47ee11610179578063c0463711116100d6578063d61f06801161008a578063ebe2b12b11610064578063ebe2b12b14610a7e578063f2d1e1cd14610a9d578063f851844b14610abd57600080fd5b8063d61f068014610a2b578063d97f8ed614610a4b578063ddc6326214610a5e57600080fd5b8063ca15c873116100bb578063ca15c873146109b7578063d1af0c7d146109d7578063d547741f14610a0b57600080fd5b8063c046371114610946578063c45a01551461098357600080fd5b806391d148541161012d578063a217fddf11610112578063a217fddf1461084b578063ac4afa3814610860578063b470aade1461093057600080fd5b806391d14854146107ce57806396c82e571461081257600080fd5b806380754b281161015e57806380754b281461077b57806382f084d31461078e5780639010d07c146107ae57600080fd5b80637b0a47ee146107465780637c2d6e011461075b57600080fd5b806343d5599e11610232578063562d12d7116101e65780636bc9f703116101c05780636bc9f7031461066057806374de4ec4146107065780637b0472f01461072657600080fd5b8063562d12d71461060b57806359b02eb31461062b5780635faa65ff1461064b57600080fd5b8063441a3e7011610217578063441a3e701461059e57806347df36c0146105be57806354f8c475146105eb57600080fd5b806343d5599e1461055e57806343de32071461057e57600080fd5b80632716ae66116102895780633228dd591161026e5780633228dd59146104d457806336568abe1461051e578063379607f51461053e57600080fd5b80632716ae661461049d5780632f2ff15d146104b257600080fd5b806317fcb39b116102ba57806317fcb39b14610357578063248a9ca3146103a3578063257664a4146103e157600080fd5b806301ffc9a7146102d6578063098b88581461030b575b600080fd5b3480156102e257600080fd5b506102f66102f1366004613d1a565b610add565b60405190151581526020015b60405180910390f35b34801561031757600080fd5b5060045461033a90660100000000000090046bffffffffffffffffffffffff1681565b6040516bffffffffffffffffffffffff9091168152602001610302565b34801561036357600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610302565b3480156103af57600080fd5b506103d36103be366004613d5c565b60009081526020819052604090206001015490565b604051908152602001610302565b3480156103ed57600080fd5b506104016103fc366004613d8a565b610b39565b6040516103029190815180516001600160681b031682526020908101516001600160981b031690820152610100810160208381015180516040850152908101516060840152506001600160981b03604084015116608083015265ffffffffffff60608401511660a083015266ffffffffffffff60808401511660c08301526bffffffffffffffffffffffff60a08401511660e083015292915050565b3480156104a957600080fd5b506009546103d3565b3480156104be57600080fd5b506104d26104cd366004613d8a565b610c1d565b005b3480156104e057600080fd5b506003546104fd906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610302565b34801561052a57600080fd5b506104d2610539366004613d8a565b610c47565b34801561054a57600080fd5b506103d3610559366004613d5c565b610cd8565b34801561056a57600080fd5b506104d2610579366004613dba565b610dcd565b34801561058a57600080fd5b506104d2610599366004613d8a565b610df9565b3480156105aa57600080fd5b506104d26105b9366004613df2565b610e98565b3480156105ca57600080fd5b506105de6105d9366004613d8a565b610eaa565b6040516103029190613e14565b3480156105f757600080fd5b506104d2610606366004613ea4565b610edf565b34801561061757600080fd5b506104d2610626366004613df2565b611184565b34801561063757600080fd5b506103d3610646366004613d8a565b611260565b34801561065757600080fd5b506104d26112aa565b34801561066c57600080fd5b506106c561067b366004613d5c565b60026020526000908152604090205463ffffffff81169064010000000081046bffffffffffffffffffffffff1690600160801b90046fffffffffffffffffffffffffffffffff1683565b6040805163ffffffff90941684526bffffffffffffffffffffffff90921660208401526fffffffffffffffffffffffffffffffff1690820152606001610302565b34801561071257600080fd5b506104d2610721366004613d5c565b6113e1565b34801561073257600080fd5b506104d2610741366004613df2565b6115e4565b34801561075257600080fd5b506103d3611610565b34801561076757600080fd5b506104d2610776366004613d5c565b611655565b6104d2610789366004613f28565b61172b565b34801561079a57600080fd5b506103d36107a9366004613d8a565b61176d565b3480156107ba57600080fd5b5061038b6107c9366004613df2565b6117e7565b3480156107da57600080fd5b506102f66107e9366004613d8a565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561081e57600080fd5b5060045461083690600160901b900463ffffffff1681565b60405163ffffffff9091168152602001610302565b34801561085757600080fd5b506103d3600081565b34801561086c57600080fd5b5061091e61087b366004613d5c565b6007602090815260009182526040918290208054600182015460028301548551808701875260038501546001600160681b03811682526d010000000000000000000000000090046001600160981b031681870152865180880190975260048501548752600590940154948601949094526001600160a01b03808316957401000000000000000000000000000000000000000090930460ff16949181169391169186565b60405161030296959493929190613f74565b34801561093c57600080fd5b506103d360055481565b34801561095257600080fd5b5060035461096c90600160801b900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610302565b34801561098f57600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109c357600080fd5b506103d36109d2366004613d5c565b6117ff565b3480156109e357600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1757600080fd5b506104d2610a26366004613d8a565b611816565b348015610a3757600080fd5b506104d2610a46366004613ff7565b61183b565b6104d2610a59366004614029565b61186f565b348015610a6a57600080fd5b506104d2610a79366004613d5c565b611894565b348015610a8a57600080fd5b5060045461096c9065ffffffffffff1681565b348015610aa957600080fd5b506103d3610ab8366004613d5c565b6118aa565b348015610ac957600080fd5b506104d2610ad8366004613d5c565b611900565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610b335750610b33826119d3565b92915050565b610b41613cb7565b5060008281526007602090815260408083206001600160a01b038516845260060182529182902082516101008101845281546001600160681b03811660c083019081526d01000000000000000000000000009091046001600160981b0390811660e0840152908252845180860186526001840154815260028401548186015293820193909352600382015492831693810193909352600160981b820465ffffffffffff166060840152600160c81b90910466ffffffffffffff166080830152600401546bffffffffffffffffffffffff1660a082015292915050565b600082815260208190526040902060010154610c3881611a6a565b610c428383611a74565b505050565b6001600160a01b0381163314610cca5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610cd48282611a96565b5050565b6000610ce2611ab8565b6000828152600760205260409020610cf981611af6565b80546001600160a01b03163314610d3c576040517f38c5856200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4583611b5e565b91508115610d8157610d816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611bac565b6000336001600160a01b0316847f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace85604051610dbf91815260200190565b60405180910390a450919050565b610dd5611ab8565b610c4283838360006040518060400160405280600081526020016000815250611c51565b7f6077685936c8169d09204a1d97db12e41713588c38e1d29a61867d3dcee98aff610e2381611a6a565b6000838152600760205260409020610e3a816120eb565b60018101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03851690811790915560405185907f865fdcfd963a9e21f0dbb101fecee79dda3ecc602d0fe55e29268c843f2a3b7c90600090a350505050565b610ea0611ab8565b610cd482826120f2565b60008281526008602090815260408083206001600160a01b03851684529091529020606090610ed8906123bc565b9392505050565b7f6077685936c8169d09204a1d97db12e41713588c38e1d29a61867d3dcee98aff610f0981611a6a565b610f116123c9565b83828114610f4b576040517f568efce200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5660095490565b90506000805b838110156110d7576000898983818110610f7857610f78614056565b9050602002013590506000888884818110610f9557610f95614056565b9050602002016020810190610faa919061407e565b63ffffffff169050848210610fd257604051632d0483c560e21b815260040160405180910390fd5b6000828152600260205260409020805463ffffffff16808303611008576040516324d0659d60e11b815260040160405180910390fd5b61101281846140b1565b61101c9087614125565b955061102782612452565b82547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166401000000006bffffffffffffffffffffffff92909216919091027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff841617825560405183815284907f645b3dc30fbdcc9749f62868ae25c191ff0090b1c21905c2793ec7159856e4389060200160405180910390a284600101945050505050610f5c565b506004546000906110f6908390600160901b900463ffffffff16614125565b90506000811361111957604051632d0483c560e21b815260040160405180910390fd5b63ffffffff81111561113e57604051632d0483c560e21b815260040160405180910390fd5b6004805463ffffffff909216600160901b027fffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff9092169190911790555050505050505050565b61118c611ab8565b6002600655604080517f4920616d20726561647920746f206c6f73652065766572797468696e6720696e60208201527f207468697320706f6f6c2e204c6574206d6520676f2e00000000000000000000918101919091526bffffffffffffffffffffffff193360601b166056820152606a0160405160208183030381529060405280519060200120811461124c576040517f38c5856200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61125782600061248c565b50506001600655565b60008281526007602090815260408083206001600160a01b038516845260068101909252822082611294868484600161269b565b90506112a081836127bb565b9695505050505050565b60006112b581611a6a565b60045465ffffffffffff1642106112f8576040517fecdd1c2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600480547fffffffffffffffffffffffffffff0000000000000000000000000000000000008116600160b01b90930469ffffffffffffffffffff164265ffffffffffff808416829003929092026601000000000000938490046bffffffffffffffffffffffff9081168290031690930265ffffffffffff19169490941793169290921790556113b47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163383611bac565b6040517fac02d07d013ae7c7e3ee940f8df0877c2ab1103bf87ab258ce31665f7111f09290600090a15050565b7f0914bb97ca83e85ef385857d9d418f187ff630589e0c9f44db92976d8e4519cb61140b81611a6a565b6114136123c9565b6005546bffffffffffffffffffffffff83111561145c576040517f35278d1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600460068282829054906101000a90046bffffffffffffffffffffffff166114859190614199565b82546bffffffffffffffffffffffff9182166101009390930a92830291909202199091161790555060045460009065ffffffffffff1642106114ca57508083046114fb565b506003546004544265ffffffffffff9091160369ffffffffffffffffffff600160b01b909204919091160283018190045b8060000361151c576040516324d0659d60e11b815260040160405180910390fd5b6003805475ffffffffffffffffffffffffffffffffffffffffffff16600160b01b69ffffffffffffffffffff84160217905561155882426141c9565b6004805465ffffffffffff191665ffffffffffff929092169190911790556115ab7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087612871565b6040518481527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a150505050565b6115ec611ab8565b610cd482338360006040518060400160405280600081526020016000815250611c51565b6004546000904265ffffffffffff9091161061164157600354600160b01b900469ffffffffffffffffffff16611644565b60005b69ffffffffffffffffffff16905090565b600061166081611a6a565b6004544265ffffffffffff90911611156116a6576040517f085de62500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620100018210156116ca57604051632d0483c560e21b815260040160405180910390fd5b63ffffffff8211156116ef57604051632d0483c560e21b815260040160405180910390fd5b60058290556040518281527fbd6eb9cf4d6e2902587c57e3163aaafdb46e3b3f2086bdfa75c790228930a9d79060200160405180910390a15050565b611733611ab8565b60026006556000611744848461291d565b9050611762833383600261175d368890038801886141f7565b611c51565b505060016006555050565b60008281526007602052604081208161178860038301612b74565b6001600160a01b03851660009081526006840160205260408120919250906117af90612b74565b905080156117db5781816117c2886118aa565b6117cc9190614254565b6117d69190614273565b6112a0565b50600095945050505050565b6000828152600160205260408120610ed89083612bb1565b6000818152600160205260408120610b3390612bbd565b60008281526020819052604090206001015461183181611a6a565b610c428383611a96565b7f6077685936c8169d09204a1d97db12e41713588c38e1d29a61867d3dcee98aff61186581611a6a565b610c428383612bc7565b611877611ab8565b600260065561125782336000600161175d368790038701876141f7565b61189c611ab8565b6118a78160006120f2565b50565b60008181526002602052604081205463ffffffff1680156118f757600454600160901b900463ffffffff16816118de611610565b6118e89190614254565b6118f29190614273565b610ed8565b60009392505050565b611908611ab8565b600260065561191881600161248c565b506001600655565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610cd4576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561197a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610ed8836001600160a01b038416612f5a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610b3357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610b33565b6118a78133612fa9565b611a7e8282611920565b6000828152600160205260409020610c4290826119be565b611aa0828261301c565b6000828152600160205260409020610c42908261309b565b600654600203611af4576040517fab143c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60025b815474010000000000000000000000000000000000000000900460ff166002811115611b2757611b27613f5e565b146118a7576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611b686123c9565b6000828152600260205260409020611b7f81612452565b81547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff1690915592915050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611c4b5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610cc1565b50505050565b60008581526007602090815260408083206001600160a01b038816845260068101909252909120611c81826120eb565b6003820180546001600160681b03168015611ca257611ca089856130b0565b505b6000611caf8a8686613116565b9050600080886002811115611cc657611cc6613f5e565b03611d0057506004840180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff92909216919091179055600087611db0565b6002886002811115611d1457611d14613f5e565b03611d5c57611d24868a8961313b565b6004860180546bffffffffffffffffffffffff19166bffffffffffffffffffffffff9490941693909317909255909750600090611db0565b6001886002811115611d7057611d70613f5e565b14611d7d57611d7d614295565b8815611d8b57611d8b614295565b611d9686838961313b565b6004860180546bffffffffffffffffffffffff1916905598505b88600003611dd1576040516324d0659d60e11b815260040160405180910390fd5b600080611dde8b866141c9565b90506001600160681b03811115611e21576040517f35278d1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008b420290508087600001600d8282829054906101000a90046001600160981b03160192506101000a8154816001600160981b0302191690836001600160981b03160217905550818760000160006101000a8154816001600160681b0302191690836001600160681b03160217905550600088600001905060008160000160009054906101000a90046001600160681b03166001600160681b031690508d81019450848260000160006101000a8154816001600160681b0302191690836001600160681b031602179055508282600001600d8282829054906101000a90046001600160981b03160192506101000a8154816001600160981b0302191690836001600160981b031602179055508960030160139054906101000a900465ffffffffffff1665ffffffffffff16420381028a60030160008282829054906101000a90046001600160981b03160192506101000a8154816001600160981b0302191690836001600160981b0316021790555050505050611fee878760038101805465ffffffffffff4216600160981b027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff90911617905560048201546001820155600590910154600290910155565b811561200b57865461200b906001600160a01b0316333085612871565b898b6001600160a01b03168d7f17700ceb1658b18206f427c1578048e87504106b14ec69e9b4586d9a95174a328660405161204891815260200190565b60405180910390a460018701546001600160a01b031680156120dc57604051635d3c15f760e11b8152600481018e90526001600160a01b038d8116602483015260006044830152606482018690526084820184905282169063ba782bee9060a401600060405180830381600087803b1580156120c357600080fd5b505af11580156120d7573d6000803e3d6000fd5b505050505b50505050505050505050505050565b6001611af9565b600082815260076020908152604080832033845260068101909252909120612119826120eb565b61212384836130b0565b5061212e81856134eb565b805481906001600160681b031680851115612175576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612182878686613116565b6004850180546bffffffffffffffffffffffff191690559050851580156121a7575080155b156121c5576040516324d0659d60e11b815260040160405180910390fd5b600385810180546001600160681b038082168a900381166cffffffffffffffffffffffffff19909216821780845587546001600160981b036d0100000000000000000000000000918290048116928290048116428e8b03818102928301959095038316840290961790965594909416909302908316178655918601805465ffffffffffff909316600160981b027fffffffffffffff0000000000000000000000000000000000000000000000000090931692909217909155600486015460018601556005860154600286015581156122cb576122cb6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611bac565b86156122e75785546122e7906001600160a01b03163389611bac565b86336001600160a01b0316897f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace8560405161232491815260200190565b60405180910390a460018601546001600160a01b031680156123b157604051635d3c15f760e11b8152600481018a90523360248201526001604482015260648101849052608481018390526001600160a01b0382169063ba782bee9060a401600060405180830381600087803b15801561239d57600080fd5b505af11580156120dc573d6000803e3d6000fd5b505050505050505050565b60606000610ed88361361f565b6123d161367b565b600380546000906123f59084906fffffffffffffffffffffffffffffffff166142ab565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555042600360106101000a81548165ffffffffffff021916908365ffffffffffff160217905550565b6000806124608360006136a7565b6003548454600160801b6fffffffffffffffffffffffffffffffff928316029116179093555090919050565b6000828152600760209081526040808320338452600681019092529091206124b3826120eb565b6124bd81856134eb565b8054600383019082906001600160681b031660008190036124f1576040516324d0659d60e11b815260040160405180910390fd5b82546001600160681b03808216839003166cffffffffffffffffffffffffff19909116811780855583546001600160981b036d01000000000000000000000000009182900481169282900481169290920390911602178355600087815260076020908152604080832033845260060190915281208181556001810182905560028101829055600381019190915560040180546bffffffffffffffffffffffff1916905585156126095784546125b9906001600160a01b0316336001600160681b038416611bac565b806001600160681b0316336001600160a01b0316887f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace600060405161260091815260200190565b60405180910390a45b60018581015460408051602481018b9052336044820152606481019390935260006084840181905260a48085018290528251808603909101815260c49094019091526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16635d3c15f760e11b17815283516001600160a01b039093169392829182865af150505050505050505050565b60408051808201909152600080825260208201526003830154600160981b900465ffffffffffff166000036126e4575060408051808201909152600080825260208201526127b3565b6001830160048501831561277a57600087815260026020526040812061270a90866136a7565b90506000806127198984613757565b915091506040518060400160405280866000015484876000015461273d91906141c9565b61274791906142d6565b8152602001866001015483876001015461276191906141c9565b61276b91906142d6565b815250955050505050506127b3565b60408051808201909152825482548291612793916142d6565b8152602001836001015483600101546127ac91906142d6565b9052925050505b949350505050565b6003810154600090600160981b900465ffffffffffff1680156128675760038301546020850151600160801b916127fd916001600160981b0390911690614254565b845460208701516001600160681b039091169061281b908590614254565b875161282791906142d6565b6128319190614254565b61283b91906141c9565b6128459190614273565b600484015461286291906bffffffffffffffffffffffff166141c9565b6127b3565b6000949350505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806129165760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610cc1565b5050505050565b6000828152600760209081526040808320338452600681019092528220612943826120eb565b60028201546001600160a01b03161561296f5760405163c1ab6dc160e01b815260040160405180910390fd5b61297985836130b0565b5061298485856137ba565b61298f858383613116565b6004820180546bffffffffffffffffffffffff19169055925060008390036129ca576040516324d0659d60e11b815260040160405180910390fd5b805460038201546001600160681b03909116906129f690600160981b900465ffffffffffff16426142d6565b612a009082614254565b600383018054600090612a1d9084906001600160981b03166142ed565b92506101000a8154816001600160981b0302191690836001600160981b03160217905550612a9a838360038101805465ffffffffffff4216600160981b027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff90911617905560048201546001820155600590910154600290910155565b6000336001600160a01b0316877f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace87604051612ad891815260200190565b60405180910390a460018301546001600160a01b03168015612b6a57604051635d3c15f760e11b8152600481018890523360248201526000604482015260648101869052608481018390526001600160a01b0382169063ba782bee9060a401600060405180830381600087803b158015612b5157600080fd5b505af1158015612b65573d6000803e3d6000fd5b505050505b5050505092915050565b80546000906001600160981b036d010000000000000000000000000082041690612ba7906001600160681b031642614254565b610b3391906142d6565b6000610ed88383613888565b6000610b33825490565b6009805460009182612bd88361430f565b9091555060008181526007602052604090209091506001600160a01b0384161580612c1457506000836002811115612c1257612c12613f5e565b145b15612c4b576040517f4a0bd98600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160a01b03851673ffffffffffffffffffffffffffffffffffffffff19821681178355849183917fffffffffffffffffffffff0000000000000000000000000000000000000000009091161774010000000000000000000000000000000000000000836002811115612cc457612cc4613f5e565b02179055506001836002811115612cdd57612cdd613f5e565b03612f1e57836001600160a01b03163b600003612d0d5760405163c1ab6dc160e01b815260040160405180910390fd5b600a546040517fedcc0f900000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301529091169063edcc0f90906024016040805180830381865afa925050508015612d8b575060408051601f3d908101601f19168201909252612d8891810190614329565b60015b15612f1e576040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528281166024830152808816917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa158015612e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e419190614358565b6001600160a01b031603612f1b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612eb75760028301805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055612f1b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603612f1b5760028301805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b50505b6040516001600160a01b0385169083907f3d82013e0d368d05bfb8b953d35bffd6eec15520773228de41146f306a241aec90600090a350505050565b6000818152600183016020526040812054612fa157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b33565b506000610b33565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610cd457612fda816138b2565b612fe58360206138c4565b604051602001612ff69291906143a1565b60408051601f198184030181529082905262461bcd60e51b8252610cc191600401614422565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610cd4576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610ed8836001600160a01b038416613aed565b6000806130bc84611b5e565b90506000806130cb8584613757565b915091506000856004019050828160000160008282546130eb91906141c9565b925050819055508181600101600082825461310691906141c9565b9091555093979650505050505050565b600080613126858585600061269b565b905061313281846127bb565b95945050505050565b825460028401546000916001600160a01b03908116911680613189576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ee9190614478565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000836001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161061326857816132598985614254565b6132639190614273565b61327d565b826132738984614254565b61327d9190614273565b905086602001518111156132bd576040517f4c9b2c5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86518110156132f8576040517f4c9b2c5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415613412577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316146133505760405163c1ab6dc160e01b815260040160405180910390fd5b8660200151341461338d576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156133c857600080fd5b505af11580156133dc573d6000803e3d6000fd5b506133f7935050506001600160a01b03861690508683611bac565b3481810390821461340c5761340c3382613be0565b50613427565b6134276001600160a01b038516338784612871565b61345b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868a611bac565b6040517f6a6278420000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03861690636a627842906024016020604051808303816000875af11580156134ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134de91906144bf565b9998505050505050505050565b6003820154600160c81b900466ffffffffffffff1615613537576040517f0f2e5b6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600860209081526040808320338452909152812061355990612bbd565b90505b8015610c4257600082815260086020908152604080832033845290915281206000199092019161358c9083612bb1565b600084815260086020908152604080832033845290915290209091506135b29082613c3b565b15613619576000818152600760209081526040808320338452600601909152902060030180546019906135f490600160c81b900466ffffffffffffff166144d8565b91906101000a81548166ffffffffffffff021916908366ffffffffffffff1602179055505b5061355c565b60608160000180548060200260200160405190810160405280929190818152602001828054801561366f57602002820191906000526020600020905b81548152602001906001019080831161365b575b50505050509050919050565b600080613686613c47565b60045463ffffffff600160901b909104166401000000009091020492915050565b600080826136c9576003546fffffffffffffffffffffffffffffffff166136e8565b6136d161367b565b6003546fffffffffffffffffffffffffffffffff16015b84546fffffffffffffffffffffffffffffffff9182169250600160801b81049091168203906401000000009063ffffffff16820286546bffffffffffffffffffffffff64010000000090910481169290910491909101935083111561374f5761374f614295565b505092915050565b600080600061376885600301612b74565b905080156137b25780600160801b6137804287614254565b61378a9190614254565b6137949190614273565b9250806137a5600160801b86614254565b6137af9190614273565b91505b509250929050565b600082815260086020908152604080832033845290915290206137dd9082613cab565b156138445760008181526007602090815260408083203384526006019091529020600301805460199061381f90600160c81b900466ffffffffffffff166144fb565b91906101000a81548166ffffffffffffff021916908366ffffffffffffff1602179055505b60008281526008602090815260408083203384529091529020600a9061386990612bbd565b1115610cd457604051632d0483c560e21b815260040160405180910390fd5b600082600001828154811061389f5761389f614056565b9060005260206000200154905092915050565b6060610b336001600160a01b03831660145b606060006138d3836002614254565b6138de9060026141c9565b67ffffffffffffffff8111156138f6576138f66141e1565b6040519080825280601f01601f191660200182016040528015613920576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061395757613957614056565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106139ba576139ba614056565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006139f6846002614254565b613a019060016141c9565b90505b6001811115613a9e577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613a4257613a42614056565b1a60f81b828281518110613a5857613a58614056565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613a9781614521565b9050613a04565b508315610ed85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cc1565b60008181526001830160205260408120548015613bd6576000613b116001836142d6565b8554909150600090613b25906001906142d6565b9050818114613b8a576000866000018281548110613b4557613b45614056565b9060005260206000200154905080876000018481548110613b6857613b68614056565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613b9b57613b9b614538565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b33565b6000915050610b33565b600080600080600085875af1905080610c425760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610cc1565b6000610ed88383613aed565b60045460009065ffffffffffff1681428210613c635742613c65565b815b600354909150600160801b900465ffffffffffff1680821115613ca157600354600160b01b900469ffffffffffffffffffff1691030292915050565b6000935050505090565b6000610ed88383612f5a565b604080516101008101909152600060c0820181815260e083019190915281908152602001613cf8604051806040016040528060008152602001600081525090565b8152600060208201819052604082018190526060820181905260809091015290565b600060208284031215613d2c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ed857600080fd5b600060208284031215613d6e57600080fd5b5035919050565b6001600160a01b03811681146118a757600080fd5b60008060408385031215613d9d57600080fd5b823591506020830135613daf81613d75565b809150509250929050565b600080600060608486031215613dcf57600080fd5b833592506020840135613de181613d75565b929592945050506040919091013590565b60008060408385031215613e0557600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015613e4c57835183529284019291840191600101613e30565b50909695505050505050565b60008083601f840112613e6a57600080fd5b50813567ffffffffffffffff811115613e8257600080fd5b6020830191508360208260051b8501011115613e9d57600080fd5b9250929050565b60008060008060408587031215613eba57600080fd5b843567ffffffffffffffff80821115613ed257600080fd5b613ede88838901613e58565b90965094506020870135915080821115613ef757600080fd5b50613f0487828801613e58565b95989497509550505050565b600060408284031215613f2257600080fd5b50919050565b600080600060808486031215613f3d57600080fd5b8335925060208401359150613f558560408601613f10565b90509250925092565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03878116825261010082019060038810613fa557634e487b7160e01b600052602160045260246000fd5b602083810198909852958616604083015293909416606085015281516001600160681b03166080850152908401516001600160981b031660a0840152805160c08401529092015160e090910152919050565b6000806040838503121561400a57600080fd5b823561401581613d75565b9150602083013560038110613daf57600080fd5b6000806060838503121561403c57600080fd5b8235915061404d8460208501613f10565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b63ffffffff811681146118a757600080fd5b60006020828403121561409057600080fd5b8135610ed88161406c565b634e487b7160e01b600052601160045260246000fd5b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156140eb576140eb61409b565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561411f5761411f61409b565b50500390565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561415f5761415f61409b565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156141935761419361409b565b50500190565b60006bffffffffffffffffffffffff8083168185168083038211156141c0576141c061409b565b01949350505050565b600082198211156141dc576141dc61409b565b500190565b634e487b7160e01b600052604160045260246000fd5b60006040828403121561420957600080fd5b6040516040810181811067ffffffffffffffff8211171561423a57634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b600081600019048311821515161561426e5761426e61409b565b500290565b60008261429057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156141c0576141c061409b565b6000828210156142e8576142e861409b565b500390565b60006001600160981b038083168185168083038211156141c0576141c061409b565b600060001982036143225761432261409b565b5060010190565b6000806040838503121561433c57600080fd5b825161434781613d75565b6020840151909250613daf81613d75565b60006020828403121561436a57600080fd5b8151610ed881613d75565b60005b83811015614390578181015183820152602001614378565b83811115611c4b5750506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516143d9816017850160208801614375565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614416816028840160208801614375565b01602801949350505050565b6020815260008251806020840152614441816040850160208701614375565b601f01601f19169190910160400192915050565b80516dffffffffffffffffffffffffffff8116811461447357600080fd5b919050565b60008060006060848603121561448d57600080fd5b61449684614455565b92506144a460208501614455565b915060408401516144b48161406c565b809150509250925092565b6000602082840312156144d157600080fd5b5051919050565b600066ffffffffffffff8216806144f1576144f161409b565b6000190192915050565b600066ffffffffffffff8083168181036145175761451761409b565b6001019392505050565b6000816145305761453061409b565b506000190190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220c54ca783d2ac4b2f2501d59ab077dc4f5ec2d943421f01e891bbcadf49fa934f64736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
