{
  "_format": "hh-sol-artifact-1",
  "contractName": "BaseV2Voter",
  "sourceName": "contracts/voter/BaseV2Voter.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_registry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenId",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "weight",
          "type": "int256"
        }
      ],
      "name": "Abstained",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        }
      ],
      "name": "Attach",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "lp",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        }
      ],
      "name": "Detach",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DistributeReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "bribe",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "GaugeCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "bribe",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "GaugeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "NotifyReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenId",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "weight",
          "type": "int256"
        }
      ],
      "name": "Voted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "whitelister",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "value",
          "type": "bool"
        }
      ],
      "name": "Whitelisted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "lp",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "attachStakerToGauge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "attachments",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "bribes",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "claimable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "detachStakerFromGauge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_gauges",
          "type": "address[]"
        }
      ],
      "name": "distribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_gauge",
          "type": "address"
        }
      ],
      "name": "distribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "finish",
          "type": "uint256"
        }
      ],
      "name": "distribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "gauges",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isGauge",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "length",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "notifyRewardAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_who",
          "type": "address"
        }
      ],
      "name": "poke",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "poolForGauge",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "poolVote",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "pools",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_bribe",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_gauge",
          "type": "address"
        }
      ],
      "name": "registerGaugeBribe",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        }
      ],
      "name": "resetFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "what",
          "type": "address"
        }
      ],
      "name": "toggleWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalWeight",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_gauges",
          "type": "address[]"
        }
      ],
      "name": "updateFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "end",
          "type": "uint256"
        }
      ],
      "name": "updateForRange",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_gauge",
          "type": "address"
        }
      ],
      "name": "updateGauge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newbribe",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newgauge",
          "type": "address"
        }
      ],
      "name": "updateGaugeBribe",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "usedWeights",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_poolVote",
          "type": "address[]"
        },
        {
          "internalType": "int256[]",
          "name": "_weights",
          "type": "int256[]"
        }
      ],
      "name": "vote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "votes",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "weights",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002a7638038062002a768339810160408190526200003491620000ac565b600160005562000044336200005a565b60601b6001600160601b031916608052620000dc565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620000be578081fd5b81516001600160a01b0381168114620000d5578182fd5b9392505050565b60805160601c61292e620001486000396000818161036601528181610547015281816107cb015281816109e201528181610b0f01528181610c0b01528181610d7d0152818161189901528181611df001528181611ef6015281816120170152612159015261292e6000f3fe608060405234801561001057600080fd5b50600436106101db5760003560e01c80638da5cb5b11610105578063b1a997ac1161009d578063b1a997ac1461047a578063b9a09fd51461048d578063c48f5af4146104b6578063cad1b906146104c9578063d560b0d7146104f4578063d826f88f14610507578063e32e4e881461050f578063e4fc6b6d14610522578063f2fde38b1461052a57600080fd5b80638da5cb5b1461038857806396c82e571461039957806397a302f7146103a25780639b19251a146103b55780639b6a9d72146103e8578063a7cac846146103fb578063a8c5d95a1461041b578063aa79979b14610444578063ac4afa381461046757600080fd5b806353d786931161017857806353d78693146102d2578063551e0566146102da5780636138889b146102ed57806363453ae1146103005780636405eacd146103135780636ecbe38a14610333578063715018a6146103465780637625391a1461034e5780637b1039991461036157600080fd5b80622f8de4146101e057806306d6a1b2146102135780631cdf2eb9146102495780631f7b6d321461025e57806320217176146102665780632efce57b1461027957806339393ac91461028c5780633c6b16ab1461029f578063402914f5146102b2575b600080fd5b6102006101ee366004612360565b600a6020526000908152604090205481565b6040519081526020015b60405180910390f35b61023c610221366004612360565b6005602052600090815260409020546001600160a01b031681565b60405161020a91906125ed565b61025c6102573660046123d7565b61053d565b005b600354610200565b61025c610274366004612360565b6107c9565b61025c61028736600461244c565b6108bc565b61025c61029a366004612360565b610971565b61025c6102ad36600461259c565b6109e0565b6102006102c0366004612360565b60106020526000908152604090205481565b61025c610bee565b61023c6102e83660046123d7565b610bff565b61025c6102fb3660046124b5565b610f9c565b61025c61030e366004612360565b610fee565b610200610321366004612360565b600d6020526000908152604090205481565b61025c610341366004612360565b610ff7565b61025c611000565b61025c61035c3660046125cc565b611012565b61023c7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031661023c565b61020060025481565b61025c6103b0366004612360565b61108b565b6103d86103c3366004612360565b600c6020526000908152604090205460ff1681565b604051901515815260200161020a565b61025c6103f63660046125cc565b611125565b610200610409366004612360565b60076020526000908152604090205481565b61023c610429366004612360565b6006602052600090815260409020546001600160a01b031681565b6103d8610452366004612360565b600b6020526000908152604090205460ff1681565b61023c61047536600461259c565b611199565b61025c610488366004612360565b6111c3565b61023c61049b366004612360565b6004602052600090815260409020546001600160a01b031681565b61023c6104c4366004612421565b611349565b6102006104d736600461239f565b600860209081526000928352604080842090915290825290205481565b61025c6105023660046124b5565b611381565b61025c6113cf565b61025c61051d366004612360565b6113d8565b61025c611473565b61025c610538366004612360565b611482565b6105456114f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a057600080fd5b505af11580156105b4573d6000803e3d6000fd5b505050506001600160a01b038381166000908152600460205260409020541661061b5760405162461bcd60e51b815260206004820152601460248201527319d85d59d9481b9bdd081c9959da5cdd195c995960621b60448201526064015b60405180910390fd5b6001600160a01b0383166000908152600c602052604090205460ff166106535760405162461bcd60e51b81526004016106129061263d565b6001600160a01b0382166000908152600c602052604090205460ff1661068b5760405162461bcd60e51b8152600401610612906126a2565b6001600160a01b0381166000908152600c602052604090205460ff166106c35760405162461bcd60e51b81526004016106129061266b565b6001600160a01b03838116600081815260046020908152604080832080548616808552600680855283862080546001600160a01b0319908116909155835481168a8a169081179094556005808752858820805483169055600b808852868920805460ff19908116909155958952928752858820805483169a8d169a909a1790995597855283862080549098169096179096559390915290208054909116600117905561076e82611552565b836001600160a01b0316836001600160a01b0316836001600160a01b03167f4d7ce501eb0e91cd95cabaadabaec91f7e30501bfcd995e6baccfed91da5294b336040516107bb91906125ed565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561082257600080fd5b505afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a9190612383565b6001600160a01b0316336001600160a01b0316146108b05760405162461bcd60e51b81526020600482015260136024820152721b9bdd081cdd185ad95c8818dbdb9d1c9858dd606a1b6044820152606401610612565b6108b981611636565b50565b8281146108fd5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964207765696768747360881b6044820152606401610612565b61096b338585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080890282810182019093528882529093508892508791829185019084908082843760009201919091525061188692505050565b50505050565b6109796114f8565b6001600160a01b0381166000818152600c6020908152604091829020805460ff8082161560ff199092168217909255925192161515825233917fc8a125677224e7125b3579c5a10de1afe210f4c1c1d3c27be0f12b0c4a14c915910160405180910390a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636dee20126040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3957600080fd5b505afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190612383565b6001600160a01b0316336001600160a01b031614610acb5760405162461bcd60e51b81526020600482015260176024820152763737ba1032b6b4b9b9b4b7b71031b7b73a3937b63632b960491b6044820152606401610612565b600254600090610ae383670de0b6b3a76400006127f7565b610aed9190612760565b90508015610b0d5780600e6000828254610b07919061271a565b90915550505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6657600080fd5b505afa158015610b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9e9190612383565b6001600160a01b0316336001600160a01b03167ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf5082684604051610be291815260200190565b60405180910390a35050565b600354610bfd90600090611125565b565b6000610c096114f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c6457600080fd5b505af1158015610c78573d6000803e3d6000fd5b505050506001600160a01b038481166000908152600460205260409020541615610cd35760405162461bcd60e51b815260206004820152600c60248201526b67617567652065786973747360a01b6044820152606401610612565b6001600160a01b0384166000908152600c602052604090205460ff16610d0b5760405162461bcd60e51b81526004016106129061263d565b6001600160a01b0383166000908152600c602052604090205460ff16610d435760405162461bcd60e51b8152600401610612906126a2565b6001600160a01b0382166000908152600c602052604090205460ff16610d7b5760405162461bcd60e51b81526004016106129061266b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd457600080fd5b505afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c9190612383565b6001600160a01b031663095ea7b3836000196040518363ffffffff1660e01b8152600401610e3b929190612601565b602060405180830381600087803b158015610e5557600080fd5b505af1158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d919061257c565b506001600160a01b0380831660008181526006602090815260408083208054868a166001600160a01b031991821617909155948916808452600483528184208054871686179055938352600582528083208054909516909317909355600b9092529020805460ff19166001179055610f0482611552565b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03868116918217909255604051909185811691908516907f48d3c521fd0d5541640f58c6d6381eed7cb2e8c9df421ae165a4f4c2d221ee0d90610f8d9033906125ed565b60405180910390a45092915050565b60005b8151811015610fea57610fd8828281518110610fcb57634e487b7160e01b600052603260045260246000fd5b6020026020010151611d93565b80610fe28161286c565b915050610f9f565b5050565b6108b981611d93565b6108b981611552565b6110086114f8565b610bfd6000612282565b815b8181101561108657611074600460006003848154811061104457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416611d93565b8061107e8161286c565b915050611014565b505050565b336000908152600b602052604090205460ff166110ba5760405162461bcd60e51b81526004016106129061261a565b6001600160a01b0381166000908152600d60205260409020546110de90600161271a565b6001600160a01b0382166000818152600d602052604080822093909355915133927f641bf376905299ee0c14255d96d80f858c848237b2ac4f0ce467affe4e4b960591a350565b815b8181101561108657611187600460006003848154811061115757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416611552565b806111918161286c565b915050611127565b600381815481106111a957600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b03811660009081526009602090815260408083208054825181850281018501909352808352919290919083018282801561122d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161120f575b5050505050905060008151905060008167ffffffffffffffff81111561126357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561128c578160200160208202803683370190505b50905060005b8281101561133d576001600160a01b038516600090815260086020526040812085519091908690849081106112d757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061132057634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806113358161286c565b915050611292565b5061096b848483611886565b6009602052816000526040600020818154811061136557600080fd5b6000918252602090912001546001600160a01b03169150829050565b60005b8151811015610fea576113bd8282815181106113b057634e487b7160e01b600052603260045260246000fd5b6020026020010151611552565b806113c78161286c565b915050611384565b610bfd33611636565b336000908152600b602052604090205460ff166114075760405162461bcd60e51b81526004016106129061261a565b6001600160a01b0381166000908152600d602052604090205461142c90600190612855565b6001600160a01b0382166000818152600d602052604080822093909355915133927ff655d5448541f499e8d15e12be905bce1d45ff3df14aeca2d174cc9eda1664e591a350565b600354610bfd90600090611012565b61148a6114f8565b6001600160a01b0381166114ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610612565b6108b981612282565b6001546001600160a01b03163314610bfd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610612565b6001600160a01b0380821660009081526005602090815260408083205490931680835260079091529181205490811315611615576001600160a01b0383166000908152600f602052604081208054600e5491829055916115b28383612855565b9050801561160d576000670de0b6b3a76400006115cf83876127f7565b6115d99190612760565b6001600160a01b03881660009081526010602052604081208054929350839290919061160690849061271a565b9091555050505b505050505050565b600e546001600160a01b0384166000908152600f6020526040902055505050565b6001600160a01b038116600090815260096020526040812080549091805b8281101561184057600084828154811061167e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03898116845260088352604080852091909216808552925290912054909150801561182b576001600160a01b038083166000908152600460205260409020546116dc9116611552565b6001600160a01b03821660009081526007602052604081208054839290611704908490612816565b90915550506001600160a01b03808816600090815260086020908152604080832093861683529290529081208054839290611740908490612816565b909155505060008113156117e4576001600160a01b038281166000908152600460208181526040808420548516845260069091529182902054915163293311ab60e01b8152908101849052898316602482015291169063293311ab90604401600060405180830381600087803b1580156117b957600080fd5b505af11580156117cd573d6000803e3d6000fd5b5050505080846117dd91906126d9565b93506117f1565b6117ee8185612816565b93505b7fc1bfb37c7ef0c045eeb49dfda5c409cf0f4964f3a006b9ff1c487b39d1682c818782604051611822929190612601565b60405180910390a15b505080806118389061286c565b915050611654565b5080600260008282546118539190612855565b90915550506001600160a01b0384166000908152600a602090815260408083208390556009909152812061096b916122d4565b61188f83611636565b60008251905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f057600080fd5b505afa158015611904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119289190612383565b90506000816001600160a01b0316633a02a42d876040518263ffffffff1660e01b815260040161195891906125ed565b60206040518083038186803b15801561197057600080fd5b505afa158015611984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a891906125b4565b90506000806000805b86811015611a655760008882815181106119db57634e487b7160e01b600052603260045260246000fd5b602002602001015113611a1e57878181518110611a0857634e487b7160e01b600052603260045260246000fd5b6020026020010151611a1990612887565b611a47565b878181518110611a3e57634e487b7160e01b600052603260045260246000fd5b60200260200101515b611a5190856126d9565b935080611a5d8161286c565b9150506119b1565b5060005b86811015611d55576000898281518110611a9357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03808216600090815260048452604080822054909216808252600b909452205490925060ff1615611d4057600086888c8681518110611af557634e487b7160e01b600052603260045260246000fd5b6020026020010151611b079190612774565b611b119190612732565b6001600160a01b03808f1660009081526008602090815260408083209388168352929052205490915015611b735760405162461bcd60e51b81526020600482015260096024820152680766f746573203d20360bc1b6044820152606401610612565b80611bb15760405162461bcd60e51b815260206004820152600e60248201526d0706f6f6c776569676874203d20360941b6044820152606401610612565b611bba82611552565b6001600160a01b038d8116600090815260096020908152604080832080546001810182559084528284200180546001600160a01b0319169488169485179055928252600790529081208054839290611c139084906126d9565b90915550506001600160a01b03808e16600090815260086020908152604080832093871683529290529081208054839290611c4f9084906126d9565b90915550506000811315611cd7576001600160a01b0380831660009081526006602052604090819020549051630463cd9760e41b8152600481018490528f8316602482015291169063463cd97090604401600060405180830381600087803b158015611cba57600080fd5b505af1158015611cce573d6000803e3d6000fd5b50505050611ce3565b611ce081612887565b90505b611ced81866126d9565b9450611cf981876126d9565b9550336001600160a01b03167f6313944499515bb2add64302f02a3082da9b13539bc2ca6317630260d7ebca628e83604051611d36929190612601565b60405180910390a2505b50508080611d4d9061286c565b915050611a69565b508160026000828254611d68919061271a565b90915550506001600160a01b039098166000908152600a602052604090209790975550505050505050565b60026000541415611de65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610612565b60026000819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636dee20126040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4757600080fd5b505afa158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7f9190612383565b6001600160a01b0316636a2ab6026040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb757600080fd5b505afa158015611ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eef919061257c565b15611fd8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636dee20126040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4d57600080fd5b505afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190612383565b6001600160a01b031663161ad7066040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611fbf57600080fd5b505af1158015611fd3573d6000803e3d6000fd5b505050505b611fe181611552565b6001600160a01b03808216600081815260106020908152604091829020548251631ef0061b60e11b8152925190946399bcc052937f000000000000000000000000000000000000000000000000000000000000000090911692633de00c3692600480840193829003018186803b15801561205a57600080fd5b505afa15801561206e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120929190612383565b6040518263ffffffff1660e01b81526004016120ae91906125ed565b60206040518083038186803b1580156120c657600080fd5b505afa1580156120da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fe91906125b4565b811180156121185750600061211662093a8083612760565b115b1561227957600060106000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550816001600160a01b031663b66503cf7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b057600080fd5b505afa1580156121c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e89190612383565b836040518363ffffffff1660e01b8152600401612206929190612601565b600060405180830381600087803b15801561222057600080fd5b505af1158015612234573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b179060200160405180910390a35b50506001600055565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b50805460008255906000526020600020908101906108b991905b8082111561230257600081556001016122ee565b5090565b8035612311816128e3565b919050565b60008083601f840112612327578081fd5b50813567ffffffffffffffff81111561233e578182fd5b6020830191508360208260051b850101111561235957600080fd5b9250929050565b600060208284031215612371578081fd5b813561237c816128e3565b9392505050565b600060208284031215612394578081fd5b815161237c816128e3565b600080604083850312156123b1578081fd5b82356123bc816128e3565b915060208301356123cc816128e3565b809150509250929050565b6000806000606084860312156123eb578081fd5b83356123f6816128e3565b92506020840135612406816128e3565b91506040840135612416816128e3565b809150509250925092565b60008060408385031215612433578182fd5b823561243e816128e3565b946020939093013593505050565b60008060008060408587031215612461578081fd5b843567ffffffffffffffff80821115612478578283fd5b61248488838901612316565b9096509450602087013591508082111561249c578283fd5b506124a987828801612316565b95989497509550505050565b600060208083850312156124c7578182fd5b823567ffffffffffffffff808211156124de578384fd5b818501915085601f8301126124f1578384fd5b813581811115612503576125036128cd565b8060051b604051601f19603f83011681018181108582111715612528576125286128cd565b604052828152858101935084860182860187018a1015612546578788fd5b8795505b8386101561256f5761255b81612306565b85526001959095019493860193860161254a565b5098975050505050505050565b60006020828403121561258d578081fd5b8151801515811461237c578182fd5b6000602082840312156125ad578081fd5b5035919050565b6000602082840312156125c5578081fd5b5051919050565b600080604083850312156125de578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252600990820152686e6f7420676175676560b81b604082015260600190565b6020808252601490820152731c1bdbdb081b9bdd081dda1a5d195b1a5cdd195960621b604082015260600190565b6020808252601d908201527f676175676520666163746f7279206e6f742077686974656c6973746564000000604082015260600190565b6020808252601d908201527f627269626520666163746f7279206e6f742077686974656c6973746564000000604082015260600190565b600080821280156001600160ff1b03849003851316156126fb576126fb6128a1565b600160ff1b8390038412811615612714576127146128a1565b50500190565b6000821982111561272d5761272d6128a1565b500190565b600082612741576127416128b7565b600160ff1b82146000198414161561275b5761275b6128a1565b500590565b60008261276f5761276f6128b7565b500490565b60006001600160ff1b038184138284138082168684048611161561279a5761279a6128a1565b600160ff1b848712828116878305891216156127b8576127b86128a1565b8587129250878205871284841616156127d3576127d36128a1565b878505871281841616156127e9576127e96128a1565b505050929093029392505050565b6000816000190483118215151615612811576128116128a1565b500290565b60008083128015600160ff1b850184121615612834576128346128a1565b6001600160ff1b038401831381161561284f5761284f6128a1565b50500390565b600082821015612867576128676128a1565b500390565b6000600019821415612880576128806128a1565b5060010190565b6000600160ff1b82141561289d5761289d6128a1565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146108b957600080fdfea2646970667358221220a376823bd71dccacbed5518de5fa954e45a1b6eda03d80de62799224f784152764736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101db5760003560e01c80638da5cb5b11610105578063b1a997ac1161009d578063b1a997ac1461047a578063b9a09fd51461048d578063c48f5af4146104b6578063cad1b906146104c9578063d560b0d7146104f4578063d826f88f14610507578063e32e4e881461050f578063e4fc6b6d14610522578063f2fde38b1461052a57600080fd5b80638da5cb5b1461038857806396c82e571461039957806397a302f7146103a25780639b19251a146103b55780639b6a9d72146103e8578063a7cac846146103fb578063a8c5d95a1461041b578063aa79979b14610444578063ac4afa381461046757600080fd5b806353d786931161017857806353d78693146102d2578063551e0566146102da5780636138889b146102ed57806363453ae1146103005780636405eacd146103135780636ecbe38a14610333578063715018a6146103465780637625391a1461034e5780637b1039991461036157600080fd5b80622f8de4146101e057806306d6a1b2146102135780631cdf2eb9146102495780631f7b6d321461025e57806320217176146102665780632efce57b1461027957806339393ac91461028c5780633c6b16ab1461029f578063402914f5146102b2575b600080fd5b6102006101ee366004612360565b600a6020526000908152604090205481565b6040519081526020015b60405180910390f35b61023c610221366004612360565b6005602052600090815260409020546001600160a01b031681565b60405161020a91906125ed565b61025c6102573660046123d7565b61053d565b005b600354610200565b61025c610274366004612360565b6107c9565b61025c61028736600461244c565b6108bc565b61025c61029a366004612360565b610971565b61025c6102ad36600461259c565b6109e0565b6102006102c0366004612360565b60106020526000908152604090205481565b61025c610bee565b61023c6102e83660046123d7565b610bff565b61025c6102fb3660046124b5565b610f9c565b61025c61030e366004612360565b610fee565b610200610321366004612360565b600d6020526000908152604090205481565b61025c610341366004612360565b610ff7565b61025c611000565b61025c61035c3660046125cc565b611012565b61023c7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031661023c565b61020060025481565b61025c6103b0366004612360565b61108b565b6103d86103c3366004612360565b600c6020526000908152604090205460ff1681565b604051901515815260200161020a565b61025c6103f63660046125cc565b611125565b610200610409366004612360565b60076020526000908152604090205481565b61023c610429366004612360565b6006602052600090815260409020546001600160a01b031681565b6103d8610452366004612360565b600b6020526000908152604090205460ff1681565b61023c61047536600461259c565b611199565b61025c610488366004612360565b6111c3565b61023c61049b366004612360565b6004602052600090815260409020546001600160a01b031681565b61023c6104c4366004612421565b611349565b6102006104d736600461239f565b600860209081526000928352604080842090915290825290205481565b61025c6105023660046124b5565b611381565b61025c6113cf565b61025c61051d366004612360565b6113d8565b61025c611473565b61025c610538366004612360565b611482565b6105456114f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105a057600080fd5b505af11580156105b4573d6000803e3d6000fd5b505050506001600160a01b038381166000908152600460205260409020541661061b5760405162461bcd60e51b815260206004820152601460248201527319d85d59d9481b9bdd081c9959da5cdd195c995960621b60448201526064015b60405180910390fd5b6001600160a01b0383166000908152600c602052604090205460ff166106535760405162461bcd60e51b81526004016106129061263d565b6001600160a01b0382166000908152600c602052604090205460ff1661068b5760405162461bcd60e51b8152600401610612906126a2565b6001600160a01b0381166000908152600c602052604090205460ff166106c35760405162461bcd60e51b81526004016106129061266b565b6001600160a01b03838116600081815260046020908152604080832080548616808552600680855283862080546001600160a01b0319908116909155835481168a8a169081179094556005808752858820805483169055600b808852868920805460ff19908116909155958952928752858820805483169a8d169a909a1790995597855283862080549098169096179096559390915290208054909116600117905561076e82611552565b836001600160a01b0316836001600160a01b0316836001600160a01b03167f4d7ce501eb0e91cd95cabaadabaec91f7e30501bfcd995e6baccfed91da5294b336040516107bb91906125ed565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561082257600080fd5b505afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a9190612383565b6001600160a01b0316336001600160a01b0316146108b05760405162461bcd60e51b81526020600482015260136024820152721b9bdd081cdd185ad95c8818dbdb9d1c9858dd606a1b6044820152606401610612565b6108b981611636565b50565b8281146108fd5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964207765696768747360881b6044820152606401610612565b61096b338585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080890282810182019093528882529093508892508791829185019084908082843760009201919091525061188692505050565b50505050565b6109796114f8565b6001600160a01b0381166000818152600c6020908152604091829020805460ff8082161560ff199092168217909255925192161515825233917fc8a125677224e7125b3579c5a10de1afe210f4c1c1d3c27be0f12b0c4a14c915910160405180910390a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636dee20126040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3957600080fd5b505afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a719190612383565b6001600160a01b0316336001600160a01b031614610acb5760405162461bcd60e51b81526020600482015260176024820152763737ba1032b6b4b9b9b4b7b71031b7b73a3937b63632b960491b6044820152606401610612565b600254600090610ae383670de0b6b3a76400006127f7565b610aed9190612760565b90508015610b0d5780600e6000828254610b07919061271a565b90915550505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6657600080fd5b505afa158015610b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9e9190612383565b6001600160a01b0316336001600160a01b03167ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf5082684604051610be291815260200190565b60405180910390a35050565b600354610bfd90600090611125565b565b6000610c096114f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c6457600080fd5b505af1158015610c78573d6000803e3d6000fd5b505050506001600160a01b038481166000908152600460205260409020541615610cd35760405162461bcd60e51b815260206004820152600c60248201526b67617567652065786973747360a01b6044820152606401610612565b6001600160a01b0384166000908152600c602052604090205460ff16610d0b5760405162461bcd60e51b81526004016106129061263d565b6001600160a01b0383166000908152600c602052604090205460ff16610d435760405162461bcd60e51b8152600401610612906126a2565b6001600160a01b0382166000908152600c602052604090205460ff16610d7b5760405162461bcd60e51b81526004016106129061266b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd457600080fd5b505afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c9190612383565b6001600160a01b031663095ea7b3836000196040518363ffffffff1660e01b8152600401610e3b929190612601565b602060405180830381600087803b158015610e5557600080fd5b505af1158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d919061257c565b506001600160a01b0380831660008181526006602090815260408083208054868a166001600160a01b031991821617909155948916808452600483528184208054871686179055938352600582528083208054909516909317909355600b9092529020805460ff19166001179055610f0482611552565b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03868116918217909255604051909185811691908516907f48d3c521fd0d5541640f58c6d6381eed7cb2e8c9df421ae165a4f4c2d221ee0d90610f8d9033906125ed565b60405180910390a45092915050565b60005b8151811015610fea57610fd8828281518110610fcb57634e487b7160e01b600052603260045260246000fd5b6020026020010151611d93565b80610fe28161286c565b915050610f9f565b5050565b6108b981611d93565b6108b981611552565b6110086114f8565b610bfd6000612282565b815b8181101561108657611074600460006003848154811061104457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416611d93565b8061107e8161286c565b915050611014565b505050565b336000908152600b602052604090205460ff166110ba5760405162461bcd60e51b81526004016106129061261a565b6001600160a01b0381166000908152600d60205260409020546110de90600161271a565b6001600160a01b0382166000818152600d602052604080822093909355915133927f641bf376905299ee0c14255d96d80f858c848237b2ac4f0ce467affe4e4b960591a350565b815b8181101561108657611187600460006003848154811061115757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416611552565b806111918161286c565b915050611127565b600381815481106111a957600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b03811660009081526009602090815260408083208054825181850281018501909352808352919290919083018282801561122d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161120f575b5050505050905060008151905060008167ffffffffffffffff81111561126357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561128c578160200160208202803683370190505b50905060005b8281101561133d576001600160a01b038516600090815260086020526040812085519091908690849081106112d757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061132057634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806113358161286c565b915050611292565b5061096b848483611886565b6009602052816000526040600020818154811061136557600080fd5b6000918252602090912001546001600160a01b03169150829050565b60005b8151811015610fea576113bd8282815181106113b057634e487b7160e01b600052603260045260246000fd5b6020026020010151611552565b806113c78161286c565b915050611384565b610bfd33611636565b336000908152600b602052604090205460ff166114075760405162461bcd60e51b81526004016106129061261a565b6001600160a01b0381166000908152600d602052604090205461142c90600190612855565b6001600160a01b0382166000818152600d602052604080822093909355915133927ff655d5448541f499e8d15e12be905bce1d45ff3df14aeca2d174cc9eda1664e591a350565b600354610bfd90600090611012565b61148a6114f8565b6001600160a01b0381166114ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610612565b6108b981612282565b6001546001600160a01b03163314610bfd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610612565b6001600160a01b0380821660009081526005602090815260408083205490931680835260079091529181205490811315611615576001600160a01b0383166000908152600f602052604081208054600e5491829055916115b28383612855565b9050801561160d576000670de0b6b3a76400006115cf83876127f7565b6115d99190612760565b6001600160a01b03881660009081526010602052604081208054929350839290919061160690849061271a565b9091555050505b505050505050565b600e546001600160a01b0384166000908152600f6020526040902055505050565b6001600160a01b038116600090815260096020526040812080549091805b8281101561184057600084828154811061167e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03898116845260088352604080852091909216808552925290912054909150801561182b576001600160a01b038083166000908152600460205260409020546116dc9116611552565b6001600160a01b03821660009081526007602052604081208054839290611704908490612816565b90915550506001600160a01b03808816600090815260086020908152604080832093861683529290529081208054839290611740908490612816565b909155505060008113156117e4576001600160a01b038281166000908152600460208181526040808420548516845260069091529182902054915163293311ab60e01b8152908101849052898316602482015291169063293311ab90604401600060405180830381600087803b1580156117b957600080fd5b505af11580156117cd573d6000803e3d6000fd5b5050505080846117dd91906126d9565b93506117f1565b6117ee8185612816565b93505b7fc1bfb37c7ef0c045eeb49dfda5c409cf0f4964f3a006b9ff1c487b39d1682c818782604051611822929190612601565b60405180910390a15b505080806118389061286c565b915050611654565b5080600260008282546118539190612855565b90915550506001600160a01b0384166000908152600a602090815260408083208390556009909152812061096b916122d4565b61188f83611636565b60008251905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f057600080fd5b505afa158015611904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119289190612383565b90506000816001600160a01b0316633a02a42d876040518263ffffffff1660e01b815260040161195891906125ed565b60206040518083038186803b15801561197057600080fd5b505afa158015611984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a891906125b4565b90506000806000805b86811015611a655760008882815181106119db57634e487b7160e01b600052603260045260246000fd5b602002602001015113611a1e57878181518110611a0857634e487b7160e01b600052603260045260246000fd5b6020026020010151611a1990612887565b611a47565b878181518110611a3e57634e487b7160e01b600052603260045260246000fd5b60200260200101515b611a5190856126d9565b935080611a5d8161286c565b9150506119b1565b5060005b86811015611d55576000898281518110611a9357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03808216600090815260048452604080822054909216808252600b909452205490925060ff1615611d4057600086888c8681518110611af557634e487b7160e01b600052603260045260246000fd5b6020026020010151611b079190612774565b611b119190612732565b6001600160a01b03808f1660009081526008602090815260408083209388168352929052205490915015611b735760405162461bcd60e51b81526020600482015260096024820152680766f746573203d20360bc1b6044820152606401610612565b80611bb15760405162461bcd60e51b815260206004820152600e60248201526d0706f6f6c776569676874203d20360941b6044820152606401610612565b611bba82611552565b6001600160a01b038d8116600090815260096020908152604080832080546001810182559084528284200180546001600160a01b0319169488169485179055928252600790529081208054839290611c139084906126d9565b90915550506001600160a01b03808e16600090815260086020908152604080832093871683529290529081208054839290611c4f9084906126d9565b90915550506000811315611cd7576001600160a01b0380831660009081526006602052604090819020549051630463cd9760e41b8152600481018490528f8316602482015291169063463cd97090604401600060405180830381600087803b158015611cba57600080fd5b505af1158015611cce573d6000803e3d6000fd5b50505050611ce3565b611ce081612887565b90505b611ced81866126d9565b9450611cf981876126d9565b9550336001600160a01b03167f6313944499515bb2add64302f02a3082da9b13539bc2ca6317630260d7ebca628e83604051611d36929190612601565b60405180910390a2505b50508080611d4d9061286c565b915050611a69565b508160026000828254611d68919061271a565b90915550506001600160a01b039098166000908152600a602052604090209790975550505050505050565b60026000541415611de65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610612565b60026000819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636dee20126040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4757600080fd5b505afa158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7f9190612383565b6001600160a01b0316636a2ab6026040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb757600080fd5b505afa158015611ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eef919061257c565b15611fd8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636dee20126040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4d57600080fd5b505afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190612383565b6001600160a01b031663161ad7066040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611fbf57600080fd5b505af1158015611fd3573d6000803e3d6000fd5b505050505b611fe181611552565b6001600160a01b03808216600081815260106020908152604091829020548251631ef0061b60e11b8152925190946399bcc052937f000000000000000000000000000000000000000000000000000000000000000090911692633de00c3692600480840193829003018186803b15801561205a57600080fd5b505afa15801561206e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120929190612383565b6040518263ffffffff1660e01b81526004016120ae91906125ed565b60206040518083038186803b1580156120c657600080fd5b505afa1580156120da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fe91906125b4565b811180156121185750600061211662093a8083612760565b115b1561227957600060106000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550816001600160a01b031663b66503cf7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b057600080fd5b505afa1580156121c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e89190612383565b836040518363ffffffff1660e01b8152600401612206929190612601565b600060405180830381600087803b15801561222057600080fd5b505af1158015612234573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b179060200160405180910390a35b50506001600055565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b50805460008255906000526020600020908101906108b991905b8082111561230257600081556001016122ee565b5090565b8035612311816128e3565b919050565b60008083601f840112612327578081fd5b50813567ffffffffffffffff81111561233e578182fd5b6020830191508360208260051b850101111561235957600080fd5b9250929050565b600060208284031215612371578081fd5b813561237c816128e3565b9392505050565b600060208284031215612394578081fd5b815161237c816128e3565b600080604083850312156123b1578081fd5b82356123bc816128e3565b915060208301356123cc816128e3565b809150509250929050565b6000806000606084860312156123eb578081fd5b83356123f6816128e3565b92506020840135612406816128e3565b91506040840135612416816128e3565b809150509250925092565b60008060408385031215612433578182fd5b823561243e816128e3565b946020939093013593505050565b60008060008060408587031215612461578081fd5b843567ffffffffffffffff80821115612478578283fd5b61248488838901612316565b9096509450602087013591508082111561249c578283fd5b506124a987828801612316565b95989497509550505050565b600060208083850312156124c7578182fd5b823567ffffffffffffffff808211156124de578384fd5b818501915085601f8301126124f1578384fd5b813581811115612503576125036128cd565b8060051b604051601f19603f83011681018181108582111715612528576125286128cd565b604052828152858101935084860182860187018a1015612546578788fd5b8795505b8386101561256f5761255b81612306565b85526001959095019493860193860161254a565b5098975050505050505050565b60006020828403121561258d578081fd5b8151801515811461237c578182fd5b6000602082840312156125ad578081fd5b5035919050565b6000602082840312156125c5578081fd5b5051919050565b600080604083850312156125de578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252600990820152686e6f7420676175676560b81b604082015260600190565b6020808252601490820152731c1bdbdb081b9bdd081dda1a5d195b1a5cdd195960621b604082015260600190565b6020808252601d908201527f676175676520666163746f7279206e6f742077686974656c6973746564000000604082015260600190565b6020808252601d908201527f627269626520666163746f7279206e6f742077686974656c6973746564000000604082015260600190565b600080821280156001600160ff1b03849003851316156126fb576126fb6128a1565b600160ff1b8390038412811615612714576127146128a1565b50500190565b6000821982111561272d5761272d6128a1565b500190565b600082612741576127416128b7565b600160ff1b82146000198414161561275b5761275b6128a1565b500590565b60008261276f5761276f6128b7565b500490565b60006001600160ff1b038184138284138082168684048611161561279a5761279a6128a1565b600160ff1b848712828116878305891216156127b8576127b86128a1565b8587129250878205871284841616156127d3576127d36128a1565b878505871281841616156127e9576127e96128a1565b505050929093029392505050565b6000816000190483118215151615612811576128116128a1565b500290565b60008083128015600160ff1b850184121615612834576128346128a1565b6001600160ff1b038401831381161561284f5761284f6128a1565b50500390565b600082821015612867576128676128a1565b500390565b6000600019821415612880576128806128a1565b5060010190565b6000600160ff1b82141561289d5761289d6128a1565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146108b957600080fdfea2646970667358221220a376823bd71dccacbed5518de5fa954e45a1b6eda03d80de62799224f784152764736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
