{
  "_format": "hh-sol-artifact-1",
  "contractName": "MiniChefV2",
  "sourceName": "contracts/MiniChefV2.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_tattoo",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "EmergencyWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Harvest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allocPoint",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "lpToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IRewarder",
          "name": "rewarder",
          "type": "address"
        }
      ],
      "name": "LogPoolAddition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allocPoint",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "contract IRewarder",
          "name": "rewarder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "overwrite",
          "type": "bool"
        }
      ],
      "name": "LogSetPool",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tattooPerSecond",
          "type": "uint256"
        }
      ],
      "name": "LogTattooPerSecond",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "lastRewardTime",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lpSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accTattooPerShare",
          "type": "uint256"
        }
      ],
      "name": "LogUpdatePool",
      "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": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "TATTOO",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "allocPoint",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_lpToken",
          "type": "address"
        },
        {
          "internalType": "contract IRewarder",
          "name": "_rewarder",
          "type": "address"
        }
      ],
      "name": "add",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "addedTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "calls",
          "type": "bytes[]"
        },
        {
          "internalType": "bool",
          "name": "revertOnFail",
          "type": "bool"
        }
      ],
      "name": "batch",
      "outputs": [
        {
          "internalType": "bool[]",
          "name": "successes",
          "type": "bool[]"
        },
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "emergencyWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "harvest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "lpToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "pids",
          "type": "uint256[]"
        }
      ],
      "name": "massUpdatePools",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_pid",
          "type": "uint256"
        }
      ],
      "name": "migrate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "migrator",
      "outputs": [
        {
          "internalType": "contract IMigratorChef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_pid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "pendingTattoo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "pending",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permitToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "poolInfo",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "accTattooPerShare",
          "type": "uint128"
        },
        {
          "internalType": "uint64",
          "name": "lastRewardTime",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "allocPoint",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "pools",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "rewarder",
      "outputs": [
        {
          "internalType": "contract IRewarder",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_pid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_allocPoint",
          "type": "uint256"
        },
        {
          "internalType": "contract IRewarder",
          "name": "_rewarder",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "overwrite",
          "type": "bool"
        }
      ],
      "name": "set",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IMigratorChef",
          "name": "_migrator",
          "type": "address"
        }
      ],
      "name": "setMigrator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tattooPerSecond",
          "type": "uint256"
        }
      ],
      "name": "setTattooPerSecond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tattooPerSecond",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalAllocPoint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "direct",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "renounce",
          "type": "bool"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        }
      ],
      "name": "updatePool",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "accTattooPerShare",
              "type": "uint128"
            },
            {
              "internalType": "uint64",
              "name": "lastRewardTime",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "allocPoint",
              "type": "uint64"
            }
          ],
          "internalType": "struct MiniChefV2.PoolInfo",
          "name": "pool",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "int256",
          "name": "rewardDebt",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawAndHarvest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002d7738038062002d77833981016040819052620000349162000089565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360601b6001600160601b031916608052620000b9565b6000602082840312156200009b578081fd5b81516001600160a01b0381168114620000b2578182fd5b9392505050565b60805160601c612c96620000e1600039806108cd528061159d52806118c05250612c966000f3fe6080604052600436106101c25760003560e01c806379d12ffb116100f75780639e8bb65311610095578063d2423b5111610064578063d2423b51146104f6578063d59fc83914610517578063e30c397814610537578063eeca53be1461054c576101c2565b80639e8bb65314610481578063ab7de09814610496578063c346253d146104b6578063d1abb907146104d6576101c2565b806388bba42f116100d157806388bba42f146103fe5780638da5cb5b1461041e5780638dbdbe6d1461043357806393f1a40b14610453576101c2565b806379d12ffb1461039c5780637c516e94146103c95780637cd07e47146103e9576101c2565b806327dc8870116101645780634e71e0c81161013e5780634e71e0c81461030d57806351eb05a61461032257806357a5b58c1461034f57806378ed5d1f1461036f576101c2565b806327dc8870146102b85780632f940c70146102cd578063454b0608146102ed576101c2565b80631526fe27116101a05780631526fe271461023457806317caf6f11461026357806318fccc761461027857806323cf311814610298576101c2565b8063078dfbe7146101c7578063081e3eda146101e95780630ad58d2f14610214575b600080fd5b3480156101d357600080fd5b506101e76101e23660046122a8565b61056c565b005b3480156101f557600080fd5b506101fe61065b565b60405161020b9190612b4a565b60405180910390f35b34801561022057600080fd5b506101e761022f366004612568565b610661565b34801561024057600080fd5b5061025461024f3660046124d3565b6107f1565b60405161020b93929190612b20565b34801561026f57600080fd5b506101fe610833565b34801561028457600080fd5b506101e7610293366004612503565b610839565b3480156102a457600080fd5b506101e76102b336600461228c565b6109d3565b3480156102c457600080fd5b506101fe610a1f565b3480156102d957600080fd5b506101e76102e8366004612503565b610a25565b3480156102f957600080fd5b506101e76103083660046124d3565b610b46565b34801561031957600080fd5b506101e7610e64565b34801561032e57600080fd5b5061034261033d3660046124d3565b610ef1565b60405161020b9190612ae7565b34801561035b57600080fd5b506101e761036a36600461233b565b61117b565b34801561037b57600080fd5b5061038f61038a3660046124d3565b6111b1565b60405161020b9190612636565b3480156103a857600080fd5b506103bc6103b736600461228c565b6111d8565b60405161020b9190612762565b3480156103d557600080fd5b506101e76103e43660046123b2565b6111ed565b3480156103f557600080fd5b5061038f611261565b34801561040a57600080fd5b506101e7610419366004612595565b611270565b34801561042a57600080fd5b5061038f6113dd565b34801561043f57600080fd5b506101e761044e366004612568565b6113ec565b34801561045f57600080fd5b5061047361046e366004612503565b611577565b60405161020b929190612b92565b34801561048d57600080fd5b5061038f61159b565b3480156104a257600080fd5b506101e76104b1366004612532565b6115bf565b3480156104c257600080fd5b5061038f6104d13660046124d3565b6117e5565b3480156104e257600080fd5b506101e76104f1366004612568565b6117f2565b6105096105043660046122f2565b611a25565b60405161020b9291906126c8565b34801561052357600080fd5b506101fe610532366004612503565b611bb5565b34801561054357600080fd5b5061038f611daf565b34801561055857600080fd5b506101e76105673660046124d3565b611dbe565b6000546001600160a01b0316331461059f5760405162461bcd60e51b815260040161059690612932565b60405180910390fd5b811561063a576001600160a01b0383161515806105b95750805b6105d55760405162461bcd60e51b81526004016105969061284c565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b031991821617909155600180549091169055610656565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b610669612224565b61067284610ef1565b600085815260066020908152604080832033845290915290208151919250906106c49064e8d4a51000906106b09087906001600160801b0316611e28565b816106b757fe5b6001840154919004611e65565b600182015580546106d59085611eb2565b81556005805460009190879081106106e957fe5b6000918252602090912001546001600160a01b03169050801561076f57815460405163e24c761360e01b81526001600160a01b0383169163e24c76139161073c918a9133918a9160009190600401612b53565b600060405180830381600087803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505050505b61079d84866004898154811061078157fe5b6000918252602090912001546001600160a01b03169190611ed5565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516107e19190612b4a565b60405180910390a4505050505050565b600381815481106107fe57fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60085481565b610841612224565b61084a83610ef1565b6000848152600660209081526040808320338452909152812082518154939450909264e8d4a510009161088691906001600160801b0316611e28565b8161088d57fe5b04905060006108b16108ac846001015484611e6590919063ffffffff16565b611fc3565b60018401839055905080156108f4576108f46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683611ed5565b60006005878154811061090357fe5b6000918252602090912001546001600160a01b03169050801561098857835460405163e24c761360e01b81526001600160a01b0383169163e24c761391610955918b9133918c91899190600401612b53565b600060405180830381600087803b15801561096f57600080fd5b505af1158015610983573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109c29190612b4a565b60405180910390a350505050505050565b6000546001600160a01b031633146109fd5760405162461bcd60e51b815260040161059690612932565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60095481565b60008281526006602090815260408083203384529091528120805482825560018201839055600580549293919286908110610a5c57fe5b6000918252602090912001546001600160a01b031690508015610ae15760405163e24c761360e01b81526001600160a01b0382169063e24c761390610aae908890339089906000908190600401612b53565b600060405180830381600087803b158015610ac857600080fd5b505af1158015610adc573d6000803e3d6000fd5b505050505b610af384836004888154811061078157fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610b379190612b4a565b60405180910390a45050505050565b6002546001600160a01b0316610b6e5760405162461bcd60e51b815260040161059690612a00565b600060048281548110610b7d57fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610bb8903090600401612636565b60206040518083038186803b158015610bd057600080fd5b505afa158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0891906124eb565b60025460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b392610c3d92169085906004016126af565b602060405180830381600087803b158015610c5757600080fd5b505af1158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f919061237a565b5060025460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb90610cc1908690600401612636565b602060405180830381600087803b158015610cdb57600080fd5b505af1158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190612396565b6040516370a0823160e01b81529091506001600160a01b038216906370a0823190610d42903090600401612636565b60206040518083038186803b158015610d5a57600080fd5b505afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9291906124eb565b8214610db05760405162461bcd60e51b81526004016105969061287b565b6001600160a01b03811660009081526007602052604090205460ff1615610de95760405162461bcd60e51b81526004016105969061299c565b6001600160a01b03808216600090815260076020526040808220805460ff1990811660011790915592861682529020805490911690556004805482919086908110610e3057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6001546001600160a01b0316338114610e8f5760405162461bcd60e51b815260040161059690612967565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b610ef9612224565b60038281548110610f0657fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b9091041690820152915042111561117657600060048381548110610f6857fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610fa1903090600401612636565b60206040518083038186803b158015610fb957600080fd5b505afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff191906124eb565b9050801561109a57600061101b83602001516001600160401b031642611eb290919063ffffffff16565b9050600060085461104e85604001516001600160401b031661104860095486611e2890919063ffffffff16565b90611e28565b8161105557fe5b04905061108c61107b8461106e8464e8d4a51000611e28565b8161107557fe5b04611fe9565b85516001600160801b031690612012565b6001600160801b0316845250505b6110a342612041565b6001600160401b0316602083015260038054839190859081106110c257fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad3539261116c9290918691612ba0565b60405180910390a2505b919050565b8060005b818110156111ab576111a284848381811061119657fe5b90506020020135610ef1565b5060010161117f565b50505050565b600481815481106111be57fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205460ff1681565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611225908a908a908a908a908a908a908a9060040161266e565b600060405180830381600087803b15801561123f57600080fd5b505af1158015611253573d6000803e3d6000fd5b505050505050505050505050565b6002546001600160a01b031681565b6000546001600160a01b0316331461129a5760405162461bcd60e51b815260040161059690612932565b6112d9836112d3600387815481106112ae57fe5b60009182526020909120015460085490600160c01b90046001600160401b0316611eb2565b9061206a565b6008556112e583612041565b600385815481106112f257fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b03160217905550801561136657816005858154811061133757fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611392576005848154811061137857fe5b6000918252602090912001546001600160a01b0316611394565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e186585846040516113cf929190612b82565b60405180910390a350505050565b6000546001600160a01b031681565b6113f4612224565b6113fd84610ef1565b60008581526006602090815260408083206001600160a01b0387168452909152902080549192509061142f908561206a565b815581516114669064e8d4a51000906114529087906001600160801b0316611e28565b8161145957fe5b600184015491900461208d565b816001018190555060006005868154811061147d57fe5b6000918252602090912001546001600160a01b03169050801561150357815460405163e24c761360e01b81526001600160a01b0383169163e24c7613916114d0918a918991829160009190600401612b53565b600060405180830381600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050505b61153333308760048a8154811061151657fe5b6000918252602090912001546001600160a01b03169291906120d3565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516107e19190612b4a565b60066020908152600092835260408084209091529082529020805460019091015482565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146115e95760405162461bcd60e51b815260040161059690612932565b6001600160a01b03821660009081526007602052604090205460ff16156116225760405162461bcd60e51b81526004016105969061299c565b60085461162f908461206a565b6008556004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b038086166001600160a01b03199283161790925560058054938401815560009081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09093018054928516929091169190911790556040805160608101909152908152600390602081016116dc42612041565b6001600160401b031681526020016116f386612041565b6001600160401b0390811690915282546001818101855560009485526020808620855193018054828701516040978801518716600160c01b026001600160c01b0391909716600160801b0267ffffffffffffffff60801b196001600160801b039097166001600160801b031990931692909217959095161793909316939093179091556001600160a01b03808716808652600790935292909320805460ff1916841790556004549184169290916117a991611eb2565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e5866040516117d89190612b4a565b60405180910390a4505050565b600581815481106111be57fe5b6117fa612224565b61180384610ef1565b6000858152600660209081526040808320338452909152812082518154939450909264e8d4a510009161183f91906001600160801b0316611e28565b8161184657fe5b04905060006118656108ac846001015484611e6590919063ffffffff16565b90506118a064e8d4a5100061189086600001516001600160801b031689611e2890919063ffffffff16565b8161189757fe5b84919004611e65565b600184015582546118b19087611eb2565b83556118e76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683611ed5565b6000600588815481106118f657fe5b6000918252602090912001546001600160a01b03169050801561197b57835460405163e24c761360e01b81526001600160a01b0383169163e24c761391611948918c9133918c91899190600401612b53565b600060405180830381600087803b15801561196257600080fd5b505af1158015611976573d6000803e3d6000fd5b505050505b61198d868860048b8154811061078157fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a6040516119d19190612b4a565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611a139190612b4a565b60405180910390a35050505050505050565b606080836001600160401b0381118015611a3e57600080fd5b50604051908082528060200260200182016040528015611a68578160200160208202803683370190505b509150836001600160401b0381118015611a8157600080fd5b50604051908082528060200260200182016040528015611ab557816020015b6060815260200190600190039081611aa05790505b50905060005b84811015611bac576000606030888885818110611ad457fe5b9050602002810190611ae69190612bca565b604051611af492919061260a565b600060405180830381855af49150503d8060008114611b2f576040519150601f19603f3d011682016040523d82523d6000602084013e611b34565b606091505b50915091508180611b43575085155b611b4c826121c4565b90611b6a5760405162461bcd60e51b8152600401610596919061276d565b5081858481518110611b7857fe5b60200260200101901515908115158152505080848481518110611b9757fe5b60209081029190910101525050600101611abb565b50935093915050565b6000611bbf612224565b60038481548110611bcc57fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600683528385206001600160a01b0389168652909252918320825160048054949650919492169288908110611c4a57fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190611c83903090600401612636565b60206040518083038186803b158015611c9b57600080fd5b505afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd391906124eb565b905083602001516001600160401b031642118015611cf057508015155b15611d76576000611d1785602001516001600160401b031642611eb290919063ffffffff16565b90506000600854611d4487604001516001600160401b031661104860095486611e2890919063ffffffff16565b81611d4b57fe5b049050611d7183611d618364e8d4a51000611e28565b81611d6857fe5b8691900461206a565b935050505b60018301548354611da4916108ac9164e8d4a5100090611d969087611e28565b81611d9d57fe5b0490611e65565b979650505050505050565b6001546001600160a01b031681565b6000546001600160a01b03163314611de85760405162461bcd60e51b815260040161059690612932565b60098190556040517f21adf81b47e9178fa4522d3619145fa8e677d1164e08a618b34944b43510683790611e1d908390612b4a565b60405180910390a150565b6000811580611e4357505080820282828281611e4057fe5b04145b611e5f5760405162461bcd60e51b815260040161059690612ab0565b92915050565b6000818303818312801590611e7a5750838113155b80611e8f5750600083128015611e8f57508381135b611eab5760405162461bcd60e51b815260040161059690612a37565b9392505050565b80820382811115611e5f5760405162461bcd60e51b815260040161059690612780565b60006060846001600160a01b031663a9059cbb8585604051602401611efb9291906126af565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f34919061261a565b6000604051808303816000865af19150503d8060008114611f71576040519150601f19603f3d011682016040523d82523d6000602084013e611f76565b606091505b5091509150818015611fa0575080511580611fa0575080806020019051810190611fa0919061237a565b611fbc5760405162461bcd60e51b8152600401610596906127d4565b5050505050565b600080821215611fe55760405162461bcd60e51b8152600401610596906127af565b5090565b60006001600160801b03821115611fe55760405162461bcd60e51b8152600401610596906128c4565b8181016001600160801b038083169082161015611e5f5760405162461bcd60e51b8152600401610596906128fb565b60006001600160401b03821115611fe55760405162461bcd60e51b8152600401610596906129c9565b81810181811015611e5f5760405162461bcd60e51b8152600401610596906128fb565b60008282018183128015906120a25750838112155b806120b757506000831280156120b757508381125b611eab5760405162461bcd60e51b81526004016105969061280b565b60006060856001600160a01b03166323b872dd8686866040516024016120fb9392919061264a565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612134919061261a565b6000604051808303816000865af19150503d8060008114612171576040519150601f19603f3d011682016040523d82523d6000602084013e612176565b606091505b50915091508180156121a05750805115806121a05750808060200190518101906121a0919061237a565b6121bc5760405162461bcd60e51b815260040161059690612a7b565b505050505050565b606060448251101561220a575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c790000006020820152611176565b60048201915081806020019051810190611e5f9190612439565b604080516060810182526000808252602082018190529181019190915290565b60008083601f840112612255578182fd5b5081356001600160401b0381111561226b578182fd5b602083019150836020808302850101111561228557600080fd5b9250929050565b60006020828403121561229d578081fd5b8135611eab81612c3a565b6000806000606084860312156122bc578182fd5b83356122c781612c3a565b925060208401356122d781612c52565b915060408401356122e781612c52565b809150509250925092565b600080600060408486031215612306578283fd5b83356001600160401b0381111561231b578384fd5b61232786828701612244565b90945092505060208401356122e781612c52565b6000806020838503121561234d578182fd5b82356001600160401b03811115612362578283fd5b61236e85828601612244565b90969095509350505050565b60006020828403121561238b578081fd5b8151611eab81612c52565b6000602082840312156123a7578081fd5b8151611eab81612c3a565b600080600080600080600080610100898b0312156123ce578384fd5b88356123d981612c3a565b975060208901356123e981612c3a565b965060408901356123f981612c3a565b9550606089013594506080890135935060a089013560ff8116811461241c578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561244a578081fd5b81516001600160401b0380821115612460578283fd5b818401915084601f830112612473578283fd5b815181811115612481578384fd5b604051601f8201601f1916810160200183811182821017156124a1578586fd5b6040528181528382016020018710156124b8578485fd5b6124c9826020830160208701612c0e565b9695505050505050565b6000602082840312156124e4578081fd5b5035919050565b6000602082840312156124fc578081fd5b5051919050565b60008060408385031215612515578182fd5b82359150602083013561252781612c3a565b809150509250929050565b600080600060608486031215612546578081fd5b83359250602084013561255881612c3a565b915060408401356122e781612c3a565b60008060006060848603121561257c578081fd5b833592506020840135915060408401356122e781612c3a565b600080600080608085870312156125aa578182fd5b843593506020850135925060408501356125c381612c3a565b915060608501356125d381612c52565b939692955090935050565b600081518084526125f6816020860160208601612c0e565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6000825161262c818460208701612c0e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b828110156127035781511515845292840192908401906001016126e5565b5050508381038285015280855161271a8184612b4a565b91508192508381028201848801865b838110156127535785830385526127418383516125de565b94870194925090860190600101612729565b50909998505050505050505050565b901515815260200190565b600060208252611eab60208301846125de565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b602080825260139082015272151bdad95b88185b1c9958591e481859191959606a1b604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612be0578283fd5b8301803591506001600160401b03821115612bf9578283fd5b60200191503681900382131561228557600080fd5b60005b83811015612c29578181015183820152602001612c11565b838111156111ab5750506000910152565b6001600160a01b0381168114612c4f57600080fd5b50565b8015158114612c4f57600080fdfea264697066735822122090d515d6b8c193213bfc09a9fe8d3439f1cfef415c2f5e1aec580049d648b41164736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106101c25760003560e01c806379d12ffb116100f75780639e8bb65311610095578063d2423b5111610064578063d2423b51146104f6578063d59fc83914610517578063e30c397814610537578063eeca53be1461054c576101c2565b80639e8bb65314610481578063ab7de09814610496578063c346253d146104b6578063d1abb907146104d6576101c2565b806388bba42f116100d157806388bba42f146103fe5780638da5cb5b1461041e5780638dbdbe6d1461043357806393f1a40b14610453576101c2565b806379d12ffb1461039c5780637c516e94146103c95780637cd07e47146103e9576101c2565b806327dc8870116101645780634e71e0c81161013e5780634e71e0c81461030d57806351eb05a61461032257806357a5b58c1461034f57806378ed5d1f1461036f576101c2565b806327dc8870146102b85780632f940c70146102cd578063454b0608146102ed576101c2565b80631526fe27116101a05780631526fe271461023457806317caf6f11461026357806318fccc761461027857806323cf311814610298576101c2565b8063078dfbe7146101c7578063081e3eda146101e95780630ad58d2f14610214575b600080fd5b3480156101d357600080fd5b506101e76101e23660046122a8565b61056c565b005b3480156101f557600080fd5b506101fe61065b565b60405161020b9190612b4a565b60405180910390f35b34801561022057600080fd5b506101e761022f366004612568565b610661565b34801561024057600080fd5b5061025461024f3660046124d3565b6107f1565b60405161020b93929190612b20565b34801561026f57600080fd5b506101fe610833565b34801561028457600080fd5b506101e7610293366004612503565b610839565b3480156102a457600080fd5b506101e76102b336600461228c565b6109d3565b3480156102c457600080fd5b506101fe610a1f565b3480156102d957600080fd5b506101e76102e8366004612503565b610a25565b3480156102f957600080fd5b506101e76103083660046124d3565b610b46565b34801561031957600080fd5b506101e7610e64565b34801561032e57600080fd5b5061034261033d3660046124d3565b610ef1565b60405161020b9190612ae7565b34801561035b57600080fd5b506101e761036a36600461233b565b61117b565b34801561037b57600080fd5b5061038f61038a3660046124d3565b6111b1565b60405161020b9190612636565b3480156103a857600080fd5b506103bc6103b736600461228c565b6111d8565b60405161020b9190612762565b3480156103d557600080fd5b506101e76103e43660046123b2565b6111ed565b3480156103f557600080fd5b5061038f611261565b34801561040a57600080fd5b506101e7610419366004612595565b611270565b34801561042a57600080fd5b5061038f6113dd565b34801561043f57600080fd5b506101e761044e366004612568565b6113ec565b34801561045f57600080fd5b5061047361046e366004612503565b611577565b60405161020b929190612b92565b34801561048d57600080fd5b5061038f61159b565b3480156104a257600080fd5b506101e76104b1366004612532565b6115bf565b3480156104c257600080fd5b5061038f6104d13660046124d3565b6117e5565b3480156104e257600080fd5b506101e76104f1366004612568565b6117f2565b6105096105043660046122f2565b611a25565b60405161020b9291906126c8565b34801561052357600080fd5b506101fe610532366004612503565b611bb5565b34801561054357600080fd5b5061038f611daf565b34801561055857600080fd5b506101e76105673660046124d3565b611dbe565b6000546001600160a01b0316331461059f5760405162461bcd60e51b815260040161059690612932565b60405180910390fd5b811561063a576001600160a01b0383161515806105b95750805b6105d55760405162461bcd60e51b81526004016105969061284c565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b031991821617909155600180549091169055610656565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b610669612224565b61067284610ef1565b600085815260066020908152604080832033845290915290208151919250906106c49064e8d4a51000906106b09087906001600160801b0316611e28565b816106b757fe5b6001840154919004611e65565b600182015580546106d59085611eb2565b81556005805460009190879081106106e957fe5b6000918252602090912001546001600160a01b03169050801561076f57815460405163e24c761360e01b81526001600160a01b0383169163e24c76139161073c918a9133918a9160009190600401612b53565b600060405180830381600087803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505050505b61079d84866004898154811061078157fe5b6000918252602090912001546001600160a01b03169190611ed5565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516107e19190612b4a565b60405180910390a4505050505050565b600381815481106107fe57fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60085481565b610841612224565b61084a83610ef1565b6000848152600660209081526040808320338452909152812082518154939450909264e8d4a510009161088691906001600160801b0316611e28565b8161088d57fe5b04905060006108b16108ac846001015484611e6590919063ffffffff16565b611fc3565b60018401839055905080156108f4576108f46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683611ed5565b60006005878154811061090357fe5b6000918252602090912001546001600160a01b03169050801561098857835460405163e24c761360e01b81526001600160a01b0383169163e24c761391610955918b9133918c91899190600401612b53565b600060405180830381600087803b15801561096f57600080fd5b505af1158015610983573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109c29190612b4a565b60405180910390a350505050505050565b6000546001600160a01b031633146109fd5760405162461bcd60e51b815260040161059690612932565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60095481565b60008281526006602090815260408083203384529091528120805482825560018201839055600580549293919286908110610a5c57fe5b6000918252602090912001546001600160a01b031690508015610ae15760405163e24c761360e01b81526001600160a01b0382169063e24c761390610aae908890339089906000908190600401612b53565b600060405180830381600087803b158015610ac857600080fd5b505af1158015610adc573d6000803e3d6000fd5b505050505b610af384836004888154811061078157fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610b379190612b4a565b60405180910390a45050505050565b6002546001600160a01b0316610b6e5760405162461bcd60e51b815260040161059690612a00565b600060048281548110610b7d57fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610bb8903090600401612636565b60206040518083038186803b158015610bd057600080fd5b505afa158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0891906124eb565b60025460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b392610c3d92169085906004016126af565b602060405180830381600087803b158015610c5757600080fd5b505af1158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f919061237a565b5060025460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb90610cc1908690600401612636565b602060405180830381600087803b158015610cdb57600080fd5b505af1158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190612396565b6040516370a0823160e01b81529091506001600160a01b038216906370a0823190610d42903090600401612636565b60206040518083038186803b158015610d5a57600080fd5b505afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9291906124eb565b8214610db05760405162461bcd60e51b81526004016105969061287b565b6001600160a01b03811660009081526007602052604090205460ff1615610de95760405162461bcd60e51b81526004016105969061299c565b6001600160a01b03808216600090815260076020526040808220805460ff1990811660011790915592861682529020805490911690556004805482919086908110610e3057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6001546001600160a01b0316338114610e8f5760405162461bcd60e51b815260040161059690612967565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b610ef9612224565b60038281548110610f0657fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b9091041690820152915042111561117657600060048381548110610f6857fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610fa1903090600401612636565b60206040518083038186803b158015610fb957600080fd5b505afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff191906124eb565b9050801561109a57600061101b83602001516001600160401b031642611eb290919063ffffffff16565b9050600060085461104e85604001516001600160401b031661104860095486611e2890919063ffffffff16565b90611e28565b8161105557fe5b04905061108c61107b8461106e8464e8d4a51000611e28565b8161107557fe5b04611fe9565b85516001600160801b031690612012565b6001600160801b0316845250505b6110a342612041565b6001600160401b0316602083015260038054839190859081106110c257fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad3539261116c9290918691612ba0565b60405180910390a2505b919050565b8060005b818110156111ab576111a284848381811061119657fe5b90506020020135610ef1565b5060010161117f565b50505050565b600481815481106111be57fe5b6000918252602090912001546001600160a01b0316905081565b60076020526000908152604090205460ff1681565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611225908a908a908a908a908a908a908a9060040161266e565b600060405180830381600087803b15801561123f57600080fd5b505af1158015611253573d6000803e3d6000fd5b505050505050505050505050565b6002546001600160a01b031681565b6000546001600160a01b0316331461129a5760405162461bcd60e51b815260040161059690612932565b6112d9836112d3600387815481106112ae57fe5b60009182526020909120015460085490600160c01b90046001600160401b0316611eb2565b9061206a565b6008556112e583612041565b600385815481106112f257fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b03160217905550801561136657816005858154811061133757fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611392576005848154811061137857fe5b6000918252602090912001546001600160a01b0316611394565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e186585846040516113cf929190612b82565b60405180910390a350505050565b6000546001600160a01b031681565b6113f4612224565b6113fd84610ef1565b60008581526006602090815260408083206001600160a01b0387168452909152902080549192509061142f908561206a565b815581516114669064e8d4a51000906114529087906001600160801b0316611e28565b8161145957fe5b600184015491900461208d565b816001018190555060006005868154811061147d57fe5b6000918252602090912001546001600160a01b03169050801561150357815460405163e24c761360e01b81526001600160a01b0383169163e24c7613916114d0918a918991829160009190600401612b53565b600060405180830381600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050505b61153333308760048a8154811061151657fe5b6000918252602090912001546001600160a01b03169291906120d3565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516107e19190612b4a565b60066020908152600092835260408084209091529082529020805460019091015482565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146115e95760405162461bcd60e51b815260040161059690612932565b6001600160a01b03821660009081526007602052604090205460ff16156116225760405162461bcd60e51b81526004016105969061299c565b60085461162f908461206a565b6008556004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b038086166001600160a01b03199283161790925560058054938401815560009081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09093018054928516929091169190911790556040805160608101909152908152600390602081016116dc42612041565b6001600160401b031681526020016116f386612041565b6001600160401b0390811690915282546001818101855560009485526020808620855193018054828701516040978801518716600160c01b026001600160c01b0391909716600160801b0267ffffffffffffffff60801b196001600160801b039097166001600160801b031990931692909217959095161793909316939093179091556001600160a01b03808716808652600790935292909320805460ff1916841790556004549184169290916117a991611eb2565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e5866040516117d89190612b4a565b60405180910390a4505050565b600581815481106111be57fe5b6117fa612224565b61180384610ef1565b6000858152600660209081526040808320338452909152812082518154939450909264e8d4a510009161183f91906001600160801b0316611e28565b8161184657fe5b04905060006118656108ac846001015484611e6590919063ffffffff16565b90506118a064e8d4a5100061189086600001516001600160801b031689611e2890919063ffffffff16565b8161189757fe5b84919004611e65565b600184015582546118b19087611eb2565b83556118e76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683611ed5565b6000600588815481106118f657fe5b6000918252602090912001546001600160a01b03169050801561197b57835460405163e24c761360e01b81526001600160a01b0383169163e24c761391611948918c9133918c91899190600401612b53565b600060405180830381600087803b15801561196257600080fd5b505af1158015611976573d6000803e3d6000fd5b505050505b61198d868860048b8154811061078157fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a6040516119d19190612b4a565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611a139190612b4a565b60405180910390a35050505050505050565b606080836001600160401b0381118015611a3e57600080fd5b50604051908082528060200260200182016040528015611a68578160200160208202803683370190505b509150836001600160401b0381118015611a8157600080fd5b50604051908082528060200260200182016040528015611ab557816020015b6060815260200190600190039081611aa05790505b50905060005b84811015611bac576000606030888885818110611ad457fe5b9050602002810190611ae69190612bca565b604051611af492919061260a565b600060405180830381855af49150503d8060008114611b2f576040519150601f19603f3d011682016040523d82523d6000602084013e611b34565b606091505b50915091508180611b43575085155b611b4c826121c4565b90611b6a5760405162461bcd60e51b8152600401610596919061276d565b5081858481518110611b7857fe5b60200260200101901515908115158152505080848481518110611b9757fe5b60209081029190910101525050600101611abb565b50935093915050565b6000611bbf612224565b60038481548110611bcc57fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600683528385206001600160a01b0389168652909252918320825160048054949650919492169288908110611c4a57fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190611c83903090600401612636565b60206040518083038186803b158015611c9b57600080fd5b505afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd391906124eb565b905083602001516001600160401b031642118015611cf057508015155b15611d76576000611d1785602001516001600160401b031642611eb290919063ffffffff16565b90506000600854611d4487604001516001600160401b031661104860095486611e2890919063ffffffff16565b81611d4b57fe5b049050611d7183611d618364e8d4a51000611e28565b81611d6857fe5b8691900461206a565b935050505b60018301548354611da4916108ac9164e8d4a5100090611d969087611e28565b81611d9d57fe5b0490611e65565b979650505050505050565b6001546001600160a01b031681565b6000546001600160a01b03163314611de85760405162461bcd60e51b815260040161059690612932565b60098190556040517f21adf81b47e9178fa4522d3619145fa8e677d1164e08a618b34944b43510683790611e1d908390612b4a565b60405180910390a150565b6000811580611e4357505080820282828281611e4057fe5b04145b611e5f5760405162461bcd60e51b815260040161059690612ab0565b92915050565b6000818303818312801590611e7a5750838113155b80611e8f5750600083128015611e8f57508381135b611eab5760405162461bcd60e51b815260040161059690612a37565b9392505050565b80820382811115611e5f5760405162461bcd60e51b815260040161059690612780565b60006060846001600160a01b031663a9059cbb8585604051602401611efb9291906126af565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f34919061261a565b6000604051808303816000865af19150503d8060008114611f71576040519150601f19603f3d011682016040523d82523d6000602084013e611f76565b606091505b5091509150818015611fa0575080511580611fa0575080806020019051810190611fa0919061237a565b611fbc5760405162461bcd60e51b8152600401610596906127d4565b5050505050565b600080821215611fe55760405162461bcd60e51b8152600401610596906127af565b5090565b60006001600160801b03821115611fe55760405162461bcd60e51b8152600401610596906128c4565b8181016001600160801b038083169082161015611e5f5760405162461bcd60e51b8152600401610596906128fb565b60006001600160401b03821115611fe55760405162461bcd60e51b8152600401610596906129c9565b81810181811015611e5f5760405162461bcd60e51b8152600401610596906128fb565b60008282018183128015906120a25750838112155b806120b757506000831280156120b757508381125b611eab5760405162461bcd60e51b81526004016105969061280b565b60006060856001600160a01b03166323b872dd8686866040516024016120fb9392919061264a565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612134919061261a565b6000604051808303816000865af19150503d8060008114612171576040519150601f19603f3d011682016040523d82523d6000602084013e612176565b606091505b50915091508180156121a05750805115806121a05750808060200190518101906121a0919061237a565b6121bc5760405162461bcd60e51b815260040161059690612a7b565b505050505050565b606060448251101561220a575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c790000006020820152611176565b60048201915081806020019051810190611e5f9190612439565b604080516060810182526000808252602082018190529181019190915290565b60008083601f840112612255578182fd5b5081356001600160401b0381111561226b578182fd5b602083019150836020808302850101111561228557600080fd5b9250929050565b60006020828403121561229d578081fd5b8135611eab81612c3a565b6000806000606084860312156122bc578182fd5b83356122c781612c3a565b925060208401356122d781612c52565b915060408401356122e781612c52565b809150509250925092565b600080600060408486031215612306578283fd5b83356001600160401b0381111561231b578384fd5b61232786828701612244565b90945092505060208401356122e781612c52565b6000806020838503121561234d578182fd5b82356001600160401b03811115612362578283fd5b61236e85828601612244565b90969095509350505050565b60006020828403121561238b578081fd5b8151611eab81612c52565b6000602082840312156123a7578081fd5b8151611eab81612c3a565b600080600080600080600080610100898b0312156123ce578384fd5b88356123d981612c3a565b975060208901356123e981612c3a565b965060408901356123f981612c3a565b9550606089013594506080890135935060a089013560ff8116811461241c578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561244a578081fd5b81516001600160401b0380821115612460578283fd5b818401915084601f830112612473578283fd5b815181811115612481578384fd5b604051601f8201601f1916810160200183811182821017156124a1578586fd5b6040528181528382016020018710156124b8578485fd5b6124c9826020830160208701612c0e565b9695505050505050565b6000602082840312156124e4578081fd5b5035919050565b6000602082840312156124fc578081fd5b5051919050565b60008060408385031215612515578182fd5b82359150602083013561252781612c3a565b809150509250929050565b600080600060608486031215612546578081fd5b83359250602084013561255881612c3a565b915060408401356122e781612c3a565b60008060006060848603121561257c578081fd5b833592506020840135915060408401356122e781612c3a565b600080600080608085870312156125aa578182fd5b843593506020850135925060408501356125c381612c3a565b915060608501356125d381612c52565b939692955090935050565b600081518084526125f6816020860160208601612c0e565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6000825161262c818460208701612c0e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b828110156127035781511515845292840192908401906001016126e5565b5050508381038285015280855161271a8184612b4a565b91508192508381028201848801865b838110156127535785830385526127418383516125de565b94870194925090860190600101612729565b50909998505050505050505050565b901515815260200190565b600060208252611eab60208301846125de565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b602080825260139082015272151bdad95b88185b1c9958591e481859191959606a1b604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612be0578283fd5b8301803591506001600160401b03821115612bf9578283fd5b60200191503681900382131561228557600080fd5b60005b83811015612c29578181015183820152602001612c11565b838111156111ab5750506000910152565b6001600160a01b0381168114612c4f57600080fd5b50565b8015158114612c4f57600080fdfea264697066735822122090d515d6b8c193213bfc09a9fe8d3439f1cfef415c2f5e1aec580049d648b41164736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
