{
  "_format": "hh-sol-artifact-1",
  "contractName": "PeriodicPrizeStrategyHarness",
  "sourceName": "contracts/test/PeriodicPrizeStrategyHarness.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract BeforeAwardListenerInterface",
          "name": "beforeAwardListener",
          "type": "address"
        }
      ],
      "name": "BeforeAwardListenerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20Upgradeable",
          "name": "externalErc20",
          "type": "address"
        }
      ],
      "name": "ExternalErc20AwardAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20Upgradeable",
          "name": "externalErc20Award",
          "type": "address"
        }
      ],
      "name": "ExternalErc20AwardRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC721Upgradeable",
          "name": "externalErc721",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "ExternalErc721AwardAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC721Upgradeable",
          "name": "externalErc721Award",
          "type": "address"
        }
      ],
      "name": "ExternalErc721AwardRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "prizePeriodStart",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "prizePeriodSeconds",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "contract PrizePool",
          "name": "prizePool",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract TicketInterface",
          "name": "ticket",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20Upgradeable",
          "name": "sponsorship",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract RNGInterface",
          "name": "rng",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20Upgradeable[]",
          "name": "externalErc20Awards",
          "type": "address[]"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract PeriodicPrizeStrategyListenerInterface",
          "name": "periodicPrizeStrategyListener",
          "type": "address"
        }
      ],
      "name": "PeriodicPrizeStrategyListenerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "prizePeriodSeconds",
          "type": "uint256"
        }
      ],
      "name": "PrizePeriodSecondsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "prizePool",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "rngRequestId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "rngLockBlock",
          "type": "uint32"
        }
      ],
      "name": "PrizePoolAwardCancelled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "prizePool",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "rngRequestId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "rngLockBlock",
          "type": "uint32"
        }
      ],
      "name": "PrizePoolAwardStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "randomNumber",
          "type": "uint256"
        }
      ],
      "name": "PrizePoolAwarded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "prizePeriodStartedAt",
          "type": "uint256"
        }
      ],
      "name": "PrizePoolOpened",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "RngRequestFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "rngRequestTimeout",
          "type": "uint32"
        }
      ],
      "name": "RngRequestTimeoutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract RNGInterface",
          "name": "rngService",
          "type": "address"
        }
      ],
      "name": "RngServiceUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract TokenListenerInterface",
          "name": "tokenListener",
          "type": "address"
        }
      ],
      "name": "TokenListenerUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "_externalErc20",
          "type": "address"
        }
      ],
      "name": "addExternalErc20Award",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Upgradeable[]",
          "name": "_externalErc20s",
          "type": "address[]"
        }
      ],
      "name": "addExternalErc20Awards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC721Upgradeable",
          "name": "_externalErc721",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "addExternalErc721Award",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "beforeAwardListener",
      "outputs": [
        {
          "internalType": "contract BeforeAwardListenerInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "controlledToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "referrer",
          "type": "address"
        }
      ],
      "name": "beforeTokenMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "controlledToken",
          "type": "address"
        }
      ],
      "name": "beforeTokenTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentTime",
          "type": "uint256"
        }
      ],
      "name": "calculateNextPrizePeriodStartTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "canCompleteAward",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "canStartAward",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cancelAward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "completeAward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentPrize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "secondsPerBlockMantissa",
          "type": "uint256"
        }
      ],
      "name": "estimateRemainingBlocksToPrize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract BeforeAwardListenerInterface",
          "name": "listener",
          "type": "address"
        }
      ],
      "name": "forceBeforeAwardListener",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getExternalErc20Awards",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC721Upgradeable",
          "name": "_externalErc721",
          "type": "address"
        }
      ],
      "name": "getExternalErc721AwardTokenIds",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getExternalErc721Awards",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLastRngLockBlock",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLastRngRequestId",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_prizePeriodStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_prizePeriodSeconds",
          "type": "uint256"
        },
        {
          "internalType": "contract PrizePool",
          "name": "_prizePool",
          "type": "address"
        },
        {
          "internalType": "contract TicketInterface",
          "name": "_ticket",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "_sponsorship",
          "type": "address"
        },
        {
          "internalType": "contract RNGInterface",
          "name": "_rng",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Upgradeable[]",
          "name": "externalErc20Awards",
          "type": "address[]"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPrizePeriodOver",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRngCompleted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRngRequested",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRngTimedOut",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "periodicPrizeStrategyListener",
      "outputs": [
        {
          "internalType": "contract PeriodicPrizeStrategyListenerInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "prizePeriodEndAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "prizePeriodRemainingSeconds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "prizePeriodSeconds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "prizePeriodStartedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "prizePool",
      "outputs": [
        {
          "internalType": "contract PrizePool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "_externalErc20",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "_prevExternalErc20",
          "type": "address"
        }
      ],
      "name": "removeExternalErc20Award",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC721Upgradeable",
          "name": "_externalErc721",
          "type": "address"
        },
        {
          "internalType": "contract IERC721Upgradeable",
          "name": "_prevExternalErc721",
          "type": "address"
        }
      ],
      "name": "removeExternalErc721Award",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rng",
      "outputs": [
        {
          "internalType": "contract RNGInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rngRequestTimeout",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract BeforeAwardListenerInterface",
          "name": "_beforeAwardListener",
          "type": "address"
        }
      ],
      "name": "setBeforeAwardListener",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_time",
          "type": "uint256"
        }
      ],
      "name": "setCurrentTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract PeriodicPrizeStrategyDistributorInterface",
          "name": "_distributor",
          "type": "address"
        }
      ],
      "name": "setDistributor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract PeriodicPrizeStrategyListenerInterface",
          "name": "_periodicPrizeStrategyListener",
          "type": "address"
        }
      ],
      "name": "setPeriodicPrizeStrategyListener",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_prizePeriodSeconds",
          "type": "uint256"
        }
      ],
      "name": "setPrizePeriodSeconds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "requestId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "lockBlock",
          "type": "uint32"
        }
      ],
      "name": "setRngRequest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_rngRequestTimeout",
          "type": "uint32"
        }
      ],
      "name": "setRngRequestTimeout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract RNGInterface",
          "name": "rngService",
          "type": "address"
        }
      ],
      "name": "setRngService",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract TokenListenerInterface",
          "name": "_tokenListener",
          "type": "address"
        }
      ],
      "name": "setTokenListener",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "sponsorship",
      "outputs": [
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startAward",
      "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": "ticket",
      "outputs": [
        {
          "internalType": "contract TicketInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenListener",
      "outputs": [
        {
          "internalType": "contract TokenListenerInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50613fd0806100206000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c806372f33ea91161019d578063b2210957116100e9578063d5ad6bf6116100a2578063f210a9f31161007c578063f210a9f314610851578063f2fde38b14610877578063f97700e21461089d578063ffa1ad74146109725761030c565b8063d5ad6bf614610839578063d605787b14610841578063dfb2f13b146108495761030c565b8063b221095714610744578063b9ee1e0514610780578063c2f19ee814610788578063c42b42a014610790578063c48ddbcb14610798578063c6853270146108165761030c565b80638aa3ec6f116101565780639417783f116101305780639417783f146106e057806395e5f9ee14610706578063acca5b951461070e578063b0244682146107165761030c565b80638aa3ec6f146106aa5780638da5cb5b146106d057806394144c6b146106d85761030c565b806372f33ea914610629578063738bbea81461063157806375619ab5146106395780637f4296d71461065f578063876f5c7e14610685578063884a44481461068d5761030c565b80634e5d08e01161025c578063671137c4116102155780636bea5344116101ef5780636bea5344146106095780636cc25db714610611578063715018a614610619578063719ce73e146106215761030c565b8063671137c4146105cb5780636a74f107146105f95780636be51c4f146106015761030c565b80634e5d08e0146104d6578063500db70d146104fc578063605e25ac1461050457806362c77a611461052a578063642d43db14610532578063669682211461055d5761030c565b80632c8fe73d116102c957806347bed998116102a357806347bed9981461046d5780634aba4f6b1461048a5780634c169f4f146104925780634d7f3db01461049a5761030c565b80632c8fe73d146103e757806330fcdf41146103ef57806342d09209146104155761030c565b806301b48e341461031157806301ffc9a7146103405780630d847fc41461037b578063111070e41461039f57806322f8e566146103a75780632a7ad609146103c6575b600080fd5b61032e6004803603602081101561032757600080fd5b50356109ef565b60408051918252519081900360200190f35b6103676004803603602081101561035657600080fd5b50356001600160e01b031916610a08565b604080519115158252519081900360200190f35b610383610a3e565b604080516001600160a01b039092168252519081900360200190f35b610367610a4d565b6103c4600480360360208110156103bd57600080fd5b5035610a5c565b005b6103ce610a61565b6040805163ffffffff9092168252519081900360200190f35b61032e610a6d565b6103c46004803603602081101561040557600080fd5b50356001600160a01b0316610a7c565b61041d610b96565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610459578181015183820152602001610441565b505050509050019250505060405180910390f35b61032e6004803603602081101561048357600080fd5b5035610ba2565b610367610bad565b6103c4610c32565b6103c4600480360360808110156104b057600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516610d19565b6103c4600480360360208110156104ec57600080fd5b50356001600160a01b0316610e25565b610383610ee1565b6103c46004803603602081101561051a57600080fd5b50356001600160a01b0316610ef0565b61041d611013565b6103c46004803603604081101561054857600080fd5b5063ffffffff8135811691602001351661101f565b6103c46004803603602081101561057357600080fd5b810190602081018135600160201b81111561058d57600080fd5b82018360208201111561059f57600080fd5b803590602001918460208302840111600160201b831117156105c057600080fd5b509092509050611052565b6103c4600480360360408110156105e157600080fd5b506001600160a01b038135811691602001351661113e565b6103676111c1565b6103836111da565b6103ce6111e9565b6103836111fc565b6103c461120b565b6103836112b7565b61032e6112c6565b6103676112cc565b6103c46004803603602081101561064f57600080fd5b50356001600160a01b031661131f565b6103c46004803603602081101561067557600080fd5b50356001600160a01b0316611341565b610367611439565b6103c4600480360360208110156106a357600080fd5b5035611458565b6103c4600480360360208110156106c057600080fd5b50356001600160a01b03166114cb565b6103836115e5565b61032e6115f4565b61041d600480360360208110156106f657600080fd5b50356001600160a01b03166115fa565b610367611666565b6103ce611670565b6103c46004803603604081101561072c57600080fd5b506001600160a01b038135811691602001351661167c565b6103c46004803603608081101561075a57600080fd5b506001600160a01b0381358116916020810135821691604082013591606001351661172a565b6103c4611868565b610383611ae9565b61032e611af8565b6103c4600480360360408110156107ae57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107d857600080fd5b8201836020820111156107ea57600080fd5b803590602001918460208302840111600160201b8311171561080b57600080fd5b509092509050611b3d565b6103c46004803603602081101561082c57600080fd5b503563ffffffff16611db2565b61032e611e25565b610383611e2f565b6103c4611e3e565b6103c46004803603602081101561086757600080fd5b50356001600160a01b0316612106565b6103c46004803603602081101561088d57600080fd5b50356001600160a01b0316612128565b6103c4600480360360e08110156108b357600080fd5b8135916020810135916001600160a01b0360408301358116926060810135821692608082013583169260a083013516919081019060e0810160c0820135600160201b81111561090157600080fd5b82018360208201111561091357600080fd5b803590602001918460208302840111600160201b8311171561093457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061222b945050505050565b61097a61259e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156109b457818101518382015260200161099c565b50505050905090810190601f1680156109e15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000610a026109fc6125bf565b836125fc565b92915050565b60006001600160e01b031982166301ffc9a760e01b1480610a025750506001600160e01b031916600162a1cb1960e01b03191490565b6073546001600160a01b031681565b606a5463ffffffff1615155b90565b607655565b606a5463ffffffff1690565b6000610a77612625565b905090565b610a8461263e565b6001600160a01b0316610a956115e5565b6001600160a01b031614610ade576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b610ae6612642565b6001600160a01b0381161580610b115750610b116001600160a01b03821663266fce1f60e11b6126b4565b610b4c5760405162461bcd60e51b8152600401808060200182810382526031815260200180613d786031913960400191505060405180910390fd5b607380546001600160a01b0319166001600160a01b0383169081179091556040517fc4feff61630891ea2cb42a54fbe3ff2e65422f2ed17323ac6b65f4521112e87e90600090a250565b6060610a7760706126d7565b6000610a02826127b7565b606954606a5460408051630e866e6f60e21b815263ffffffff9092166004830152516000926001600160a01b031691633a19b9bc916024808301926020929190829003018186803b158015610c0157600080fd5b505afa158015610c15573d6000803e3d6000fd5b505050506040513d6020811015610c2b57600080fd5b5051905090565b610c3a6112cc565b610c755760405162461bcd60e51b8152600401808060200182810382526026815260200180613efb6026913960400191505060405180910390fd5b606a80546bffffffffffffffffffffffff19811690915560405163ffffffff80831692600160201b900416907fee6702c46c5618e6fc7e625c71f4c85df9c91d456cb16a3aea71ab83b1fee00590600090a16066546040805163ffffffff84811682529151918516926001600160a01b03169133917fd50026ee0824513af20cdf5e72d1fbfbe8fd646ee0576378e080326f1a695e58919081900360200190a45050565b6066546001600160a01b0316610d2d61263e565b6001600160a01b031614610d725760405162461bcd60e51b8152600401808060200182810382526025815260200180613bff6025913960400191505060405180910390fd5b6067546001600160a01b0383811691161415610d9057610d90612642565b6065546001600160a01b031615610e1f57606554604080516304d7f3db60e41b81526001600160a01b038781166004830152602482018790528581166044830152848116606483015291519190921691634d7f3db091608480830192600092919082900301818387803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b505050505b50505050565b610e2d6115e5565b6001600160a01b0316610e3e61263e565b6001600160a01b03161480610e6d57506074546001600160a01b0316610e6261263e565b6001600160a01b0316145b80610e9257506073546001600160a01b0316610e8761263e565b6001600160a01b0316145b610ecd5760405162461bcd60e51b815260040180806020018281038252602c815260200180613b75602c913960400191505060405180910390fd5b610ed5612642565b610ede816127fe565b50565b6068546001600160a01b031681565b610ef861263e565b6001600160a01b0316610f096115e5565b6001600160a01b031614610f52576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b610f5a612642565b6001600160a01b0381161580610f885750610f886001600160a01b038216600162a1cb1960e01b03196126b4565b610fc35760405162461bcd60e51b815260040180806020018281038252602c815260200180613af8602c913960400191505060405180910390fd5b606580546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f9fc437aa70ad4ee5f33f6772bf338eed41e21b95435820817ab8b4df161ce4dd90600090a250565b6060610a77606e6126d7565b606a805463ffffffff928316600160201b0267ffffffff00000000199490931663ffffffff199091161792909216179055565b61105a6115e5565b6001600160a01b031661106b61263e565b6001600160a01b0316148061109a57506074546001600160a01b031661108f61263e565b6001600160a01b0316145b806110bf57506073546001600160a01b03166110b461263e565b6001600160a01b0316145b6110fa5760405162461bcd60e51b815260040180806020018281038252602c815260200180613b75602c913960400191505060405180910390fd5b611102612642565b60005b818110156111395761113183838381811061111c57fe5b905060200201356001600160a01b03166127fe565b600101611105565b505050565b61114661263e565b6001600160a01b03166111576115e5565b6001600160a01b0316146111a0576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6111a8612642565b6111b460708284612a65565b6111bd82612b81565b5050565b60006111cb610a4d565b8015610a775750610a77610bad565b6065546001600160a01b031681565b606a54600160201b900463ffffffff1690565b6067546001600160a01b031681565b61121361263e565b6001600160a01b03166112246115e5565b6001600160a01b03161461126d576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6066546001600160a01b031681565b606d5481565b606a54600090600160401b900463ffffffff166112eb57506000610a59565b606a54606b5461130f9163ffffffff91821691600160401b909104811690612bd916565b611317612c33565b119050610a59565b607580546001600160a01b0319166001600160a01b0392909216919091179055565b61134961263e565b6001600160a01b031661135a6115e5565b6001600160a01b0316146113a3576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6113ab612642565b6113b3610a4d565b156113ef5760405162461bcd60e51b8152600401808060200182810382526023815260200180613ed86023913960400191505060405180910390fd5b606980546001600160a01b0319166001600160a01b0383169081179091556040517ff935763cc7c57ee8ed6318ed71e756cca0731294c9f46ff5b386f36d6ff1417a90600090a250565b6000611443612c39565b8015610a775750611452610a4d565b15905090565b61146061263e565b6001600160a01b03166114716115e5565b6001600160a01b0316146114ba576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6114c2612642565b610ede81612c52565b6114d361263e565b6001600160a01b03166114e46115e5565b6001600160a01b03161461152d576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b611535612642565b6001600160a01b038116158061156057506115606001600160a01b038216632ba8396360e11b6126b4565b61159b5760405162461bcd60e51b8152600401808060200182810382526033815260200180613e496033913960400191505060405180910390fd5b607480546001600160a01b0319166001600160a01b0383169081179091556040517fda05d50a3a1ec0ffab059f1d457ae59f68ccfb3ffbb4dad283c516f9103d584b90600090a250565b6033546001600160a01b031690565b606c5481565b6001600160a01b03811660009081526072602090815260409182902080548351818402810184019094528084526060939283018282801561165a57602002820191906000526020600020905b815481526020019060010190808311611646575b50505050509050919050565b6000610a77612c39565b606b5463ffffffff1681565b61168461263e565b6001600160a01b03166116956115e5565b6001600160a01b0316146116de576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6116e6612642565b6116f2606e8284612a65565b6040516001600160a01b038316907f58982464497acdab11ad29d39907e076b0d3b8daf1d9b734174c7c3a2a0e8c7490600090a25050565b6066546001600160a01b031661173e61263e565b6001600160a01b0316146117835760405162461bcd60e51b8152600401808060200182810382526025815260200180613bff6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031614156117d45760405162461bcd60e51b8152600401808060200182810382526026815260200180613c246026913960400191505060405180910390fd5b6067546001600160a01b03828116911614156117f2576117f2612642565b6065546001600160a01b031615610e1f576065546040805163b221095760e01b81526001600160a01b03878116600483015286811660248301526044820186905284811660648301529151919092169163b221095791608480830192600092919082900301818387803b158015610e0657600080fd5b611870612c39565b6118ab5760405162461bcd60e51b815260040180806020018281038252602b815260200180613b24602b913960400191505060405180910390fd5b6118b3610a4d565b156118ef5760405162461bcd60e51b815260040180806020018281038252602b815260200180613d0c602b913960400191505060405180910390fd5b60695460408051630d37b53760e01b8152815160009384936001600160a01b0390911692630d37b5379260048083019392829003018186803b15801561193457600080fd5b505afa158015611948573d6000803e3d6000fd5b505050506040513d604081101561195e57600080fd5b50805160209091015190925090506001600160a01b038216158015906119845750600081115b156119a3576069546119a3906001600160a01b03848116911683612ccc565b6069546040805163433c53d960e11b8152815160009384936001600160a01b0390911692638678a7b2926004808301939282900301818787803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b505050506040513d6040811015611a1357600080fd5b508051602090910151606a805463ffffffff808416600160201b0267ffffffff000000001991861663ffffffff1990931692909217161790559092509050611a61611a5c612c33565b612ddf565b606a80546bffffffff00000000000000001916600160401b63ffffffff93841602179055606654908316906001600160a01b0316611a9d61263e565b6001600160a01b03167f4d31e658dcf617bb3a3c8cf7c6dddb33f7030ac588e271631ecdb5d76c2e91ef84604051808263ffffffff16815260200191505060405180910390a450505050565b6074546001600160a01b031681565b606654604080516318c1996d60e21b815290516000926001600160a01b03169163630665b4916004808301926020929190829003018186803b158015610c0157600080fd5b611b456115e5565b6001600160a01b0316611b5661263e565b6001600160a01b03161480611b8557506074546001600160a01b0316611b7a61263e565b6001600160a01b0316145b80611baa57506073546001600160a01b0316611b9f61263e565b6001600160a01b0316145b611be55760405162461bcd60e51b815260040180806020018281038252602c815260200180613b75602c913960400191505060405180910390fd5b611bed612642565b60665460408051636a3fd4f960e01b81526001600160a01b03868116600483015291519190921691636a3fd4f9916024808301926020929190829003018186803b158015611c3a57600080fd5b505afa158015611c4e573d6000803e3d6000fd5b505050506040513d6020811015611c6457600080fd5b5051611ca15760405162461bcd60e51b815260040180806020018281038252602b815260200180613da9602b913960400191505060405180910390fd5b611cbb6001600160a01b0384166380ac58cd60e01b6126b4565b611cf65760405162461bcd60e51b8152600401808060200182810382526024815260200180613ad46024913960400191505060405180910390fd5b611d01607084612e27565b611d1057611d10607084612e78565b60005b81811015611d3f57611d3784848484818110611d2b57fe5b90506020020135612f8c565b600101611d13565b50826001600160a01b03167f51541dc4b4c08a16085809cccdc4cc77d8000b60fbb00142e57f236d84298675838360405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a2505050565b611dba61263e565b6001600160a01b0316611dcb6115e5565b6001600160a01b031614611e14576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b611e1c612642565b610ede81613112565b6000610a776125bf565b6069546001600160a01b031681565b611e46610a4d565b611e815760405162461bcd60e51b8152600401808060200182810382526027815260200180613f4d6027913960400191505060405180910390fd5b611e89610bad565b611ec45760405162461bcd60e51b8152600401808060200182810382526026815260200180613c956026913960400191505060405180910390fd5b606954606a54604080516313a54bf360e31b815263ffffffff9092166004830152516000926001600160a01b031691639d2a5f9891602480830192602092919082900301818787803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d6020811015611f4357600080fd5b5051606a80546bffffffffffffffffffffffff191690556073549091506001600160a01b031615611fde57607354606d546040805163266fce1f60e11b8152600481018590526024810192909252516001600160a01b0390921691634cdf9c3e9160448082019260009290919082900301818387803b158015611fc557600080fd5b505af1158015611fd9573d6000803e3d6000fd5b505050505b611fe7816131ab565b6074546001600160a01b03161561206857607454606d5460408051632ba8396360e11b8152600481018590526024810192909252516001600160a01b039092169163575072c69160448082019260009290919082900301818387803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b505050505b612078612073612c33565b6127b7565b606d5561208361263e565b6001600160a01b03167f9c4163ece98173eab9a496c4db8bf3e2c8edcc5d2854377880597ccb858b7a9d826040518082815260200191505060405180910390a2606d546120ce61263e565b6001600160a01b03167fc61852c20f0b03b31d782f3022f2bf20322ac17ce66c5349fb6e24740cdd645660405160405180910390a350565b607380546001600160a01b0319166001600160a01b0392909216919091179055565b61213061263e565b6001600160a01b03166121416115e5565b6001600160a01b03161461218a576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6001600160a01b0381166121cf5760405162461bcd60e51b8152600401808060200182810382526026815260200180613b4f6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806122445750612244613213565b80612252575060005460ff16155b61228d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613cde602e913960400191505060405180910390fd5b600054610100900460ff161580156122b8576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0386166122fd5760405162461bcd60e51b8152600401808060200182810382526029815260200180613c4a6029913960400191505060405180910390fd5b6001600160a01b0385166123425760405162461bcd60e51b8152600401808060200182810382526025815260200180613dfa6025913960400191505060405180910390fd5b6001600160a01b0384166123875760405162461bcd60e51b815260040180806020018281038252602a815260200180613ba1602a913960400191505060405180910390fd5b6001600160a01b0383166123cc5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c736022913960400191505060405180910390fd5b606680546001600160a01b038089166001600160a01b0319928316179092556067805488841690831617905560698054868416908316179055606880549287169290911691909117905561241f87612c52565b61242761321e565b612431606e6132cf565b60005b82518110156124615761245983828151811061244c57fe5b60200260200101516127fe565b600101612434565b50606c879055606d88905561247660706132cf565b612481610708613112565b856001600160a01b03167ff9632d212436344a25150ff0c161dabf412aade556621c2dea146ca63ff643f589898888888860405180878152602001868152602001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561252b578181015183820152602001612513565b5050505090500197505050505050505060405180910390a2606d5461254e61263e565b6001600160a01b03167fc61852c20f0b03b31d782f3022f2bf20322ac17ce66c5349fb6e24740cdd645660405160405180910390a38015610e1a576000805461ff00191690555050505050505050565b60405180604001604052806005815260200164332e342e3560d81b81525081565b6000806125ca612625565b905060006125d6612c33565b9050818111156125eb57600092505050610a59565b6125f58282613337565b9250505090565b600080612611670de0b6b3a764000085613394565b905061261d81846133ed565b949350505050565b6000610a77606c54606d54612bd990919063ffffffff16565b3390565b600061264c61342f565b606a54909150600160201b900463ffffffff1615806126795750606a54600160201b900463ffffffff1681105b610ede5760405162461bcd60e51b8152600401808060200182810382526023815260200180613ed86023913960400191505060405180910390fd5b60006126bf83613433565b80156126d057506126d08383613466565b9392505050565b606080826000015467ffffffffffffffff811180156126f557600080fd5b5060405190808252806020026020018201604052801561271f578160200160208202803683370190505b50600160008181529085016020526040812054919250906001600160a01b03165b6001600160a01b0381161580159061276257506001600160a01b038116600114155b156127ae578083838151811061277457fe5b6001600160a01b03928316602091820292909201810191909152918116600090815260018088019093526040902054929091019116612740565b50909392505050565b6000806127db606c546127d5606d548661333790919063ffffffff16565b9061348c565b90506126d06127f5606c548361339490919063ffffffff16565b606d5490612bd9565b612810816001600160a01b03166134f3565b612861576040805162461bcd60e51b815260206004820181905260248201527f506572696f6469635072697a6553747261746567792f65726332302d6e756c6c604482015290519081900360640190fd5b60665460408051636a3fd4f960e01b81526001600160a01b03848116600483015291519190921691636a3fd4f9916024808301926020929190829003018186803b1580156128ae57600080fd5b505afa1580156128c2573d6000803e3d6000fd5b505050506040513d60208110156128d857600080fd5b50516129155760405162461bcd60e51b815260040180806020018281038252602b815260200180613da9602b913960400191505060405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831061297b5780518252601f19909201916020918201910161295c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146129db576040519150601f19603f3d011682016040523d82523d6000602084013e6129e0565b606091505b509150915081612a215760405162461bcd60e51b8152600401808060200182810382526023815260200180613cbb6023913960400191505060405180910390fd5b612a2c606e84612e78565b6040516001600160a01b038416907fbcd6d991f3416e288bf59a2997b423772937b62c7ea7dd1a54af7771de1f741890600090a2505050565b6001600160a01b038116600114801590612a8757506001600160a01b03811615155b612aca576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b038281166000908152600185016020526040902054811690821614612b33576040805162461bcd60e51b8152602060048201526013602482015272496e76616c696420707265764164647265737360681b604482015290519081900360640190fd5b6001600160a01b039081166000818152600185016020526040808220805495851683529082208054959094166001600160a01b03199586161790935552805490911690558054600019019055565b6001600160a01b0381166000908152607260205260408120612ba291613aa5565b6040516001600160a01b038216907fcd64d9dacd230c5ccf1278ea5332b0621aa28c950fb0e61c8fbc9e2011c88a3490600090a250565b6000828201838110156126d0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60765490565b6000612c43612625565b612c4b612c33565b1015905090565b60008111612c915760405162461bcd60e51b8152600401808060200182810382526034815260200180613bcb6034913960400191505060405180910390fd5b606c8190556040805182815290517f0d379c1a7282461e725a9dc2d74e65246c77e98ae93835e26c2f1654c48ee4ec9181900360200190a150565b801580612d52575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d2457600080fd5b505afa158015612d38573d6000803e3d6000fd5b505050506040513d6020811015612d4e57600080fd5b5051155b612d8d5760405162461bcd60e51b8152600401808060200182810382526036815260200180613e7c6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526111399084906134f9565b6000600160201b8210612e235760405162461bcd60e51b8152600401808060200182810382526026815260200180613dd46026913960400191505060405180910390fd5b5090565b60006001600160a01b038216600114801590612e4b57506001600160a01b03821615155b80156126d05750506001600160a01b03908116600090815260019290920160205260409091205416151590565b6001600160a01b038116600114801590612e9a57506001600160a01b03811615155b612edd576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b0381811660009081526001840160205260409020541615612f3c576040805162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481859191959609a1b604482015290519081900360640190fd5b60016000818152838201602052604080822080546001600160a01b039586168085529284208054969091166001600160a01b03199687161790559183905281549093169092179091558154019055565b606654604080516331a9108f60e11b81526004810184905290516001600160a01b0392831692851691636352211e916024808301926020929190829003018186803b158015612fda57600080fd5b505afa158015612fee573d6000803e3d6000fd5b505050506040513d602081101561300457600080fd5b50516001600160a01b03161461304b5760405162461bcd60e51b8152600401808060200182810382526027815260200180613f746027913960400191505060405180910390fd5b60005b6001600160a01b0383166000908152607260205260409020548110156130e5576001600160a01b038316600090815260726020526040902080548391908390811061309557fe5b906000526020600020015414156130dd5760405162461bcd60e51b8152600401808060200182810382526026815260200180613eb26026913960400191505060405180910390fd5b60010161304e565b506001600160a01b0390911660009081526072602090815260408220805460018101825590835291200155565b603c8163ffffffff16116131575760405162461bcd60e51b815260040180806020018281038252602c815260200180613f21602c913960400191505060405180910390fd5b606b805463ffffffff191663ffffffff838116919091179182905560408051929091168252517f4f27f6f220ffad585e728389bc2f0f6b74eeebeb43f95f53752a647cb6e7e687916020908290030190a150565b607554604080516391c05b0b60e01b81526004810184905290516001600160a01b03909216916391c05b0b9160248082019260009290919082900301818387803b1580156131f857600080fd5b505af115801561320c573d6000803e3d6000fd5b5050505050565b6000611452306134f3565b600054610100900460ff16806132375750613237613213565b80613245575060005460ff16155b6132805760405162461bcd60e51b815260040180806020018281038252602e815260200180613cde602e913960400191505060405180910390fd5b600054610100900460ff161580156132ab576000805460ff1961ff0019909116610100171660011790555b6132b36135aa565b6132bb61364a565b8015610ede576000805461ff001916905550565b805415613312576040805162461bcd60e51b815260206004820152600c60248201526b105b1c9958591e481a5b9a5d60a21b604482015290519081900360640190fd5b60016000818152918101602052604090912080546001600160a01b0319169091179055565b60008282111561338e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826133a357506000610a02565b828202828482816133b057fe5b04146126d05760405162461bcd60e51b8152600401808060200182810382526021815260200180613d376021913960400191505060405180910390fd5b60006126d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613743565b4390565b6000613446826301ffc9a760e01b613466565b8015610a02575061345f826001600160e01b0319613466565b1592915050565b600080600061347585856137e5565b915091508180156134835750805b95945050505050565b60008082116134e2576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816134eb57fe5b049392505050565b3b151590565b606061354e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139199092919063ffffffff16565b8051909150156111395780806020019051602081101561356d57600080fd5b50516111395760405162461bcd60e51b815260040180806020018281038252602a815260200180613e1f602a913960400191505060405180910390fd5b600054610100900460ff16806135c357506135c3613213565b806135d1575060005460ff16155b61360c5760405162461bcd60e51b815260040180806020018281038252602e815260200180613cde602e913960400191505060405180910390fd5b600054610100900460ff161580156132bb576000805460ff1961ff0019909116610100171660011790558015610ede576000805461ff001916905550565b600054610100900460ff16806136635750613663613213565b80613671575060005460ff16155b6136ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180613cde602e913960400191505060405180910390fd5b600054610100900460ff161580156136d7576000805460ff1961ff0019909116610100171660011790555b60006136e161263e565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ede576000805461ff001916905550565b600081836137cf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561379457818101518382015260200161377c565b50505050905090810190601f1680156137c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816137db57fe5b0495945050505050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166301ffc9a760e01b1781529151815160009384939284926060926001600160a01b038a169261753092879282918083835b6020831061386d5780518252601f19909201916020918201910161384e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303818686fa925050503d80600081146138ce576040519150601f19603f3d011682016040523d82523d6000602084013e6138d3565b606091505b50915091506020815110156138f15760008094509450505050613912565b8181806020019051602081101561390757600080fd5b505190955093505050505b9250929050565b606061261d84846000858561392d856134f3565b61397e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106139bd5780518252601f19909201916020918201910161399e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613a1f576040519150601f19603f3d011682016040523d82523d6000602084013e613a24565b606091505b5091509150613a34828286613a3f565b979650505050505050565b60608315613a4e5750816126d0565b825115613a5e5782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561379457818101518382015260200161377c565b5080546000825590600052602060002090810190610ede91905b80821115612e235760008155600101613abf56fe506572696f6469635072697a6553747261746567792f6572633732312d696e76616c6964506572696f6469635072697a6553747261746567792f746f6b656e2d6c697374656e65722d696e76616c6964506572696f6469635072697a6553747261746567792f7072697a652d706572696f642d6e6f742d6f7665724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373506572696f6469635072697a6553747261746567792f6f6e6c792d6f776e65722d6f722d6c697374656e6572506572696f6469635072697a6553747261746567792f73706f6e736f72736869702d6e6f742d7a65726f506572696f6469635072697a6553747261746567792f7072697a652d706572696f642d677265617465722d7468616e2d7a65726f506572696f6469635072697a6553747261746567792f6f6e6c792d7072697a652d706f6f6c506572696f6469635072697a6553747261746567792f7472616e736665722d746f2d73656c66506572696f6469635072697a6553747261746567792f7072697a652d706f6f6c2d6e6f742d7a65726f506572696f6469635072697a6553747261746567792f726e672d6e6f742d7a65726f506572696f6469635072697a6553747261746567792f726e672d6e6f742d636f6d706c657465506572696f6469635072697a6553747261746567792f65726332302d696e76616c6964496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564506572696f6469635072697a6553747261746567792f726e672d616c72656164792d726571756573746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572506572696f6469635072697a6553747261746567792f6265666f726541776172644c697374656e65722d696e76616c6964506572696f6469635072697a6553747261746567792f63616e6e6f742d61776172642d65787465726e616c53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473506572696f6469635072697a6553747261746567792f7469636b65742d6e6f742d7a65726f5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564506572696f6469635072697a6553747261746567792f7072697a6553747261746567794c697374656e65722d696e76616c69645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365506572696f6469635072697a6553747261746567792f6572633732312d6475706c6963617465506572696f6469635072697a6553747261746567792f726e672d696e2d666c69676874506572696f6469635072697a6553747261746567792f726e672d6e6f742d74696d65646f7574506572696f6469635072697a6553747261746567792f726e672d74696d656f75742d67742d36302d73656373506572696f6469635072697a6553747261746567792f726e672d6e6f742d726571756573746564506572696f6469635072697a6553747261746567792f756e617661696c61626c652d746f6b656ea26469706673582212205a2d40bc6c9cca45d3c3872fc80f7d222580af405b855a2f9df10813e173ffdf64736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061030c5760003560e01c806372f33ea91161019d578063b2210957116100e9578063d5ad6bf6116100a2578063f210a9f31161007c578063f210a9f314610851578063f2fde38b14610877578063f97700e21461089d578063ffa1ad74146109725761030c565b8063d5ad6bf614610839578063d605787b14610841578063dfb2f13b146108495761030c565b8063b221095714610744578063b9ee1e0514610780578063c2f19ee814610788578063c42b42a014610790578063c48ddbcb14610798578063c6853270146108165761030c565b80638aa3ec6f116101565780639417783f116101305780639417783f146106e057806395e5f9ee14610706578063acca5b951461070e578063b0244682146107165761030c565b80638aa3ec6f146106aa5780638da5cb5b146106d057806394144c6b146106d85761030c565b806372f33ea914610629578063738bbea81461063157806375619ab5146106395780637f4296d71461065f578063876f5c7e14610685578063884a44481461068d5761030c565b80634e5d08e01161025c578063671137c4116102155780636bea5344116101ef5780636bea5344146106095780636cc25db714610611578063715018a614610619578063719ce73e146106215761030c565b8063671137c4146105cb5780636a74f107146105f95780636be51c4f146106015761030c565b80634e5d08e0146104d6578063500db70d146104fc578063605e25ac1461050457806362c77a611461052a578063642d43db14610532578063669682211461055d5761030c565b80632c8fe73d116102c957806347bed998116102a357806347bed9981461046d5780634aba4f6b1461048a5780634c169f4f146104925780634d7f3db01461049a5761030c565b80632c8fe73d146103e757806330fcdf41146103ef57806342d09209146104155761030c565b806301b48e341461031157806301ffc9a7146103405780630d847fc41461037b578063111070e41461039f57806322f8e566146103a75780632a7ad609146103c6575b600080fd5b61032e6004803603602081101561032757600080fd5b50356109ef565b60408051918252519081900360200190f35b6103676004803603602081101561035657600080fd5b50356001600160e01b031916610a08565b604080519115158252519081900360200190f35b610383610a3e565b604080516001600160a01b039092168252519081900360200190f35b610367610a4d565b6103c4600480360360208110156103bd57600080fd5b5035610a5c565b005b6103ce610a61565b6040805163ffffffff9092168252519081900360200190f35b61032e610a6d565b6103c46004803603602081101561040557600080fd5b50356001600160a01b0316610a7c565b61041d610b96565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610459578181015183820152602001610441565b505050509050019250505060405180910390f35b61032e6004803603602081101561048357600080fd5b5035610ba2565b610367610bad565b6103c4610c32565b6103c4600480360360808110156104b057600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516610d19565b6103c4600480360360208110156104ec57600080fd5b50356001600160a01b0316610e25565b610383610ee1565b6103c46004803603602081101561051a57600080fd5b50356001600160a01b0316610ef0565b61041d611013565b6103c46004803603604081101561054857600080fd5b5063ffffffff8135811691602001351661101f565b6103c46004803603602081101561057357600080fd5b810190602081018135600160201b81111561058d57600080fd5b82018360208201111561059f57600080fd5b803590602001918460208302840111600160201b831117156105c057600080fd5b509092509050611052565b6103c4600480360360408110156105e157600080fd5b506001600160a01b038135811691602001351661113e565b6103676111c1565b6103836111da565b6103ce6111e9565b6103836111fc565b6103c461120b565b6103836112b7565b61032e6112c6565b6103676112cc565b6103c46004803603602081101561064f57600080fd5b50356001600160a01b031661131f565b6103c46004803603602081101561067557600080fd5b50356001600160a01b0316611341565b610367611439565b6103c4600480360360208110156106a357600080fd5b5035611458565b6103c4600480360360208110156106c057600080fd5b50356001600160a01b03166114cb565b6103836115e5565b61032e6115f4565b61041d600480360360208110156106f657600080fd5b50356001600160a01b03166115fa565b610367611666565b6103ce611670565b6103c46004803603604081101561072c57600080fd5b506001600160a01b038135811691602001351661167c565b6103c46004803603608081101561075a57600080fd5b506001600160a01b0381358116916020810135821691604082013591606001351661172a565b6103c4611868565b610383611ae9565b61032e611af8565b6103c4600480360360408110156107ae57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156107d857600080fd5b8201836020820111156107ea57600080fd5b803590602001918460208302840111600160201b8311171561080b57600080fd5b509092509050611b3d565b6103c46004803603602081101561082c57600080fd5b503563ffffffff16611db2565b61032e611e25565b610383611e2f565b6103c4611e3e565b6103c46004803603602081101561086757600080fd5b50356001600160a01b0316612106565b6103c46004803603602081101561088d57600080fd5b50356001600160a01b0316612128565b6103c4600480360360e08110156108b357600080fd5b8135916020810135916001600160a01b0360408301358116926060810135821692608082013583169260a083013516919081019060e0810160c0820135600160201b81111561090157600080fd5b82018360208201111561091357600080fd5b803590602001918460208302840111600160201b8311171561093457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061222b945050505050565b61097a61259e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156109b457818101518382015260200161099c565b50505050905090810190601f1680156109e15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000610a026109fc6125bf565b836125fc565b92915050565b60006001600160e01b031982166301ffc9a760e01b1480610a025750506001600160e01b031916600162a1cb1960e01b03191490565b6073546001600160a01b031681565b606a5463ffffffff1615155b90565b607655565b606a5463ffffffff1690565b6000610a77612625565b905090565b610a8461263e565b6001600160a01b0316610a956115e5565b6001600160a01b031614610ade576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b610ae6612642565b6001600160a01b0381161580610b115750610b116001600160a01b03821663266fce1f60e11b6126b4565b610b4c5760405162461bcd60e51b8152600401808060200182810382526031815260200180613d786031913960400191505060405180910390fd5b607380546001600160a01b0319166001600160a01b0383169081179091556040517fc4feff61630891ea2cb42a54fbe3ff2e65422f2ed17323ac6b65f4521112e87e90600090a250565b6060610a7760706126d7565b6000610a02826127b7565b606954606a5460408051630e866e6f60e21b815263ffffffff9092166004830152516000926001600160a01b031691633a19b9bc916024808301926020929190829003018186803b158015610c0157600080fd5b505afa158015610c15573d6000803e3d6000fd5b505050506040513d6020811015610c2b57600080fd5b5051905090565b610c3a6112cc565b610c755760405162461bcd60e51b8152600401808060200182810382526026815260200180613efb6026913960400191505060405180910390fd5b606a80546bffffffffffffffffffffffff19811690915560405163ffffffff80831692600160201b900416907fee6702c46c5618e6fc7e625c71f4c85df9c91d456cb16a3aea71ab83b1fee00590600090a16066546040805163ffffffff84811682529151918516926001600160a01b03169133917fd50026ee0824513af20cdf5e72d1fbfbe8fd646ee0576378e080326f1a695e58919081900360200190a45050565b6066546001600160a01b0316610d2d61263e565b6001600160a01b031614610d725760405162461bcd60e51b8152600401808060200182810382526025815260200180613bff6025913960400191505060405180910390fd5b6067546001600160a01b0383811691161415610d9057610d90612642565b6065546001600160a01b031615610e1f57606554604080516304d7f3db60e41b81526001600160a01b038781166004830152602482018790528581166044830152848116606483015291519190921691634d7f3db091608480830192600092919082900301818387803b158015610e0657600080fd5b505af1158015610e1a573d6000803e3d6000fd5b505050505b50505050565b610e2d6115e5565b6001600160a01b0316610e3e61263e565b6001600160a01b03161480610e6d57506074546001600160a01b0316610e6261263e565b6001600160a01b0316145b80610e9257506073546001600160a01b0316610e8761263e565b6001600160a01b0316145b610ecd5760405162461bcd60e51b815260040180806020018281038252602c815260200180613b75602c913960400191505060405180910390fd5b610ed5612642565b610ede816127fe565b50565b6068546001600160a01b031681565b610ef861263e565b6001600160a01b0316610f096115e5565b6001600160a01b031614610f52576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b610f5a612642565b6001600160a01b0381161580610f885750610f886001600160a01b038216600162a1cb1960e01b03196126b4565b610fc35760405162461bcd60e51b815260040180806020018281038252602c815260200180613af8602c913960400191505060405180910390fd5b606580546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f9fc437aa70ad4ee5f33f6772bf338eed41e21b95435820817ab8b4df161ce4dd90600090a250565b6060610a77606e6126d7565b606a805463ffffffff928316600160201b0267ffffffff00000000199490931663ffffffff199091161792909216179055565b61105a6115e5565b6001600160a01b031661106b61263e565b6001600160a01b0316148061109a57506074546001600160a01b031661108f61263e565b6001600160a01b0316145b806110bf57506073546001600160a01b03166110b461263e565b6001600160a01b0316145b6110fa5760405162461bcd60e51b815260040180806020018281038252602c815260200180613b75602c913960400191505060405180910390fd5b611102612642565b60005b818110156111395761113183838381811061111c57fe5b905060200201356001600160a01b03166127fe565b600101611105565b505050565b61114661263e565b6001600160a01b03166111576115e5565b6001600160a01b0316146111a0576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6111a8612642565b6111b460708284612a65565b6111bd82612b81565b5050565b60006111cb610a4d565b8015610a775750610a77610bad565b6065546001600160a01b031681565b606a54600160201b900463ffffffff1690565b6067546001600160a01b031681565b61121361263e565b6001600160a01b03166112246115e5565b6001600160a01b03161461126d576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6066546001600160a01b031681565b606d5481565b606a54600090600160401b900463ffffffff166112eb57506000610a59565b606a54606b5461130f9163ffffffff91821691600160401b909104811690612bd916565b611317612c33565b119050610a59565b607580546001600160a01b0319166001600160a01b0392909216919091179055565b61134961263e565b6001600160a01b031661135a6115e5565b6001600160a01b0316146113a3576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6113ab612642565b6113b3610a4d565b156113ef5760405162461bcd60e51b8152600401808060200182810382526023815260200180613ed86023913960400191505060405180910390fd5b606980546001600160a01b0319166001600160a01b0383169081179091556040517ff935763cc7c57ee8ed6318ed71e756cca0731294c9f46ff5b386f36d6ff1417a90600090a250565b6000611443612c39565b8015610a775750611452610a4d565b15905090565b61146061263e565b6001600160a01b03166114716115e5565b6001600160a01b0316146114ba576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6114c2612642565b610ede81612c52565b6114d361263e565b6001600160a01b03166114e46115e5565b6001600160a01b03161461152d576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b611535612642565b6001600160a01b038116158061156057506115606001600160a01b038216632ba8396360e11b6126b4565b61159b5760405162461bcd60e51b8152600401808060200182810382526033815260200180613e496033913960400191505060405180910390fd5b607480546001600160a01b0319166001600160a01b0383169081179091556040517fda05d50a3a1ec0ffab059f1d457ae59f68ccfb3ffbb4dad283c516f9103d584b90600090a250565b6033546001600160a01b031690565b606c5481565b6001600160a01b03811660009081526072602090815260409182902080548351818402810184019094528084526060939283018282801561165a57602002820191906000526020600020905b815481526020019060010190808311611646575b50505050509050919050565b6000610a77612c39565b606b5463ffffffff1681565b61168461263e565b6001600160a01b03166116956115e5565b6001600160a01b0316146116de576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6116e6612642565b6116f2606e8284612a65565b6040516001600160a01b038316907f58982464497acdab11ad29d39907e076b0d3b8daf1d9b734174c7c3a2a0e8c7490600090a25050565b6066546001600160a01b031661173e61263e565b6001600160a01b0316146117835760405162461bcd60e51b8152600401808060200182810382526025815260200180613bff6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031614156117d45760405162461bcd60e51b8152600401808060200182810382526026815260200180613c246026913960400191505060405180910390fd5b6067546001600160a01b03828116911614156117f2576117f2612642565b6065546001600160a01b031615610e1f576065546040805163b221095760e01b81526001600160a01b03878116600483015286811660248301526044820186905284811660648301529151919092169163b221095791608480830192600092919082900301818387803b158015610e0657600080fd5b611870612c39565b6118ab5760405162461bcd60e51b815260040180806020018281038252602b815260200180613b24602b913960400191505060405180910390fd5b6118b3610a4d565b156118ef5760405162461bcd60e51b815260040180806020018281038252602b815260200180613d0c602b913960400191505060405180910390fd5b60695460408051630d37b53760e01b8152815160009384936001600160a01b0390911692630d37b5379260048083019392829003018186803b15801561193457600080fd5b505afa158015611948573d6000803e3d6000fd5b505050506040513d604081101561195e57600080fd5b50805160209091015190925090506001600160a01b038216158015906119845750600081115b156119a3576069546119a3906001600160a01b03848116911683612ccc565b6069546040805163433c53d960e11b8152815160009384936001600160a01b0390911692638678a7b2926004808301939282900301818787803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b505050506040513d6040811015611a1357600080fd5b508051602090910151606a805463ffffffff808416600160201b0267ffffffff000000001991861663ffffffff1990931692909217161790559092509050611a61611a5c612c33565b612ddf565b606a80546bffffffff00000000000000001916600160401b63ffffffff93841602179055606654908316906001600160a01b0316611a9d61263e565b6001600160a01b03167f4d31e658dcf617bb3a3c8cf7c6dddb33f7030ac588e271631ecdb5d76c2e91ef84604051808263ffffffff16815260200191505060405180910390a450505050565b6074546001600160a01b031681565b606654604080516318c1996d60e21b815290516000926001600160a01b03169163630665b4916004808301926020929190829003018186803b158015610c0157600080fd5b611b456115e5565b6001600160a01b0316611b5661263e565b6001600160a01b03161480611b8557506074546001600160a01b0316611b7a61263e565b6001600160a01b0316145b80611baa57506073546001600160a01b0316611b9f61263e565b6001600160a01b0316145b611be55760405162461bcd60e51b815260040180806020018281038252602c815260200180613b75602c913960400191505060405180910390fd5b611bed612642565b60665460408051636a3fd4f960e01b81526001600160a01b03868116600483015291519190921691636a3fd4f9916024808301926020929190829003018186803b158015611c3a57600080fd5b505afa158015611c4e573d6000803e3d6000fd5b505050506040513d6020811015611c6457600080fd5b5051611ca15760405162461bcd60e51b815260040180806020018281038252602b815260200180613da9602b913960400191505060405180910390fd5b611cbb6001600160a01b0384166380ac58cd60e01b6126b4565b611cf65760405162461bcd60e51b8152600401808060200182810382526024815260200180613ad46024913960400191505060405180910390fd5b611d01607084612e27565b611d1057611d10607084612e78565b60005b81811015611d3f57611d3784848484818110611d2b57fe5b90506020020135612f8c565b600101611d13565b50826001600160a01b03167f51541dc4b4c08a16085809cccdc4cc77d8000b60fbb00142e57f236d84298675838360405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a2505050565b611dba61263e565b6001600160a01b0316611dcb6115e5565b6001600160a01b031614611e14576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b611e1c612642565b610ede81613112565b6000610a776125bf565b6069546001600160a01b031681565b611e46610a4d565b611e815760405162461bcd60e51b8152600401808060200182810382526027815260200180613f4d6027913960400191505060405180910390fd5b611e89610bad565b611ec45760405162461bcd60e51b8152600401808060200182810382526026815260200180613c956026913960400191505060405180910390fd5b606954606a54604080516313a54bf360e31b815263ffffffff9092166004830152516000926001600160a01b031691639d2a5f9891602480830192602092919082900301818787803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d6020811015611f4357600080fd5b5051606a80546bffffffffffffffffffffffff191690556073549091506001600160a01b031615611fde57607354606d546040805163266fce1f60e11b8152600481018590526024810192909252516001600160a01b0390921691634cdf9c3e9160448082019260009290919082900301818387803b158015611fc557600080fd5b505af1158015611fd9573d6000803e3d6000fd5b505050505b611fe7816131ab565b6074546001600160a01b03161561206857607454606d5460408051632ba8396360e11b8152600481018590526024810192909252516001600160a01b039092169163575072c69160448082019260009290919082900301818387803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b505050505b612078612073612c33565b6127b7565b606d5561208361263e565b6001600160a01b03167f9c4163ece98173eab9a496c4db8bf3e2c8edcc5d2854377880597ccb858b7a9d826040518082815260200191505060405180910390a2606d546120ce61263e565b6001600160a01b03167fc61852c20f0b03b31d782f3022f2bf20322ac17ce66c5349fb6e24740cdd645660405160405180910390a350565b607380546001600160a01b0319166001600160a01b0392909216919091179055565b61213061263e565b6001600160a01b03166121416115e5565b6001600160a01b03161461218a576040805162461bcd60e51b81526020600482018190526024820152600080516020613d58833981519152604482015290519081900360640190fd5b6001600160a01b0381166121cf5760405162461bcd60e51b8152600401808060200182810382526026815260200180613b4f6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806122445750612244613213565b80612252575060005460ff16155b61228d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613cde602e913960400191505060405180910390fd5b600054610100900460ff161580156122b8576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0386166122fd5760405162461bcd60e51b8152600401808060200182810382526029815260200180613c4a6029913960400191505060405180910390fd5b6001600160a01b0385166123425760405162461bcd60e51b8152600401808060200182810382526025815260200180613dfa6025913960400191505060405180910390fd5b6001600160a01b0384166123875760405162461bcd60e51b815260040180806020018281038252602a815260200180613ba1602a913960400191505060405180910390fd5b6001600160a01b0383166123cc5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c736022913960400191505060405180910390fd5b606680546001600160a01b038089166001600160a01b0319928316179092556067805488841690831617905560698054868416908316179055606880549287169290911691909117905561241f87612c52565b61242761321e565b612431606e6132cf565b60005b82518110156124615761245983828151811061244c57fe5b60200260200101516127fe565b600101612434565b50606c879055606d88905561247660706132cf565b612481610708613112565b856001600160a01b03167ff9632d212436344a25150ff0c161dabf412aade556621c2dea146ca63ff643f589898888888860405180878152602001868152602001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561252b578181015183820152602001612513565b5050505090500197505050505050505060405180910390a2606d5461254e61263e565b6001600160a01b03167fc61852c20f0b03b31d782f3022f2bf20322ac17ce66c5349fb6e24740cdd645660405160405180910390a38015610e1a576000805461ff00191690555050505050505050565b60405180604001604052806005815260200164332e342e3560d81b81525081565b6000806125ca612625565b905060006125d6612c33565b9050818111156125eb57600092505050610a59565b6125f58282613337565b9250505090565b600080612611670de0b6b3a764000085613394565b905061261d81846133ed565b949350505050565b6000610a77606c54606d54612bd990919063ffffffff16565b3390565b600061264c61342f565b606a54909150600160201b900463ffffffff1615806126795750606a54600160201b900463ffffffff1681105b610ede5760405162461bcd60e51b8152600401808060200182810382526023815260200180613ed86023913960400191505060405180910390fd5b60006126bf83613433565b80156126d057506126d08383613466565b9392505050565b606080826000015467ffffffffffffffff811180156126f557600080fd5b5060405190808252806020026020018201604052801561271f578160200160208202803683370190505b50600160008181529085016020526040812054919250906001600160a01b03165b6001600160a01b0381161580159061276257506001600160a01b038116600114155b156127ae578083838151811061277457fe5b6001600160a01b03928316602091820292909201810191909152918116600090815260018088019093526040902054929091019116612740565b50909392505050565b6000806127db606c546127d5606d548661333790919063ffffffff16565b9061348c565b90506126d06127f5606c548361339490919063ffffffff16565b606d5490612bd9565b612810816001600160a01b03166134f3565b612861576040805162461bcd60e51b815260206004820181905260248201527f506572696f6469635072697a6553747261746567792f65726332302d6e756c6c604482015290519081900360640190fd5b60665460408051636a3fd4f960e01b81526001600160a01b03848116600483015291519190921691636a3fd4f9916024808301926020929190829003018186803b1580156128ae57600080fd5b505afa1580156128c2573d6000803e3d6000fd5b505050506040513d60208110156128d857600080fd5b50516129155760405162461bcd60e51b815260040180806020018281038252602b815260200180613da9602b913960400191505060405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831061297b5780518252601f19909201916020918201910161295c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146129db576040519150601f19603f3d011682016040523d82523d6000602084013e6129e0565b606091505b509150915081612a215760405162461bcd60e51b8152600401808060200182810382526023815260200180613cbb6023913960400191505060405180910390fd5b612a2c606e84612e78565b6040516001600160a01b038416907fbcd6d991f3416e288bf59a2997b423772937b62c7ea7dd1a54af7771de1f741890600090a2505050565b6001600160a01b038116600114801590612a8757506001600160a01b03811615155b612aca576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b038281166000908152600185016020526040902054811690821614612b33576040805162461bcd60e51b8152602060048201526013602482015272496e76616c696420707265764164647265737360681b604482015290519081900360640190fd5b6001600160a01b039081166000818152600185016020526040808220805495851683529082208054959094166001600160a01b03199586161790935552805490911690558054600019019055565b6001600160a01b0381166000908152607260205260408120612ba291613aa5565b6040516001600160a01b038216907fcd64d9dacd230c5ccf1278ea5332b0621aa28c950fb0e61c8fbc9e2011c88a3490600090a250565b6000828201838110156126d0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60765490565b6000612c43612625565b612c4b612c33565b1015905090565b60008111612c915760405162461bcd60e51b8152600401808060200182810382526034815260200180613bcb6034913960400191505060405180910390fd5b606c8190556040805182815290517f0d379c1a7282461e725a9dc2d74e65246c77e98ae93835e26c2f1654c48ee4ec9181900360200190a150565b801580612d52575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d2457600080fd5b505afa158015612d38573d6000803e3d6000fd5b505050506040513d6020811015612d4e57600080fd5b5051155b612d8d5760405162461bcd60e51b8152600401808060200182810382526036815260200180613e7c6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526111399084906134f9565b6000600160201b8210612e235760405162461bcd60e51b8152600401808060200182810382526026815260200180613dd46026913960400191505060405180910390fd5b5090565b60006001600160a01b038216600114801590612e4b57506001600160a01b03821615155b80156126d05750506001600160a01b03908116600090815260019290920160205260409091205416151590565b6001600160a01b038116600114801590612e9a57506001600160a01b03811615155b612edd576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b0381811660009081526001840160205260409020541615612f3c576040805162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481859191959609a1b604482015290519081900360640190fd5b60016000818152838201602052604080822080546001600160a01b039586168085529284208054969091166001600160a01b03199687161790559183905281549093169092179091558154019055565b606654604080516331a9108f60e11b81526004810184905290516001600160a01b0392831692851691636352211e916024808301926020929190829003018186803b158015612fda57600080fd5b505afa158015612fee573d6000803e3d6000fd5b505050506040513d602081101561300457600080fd5b50516001600160a01b03161461304b5760405162461bcd60e51b8152600401808060200182810382526027815260200180613f746027913960400191505060405180910390fd5b60005b6001600160a01b0383166000908152607260205260409020548110156130e5576001600160a01b038316600090815260726020526040902080548391908390811061309557fe5b906000526020600020015414156130dd5760405162461bcd60e51b8152600401808060200182810382526026815260200180613eb26026913960400191505060405180910390fd5b60010161304e565b506001600160a01b0390911660009081526072602090815260408220805460018101825590835291200155565b603c8163ffffffff16116131575760405162461bcd60e51b815260040180806020018281038252602c815260200180613f21602c913960400191505060405180910390fd5b606b805463ffffffff191663ffffffff838116919091179182905560408051929091168252517f4f27f6f220ffad585e728389bc2f0f6b74eeebeb43f95f53752a647cb6e7e687916020908290030190a150565b607554604080516391c05b0b60e01b81526004810184905290516001600160a01b03909216916391c05b0b9160248082019260009290919082900301818387803b1580156131f857600080fd5b505af115801561320c573d6000803e3d6000fd5b5050505050565b6000611452306134f3565b600054610100900460ff16806132375750613237613213565b80613245575060005460ff16155b6132805760405162461bcd60e51b815260040180806020018281038252602e815260200180613cde602e913960400191505060405180910390fd5b600054610100900460ff161580156132ab576000805460ff1961ff0019909116610100171660011790555b6132b36135aa565b6132bb61364a565b8015610ede576000805461ff001916905550565b805415613312576040805162461bcd60e51b815260206004820152600c60248201526b105b1c9958591e481a5b9a5d60a21b604482015290519081900360640190fd5b60016000818152918101602052604090912080546001600160a01b0319169091179055565b60008282111561338e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826133a357506000610a02565b828202828482816133b057fe5b04146126d05760405162461bcd60e51b8152600401808060200182810382526021815260200180613d376021913960400191505060405180910390fd5b60006126d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613743565b4390565b6000613446826301ffc9a760e01b613466565b8015610a02575061345f826001600160e01b0319613466565b1592915050565b600080600061347585856137e5565b915091508180156134835750805b95945050505050565b60008082116134e2576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816134eb57fe5b049392505050565b3b151590565b606061354e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139199092919063ffffffff16565b8051909150156111395780806020019051602081101561356d57600080fd5b50516111395760405162461bcd60e51b815260040180806020018281038252602a815260200180613e1f602a913960400191505060405180910390fd5b600054610100900460ff16806135c357506135c3613213565b806135d1575060005460ff16155b61360c5760405162461bcd60e51b815260040180806020018281038252602e815260200180613cde602e913960400191505060405180910390fd5b600054610100900460ff161580156132bb576000805460ff1961ff0019909116610100171660011790558015610ede576000805461ff001916905550565b600054610100900460ff16806136635750613663613213565b80613671575060005460ff16155b6136ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180613cde602e913960400191505060405180910390fd5b600054610100900460ff161580156136d7576000805460ff1961ff0019909116610100171660011790555b60006136e161263e565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ede576000805461ff001916905550565b600081836137cf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561379457818101518382015260200161377c565b50505050905090810190601f1680156137c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816137db57fe5b0495945050505050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166301ffc9a760e01b1781529151815160009384939284926060926001600160a01b038a169261753092879282918083835b6020831061386d5780518252601f19909201916020918201910161384e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303818686fa925050503d80600081146138ce576040519150601f19603f3d011682016040523d82523d6000602084013e6138d3565b606091505b50915091506020815110156138f15760008094509450505050613912565b8181806020019051602081101561390757600080fd5b505190955093505050505b9250929050565b606061261d84846000858561392d856134f3565b61397e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106139bd5780518252601f19909201916020918201910161399e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613a1f576040519150601f19603f3d011682016040523d82523d6000602084013e613a24565b606091505b5091509150613a34828286613a3f565b979650505050505050565b60608315613a4e5750816126d0565b825115613a5e5782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561379457818101518382015260200161377c565b5080546000825590600052602060002090810190610ede91905b80821115612e235760008155600101613abf56fe506572696f6469635072697a6553747261746567792f6572633732312d696e76616c6964506572696f6469635072697a6553747261746567792f746f6b656e2d6c697374656e65722d696e76616c6964506572696f6469635072697a6553747261746567792f7072697a652d706572696f642d6e6f742d6f7665724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373506572696f6469635072697a6553747261746567792f6f6e6c792d6f776e65722d6f722d6c697374656e6572506572696f6469635072697a6553747261746567792f73706f6e736f72736869702d6e6f742d7a65726f506572696f6469635072697a6553747261746567792f7072697a652d706572696f642d677265617465722d7468616e2d7a65726f506572696f6469635072697a6553747261746567792f6f6e6c792d7072697a652d706f6f6c506572696f6469635072697a6553747261746567792f7472616e736665722d746f2d73656c66506572696f6469635072697a6553747261746567792f7072697a652d706f6f6c2d6e6f742d7a65726f506572696f6469635072697a6553747261746567792f726e672d6e6f742d7a65726f506572696f6469635072697a6553747261746567792f726e672d6e6f742d636f6d706c657465506572696f6469635072697a6553747261746567792f65726332302d696e76616c6964496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564506572696f6469635072697a6553747261746567792f726e672d616c72656164792d726571756573746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572506572696f6469635072697a6553747261746567792f6265666f726541776172644c697374656e65722d696e76616c6964506572696f6469635072697a6553747261746567792f63616e6e6f742d61776172642d65787465726e616c53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473506572696f6469635072697a6553747261746567792f7469636b65742d6e6f742d7a65726f5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564506572696f6469635072697a6553747261746567792f7072697a6553747261746567794c697374656e65722d696e76616c69645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365506572696f6469635072697a6553747261746567792f6572633732312d6475706c6963617465506572696f6469635072697a6553747261746567792f726e672d696e2d666c69676874506572696f6469635072697a6553747261746567792f726e672d6e6f742d74696d65646f7574506572696f6469635072697a6553747261746567792f726e672d74696d656f75742d67742d36302d73656373506572696f6469635072697a6553747261746567792f726e672d6e6f742d726571756573746564506572696f6469635072697a6553747261746567792f756e617661696c61626c652d746f6b656ea26469706673582212205a2d40bc6c9cca45d3c3872fc80f7d222580af405b855a2f9df10813e173ffdf64736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
