{
  "_format": "hh-sol-artifact-1",
  "contractName": "BaseGaugeV1",
  "sourceName": "contracts/gauges/BaseGaugeV1.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_stake",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_registry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimed0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimed1",
          "type": "uint256"
        }
      ],
      "name": "ClaimFees",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "ClaimRewards",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "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": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxRuns",
          "type": "uint256"
        }
      ],
      "name": "batchRewardPerToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "checkpoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balanceOf",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "depositAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "derivedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "derivedBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "derivedSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "earned",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "getPriorBalanceIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "getPriorRewardPerToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "getPriorSupplyIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        }
      ],
      "name": "getReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isReward",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastEarn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "lastTimeRewardApplicable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastUpdateTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "left",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "notifyRewardAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "numCheckpoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "periodFinish",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "rewardPerToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "rewardPerTokenCheckpoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rewardPerToken",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardPerTokenNumCheckpoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardPerTokenStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "rewards",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardsListLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stake",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "supplyCheckpoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "supply",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "supplyNumCheckpoints",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokenIds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userRewardPerTokenStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "withdrawToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c060405260016013553480156200001657600080fd5b506040516200363f3803806200363f833981016040819052620000399162000075565b6001600160601b0319606092831b811660a052911b16608052620000ac565b80516001600160a01b03811681146200007057600080fd5b919050565b6000806040838503121562000088578182fd5b620000938362000058565b9150620000a36020840162000058565b90509250929050565b60805160601c60a05160601c6134f7620001486000396000818161033f015281816112ec0152818161173201528181611c5a015261249901526000818161046a01528181610a9401528181610b2201528181610c1c015281816118030152818161190601528181611a3901528181611bc401528181611cce01528181611e5601528181611ff301528181612519015261269601526134f76000f3fe608060405234801561001057600080fd5b50600436106102125760003560e01c8063853828b611610120578063da09d19d116100b8578063f301af421161007c578063f301af42146105ab578063f7412baf146105be578063fc97a303146105e5578063fd31409814610605578063fdb483c71461061857600080fd5b8063da09d19d14610554578063e2bbb15814610574578063e688639614610587578063e8111a121461058f578063f12297771461059857600080fd5b8063853828b61461048c57806399bcc052146104945780639ce43f90146104a7578063a495e5b5146104c7578063aa479652146104f2578063b66503cf14610512578063c6f678bd14610525578063d35e254414610538578063d7da4bb01461054b57600080fd5b80633a4b66f1116101ae57806363fb415b1161017257806363fb415b146103f25780636fcfff451461041257806370a082311461043257806376f4be36146104525780637b1039991461046557600080fd5b80633a4b66f11461033a5780633ca068b61461036e5780634d5ce038146103995780635a45d052146103cc578063638634ee146103df57600080fd5b806301316ddf146102175780630cdfebfa14610263578063115c6f391461029557806318160ddd146102b6578063211dc32d146102bf578063221ca18c146102d25780632ce9aead146102f25780632e1a7d4d1461031257806331279d3d14610327575b600080fd5b610249610225366004613255565b60116020908152600092835260408084209091529082529020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610249610271366004613255565b600d6020908152600092835260408084209091529082529020805460019091015482565b6102a86102a3366004613255565b61062b565b60405190815260200161025a565b6102a860095481565b6102a86102cd366004613141565b610798565b6102a86102e0366004613109565b60026020526000908152604090205481565b6102a8610300366004613109565b60046020526000908152604090205481565b6103256103203660046132a0565b610a28565b005b610325610335366004613179565b610a5f565b6103617f000000000000000000000000000000000000000000000000000000000000000081565b60405161025a919061332a565b6102a861037c366004613141565b600760209081526000928352604080842090915290825290205481565b6103bc6103a7366004613109565b600c6020526000908152604090205460ff1681565b604051901515815260200161025a565b6103256103da366004613255565b6110a6565b6102a86103ed366004613109565b6110de565b6102a8610400366004613109565b60016020526000908152604090205481565b6102a8610420366004613109565b600e6020526000908152604090205481565b6102a8610440366004613109565b600a6020526000908152604090205481565b6102a86104603660046132a0565b611102565b6103617f000000000000000000000000000000000000000000000000000000000000000081565b610325611234565b6102a86104a2366004613109565b61124f565b6102a86104b5366004613109565b60056020526000908152604090205481565b6102a86104d5366004613141565b600660209081526000928352604080842090915290825290205481565b6102a8610500366004613109565b60126020526000908152604090205481565b610325610520366004613255565b6112c0565b6103256105333660046132a0565b611717565b6102a8610546366004613109565b6117c0565b6102a860005481565b6102a8610562366004613109565b60036020526000908152604090205481565b6103256105823660046132d0565b611b98565b600b546102a8565b6102a860105481565b6102a86105a6366004613109565b612129565b6103616105b93660046132a0565b6121e5565b6102496105cc3660046132a0565b600f602052600090815260409020805460019091015482565b6102a86105f3366004613109565b60086020526000908152604090205481565b610249610613366004613255565b61220f565b6103256106263660046132d0565b61242e565b6001600160a01b0382166000908152600e602052604081205480610653576000915050610792565b6001600160a01b0384166000908152600d60205260408120849161067860018561344e565b815260200190815260200160002060000154116106a25761069a60018261344e565b915050610792565b6001600160a01b0384166000908152600d602090815260408083208380529091529020548310156106d7576000915050610792565b6000806106e560018461344e565b90505b8181111561078d57600060026106fe848461344e565b610708919061340f565b610712908361344e565b6001600160a01b0388166000908152600d602090815260408083208484528252918290208251808401909352805480845260019091015491830191909152919250908714156107675750935061079292505050565b805187111561077857819350610786565b61078360018361344e565b92505b50506106e8565b509150505b92915050565b6001600160a01b0380831660008181526006602090815260408083209486168352938152838220549282526011815283822082805290529182205482916107de916127be565b6001600160a01b0384166000908152600e6020526040902054909150610808576000915050610792565b6000610814848361062b565b6001600160a01b0385166000908152600e60205260408120549192509061083d9060019061344e565b90506000600161084d848461344e565b111561095c57825b61086060018461344e565b81101561095a576001600160a01b0387166000818152600d6020818152604080842086855280835281852082518084019093528054835260019081015483850152958552929091529282906108b69086906133f7565b815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905060006108f58b846000015161220f565b50905060006109088c846000015161220f565b509050670de0b6b3a764000061091e838361344e565b856020015161092d919061342f565b610937919061340f565b61094190876133f7565b955050505050808061095290613465565b915050610855565b505b6001600160a01b0386166000908152600d602090815260408083208584528252808320815180830190925280548083526001909101549282019290925291906109a6908a9061220f565b506001600160a01b03808b166000908152600760209081526040808320938d1683529290522054909150670de0b6b3a7640000906109e59083906127be565b6109ee8b612129565b6109f8919061344e565b8360200151610a07919061342f565b610a11919061340f565b610a1b90846133f7565b9998505050505050505050565b336000908152600a6020526040812054821415610a515750336000908152600860205260409020545b610a5b828261242e565b5050565b601354600114610a8a5760405162461bcd60e51b8152600401610a8190613390565b60405180910390fd5b60026013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b50505050816001600160a01b0316336001600160a01b03161480610bc657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381ca29a16040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7957600080fd5b505afa158015610b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb19190613125565b6001600160a01b0316336001600160a01b0316145b610c125760405162461bcd60e51b815260206004820152601b60248201527f73656e646572206e6f74206163636f756e74206f7220766f74657200000000006044820152606401610a81565b60016013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381ca29a16040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7357600080fd5b505afa158015610c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab9190613125565b6001600160a01b03166363453ae1306040518263ffffffff1660e01b8152600401610cd6919061332a565b600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b5050600260135550600090505b815181101561100057610d4a828281518110610d3d57634e487b7160e01b600052603260045260246000fd5b60200260200101516127d5565b60056000858581518110610d6e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600060046000878781518110610dbc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008491905055839190505550506000610e25838381518110610e1757634e487b7160e01b600052603260045260246000fd5b602002602001015185610798565b90504260066000858581518110610e4c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000208190555060056000848481518110610ebf57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205460076000858581518110610f0c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b039081168352828201939093526040918201600090812093891681529290529020558015610f7957610f79838381518110610f6a57634e487b7160e01b600052603260045260246000fd5b602002602001015185836129b8565b828281518110610f9957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316336001600160a01b03167f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc983604051610fe591815260200190565b60405180910390a35080610ff881613465565b915050610d11565b506001600160a01b038216600090815260016020526040812054815490918291819061102d90849061344e565b9091555061103c9050836117c0565b6001600160a01b038416600090815260016020526040812082905580549192508291819061106b9084906133f7565b90915550506001600160a01b038316600090815260016020526040902054611094908490612aef565b61109c612bfa565b5050600160135550565b6110b08282612c9d565b6001600160a01b03909316600090815260056020908152604080832060049092529091209390935590915550565b6001600160a01b038116600090815260036020526040812054610792904290612dfc565b601054600090806111165750600092915050565b82600f600061112660018561344e565b8152602001908152602001600020600001541161114f5761114860018261344e565b9392505050565b60008052600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755483101561118a5750600092915050565b60008061119860018461344e565b90505b8181111561122c57600060026111b1848461344e565b6111bb919061340f565b6111c5908361344e565b6000818152600f6020908152604091829020825180840190935280548084526001909101549183019190915291925090871415611206575095945050505050565b805187111561121757819350611225565b61122260018361344e565b92505b505061119b565b509392505050565b336000908152600a602052604090205461124d90610a28565b565b6001600160a01b038116600090815260036020526040812054421061127657506000919050565b6001600160a01b03821660009081526003602052604081205461129a90429061344e565b6001600160a01b038416600090815260026020526040902054909150611148908261342f565b6013546001146112e25760405162461bcd60e51b8152600401610a8190613390565b60026013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561135c5760405162461bcd60e51b815260206004820152600d60248201526c746f6b656e203d207374616b6560981b6044820152606401610a81565b6000811161137c5760405162461bcd60e51b8152600401610a81906133b4565b6001600160a01b0382166000908152600260205260409020546113a5576113a582600042612e0b565b6113ae826127d5565b6001600160a01b038416600090815260056020908152604080832060048352818420949094559390925560039091522054421061141c576113f182333084612efa565b6113fe62093a808261340f565b6001600160a01b0383166000908152600260205260409020556114e8565b6001600160a01b03821660009081526003602052604081205461144090429061344e565b6001600160a01b03841660009081526002602052604081205491925090611467908361342f565b90508083116114a85760405162461bcd60e51b815260206004820152600d60248201526c185b5bdd5b9d080f881b19599d609a1b6044820152606401610a81565b6114b484333086612efa565b62093a806114c282856133f7565b6114cc919061340f565b6001600160a01b03851660009081526002602052604090205550505b6001600160a01b03821660009081526002602052604090205461153e5760405162461bcd60e51b815260206004820152600e60248201526d072657761726472617465203d20360941b6044820152606401610a81565b6040516370a0823160e01b81526000906001600160a01b038416906370a082319061156d90309060040161332a565b60206040518083038186803b15801561158557600080fd5b505afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd91906132b8565b90506115cc62093a808261340f565b6001600160a01b038416600090815260026020526040902054111561162e5760405162461bcd60e51b81526020600482015260186024820152770a0e4deecd2c8cac840e4caeec2e4c840e8dede40d0d2ced60431b6044820152606401610a81565b61163b62093a80426133f7565b6001600160a01b038416600090815260036020908152604080832093909355600c9052205460ff166116cd576001600160a01b0383166000818152600c60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b03191690911790555b6040518281526001600160a01b0384169033907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a35050600160135550565b6040516370a0823160e01b81526117bd906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061176790339060040161332a565b60206040518083038186803b15801561177f57600080fd5b505afa158015611793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b791906132b8565b82611b98565b50565b6001600160a01b038116600090815260086020908152604080832054600a9092528220548260646117f283601461342f565b6117fc919061340f565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561185a57600080fd5b505afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190613125565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118ca57600080fd5b505afa1580156118de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190291906132b8565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561195d57600080fd5b505afa158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190613125565b6001600160a01b0316636352211e866040518263ffffffff1660e01b81526004016119c291815260200190565b60206040518083038186803b1580156119da57600080fd5b505afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190613125565b6001600160a01b0316876001600160a01b0316148015611a325750600081115b15611b7a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9057600080fd5b505afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190613125565b6001600160a01b031663e7e242d4866040518263ffffffff1660e01b8152600401611af591815260200190565b60206040518083038186803b158015611b0d57600080fd5b505afa158015611b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4591906132b8565b915060648183600954611b58919061342f565b611b62919061340f565b611b6d90605061342f565b611b77919061340f565b91505b611b8d611b8783856133f7565b85612dfc565b979650505050505050565b601354600114611bba5760405162461bcd60e51b8152600401610a8190613390565b60026013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1d57600080fd5b505af1158015611c31573d6000803e3d6000fd5b5050505060008211611c555760405162461bcd60e51b8152600401610a81906133b4565b611c817f0000000000000000000000000000000000000000000000000000000000000000333085612efa565b8160096000828254611c9391906133f7565b9091555050336000908152600a602052604081208054849290611cb79084906133f7565b90915550508015611f6f57336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2557600080fd5b505afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d9190613125565b6001600160a01b0316636352211e836040518263ffffffff1660e01b8152600401611d8a91815260200190565b60206040518083038186803b158015611da257600080fd5b505afa158015611db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dda9190613125565b6001600160a01b031614611e1c5760405162461bcd60e51b81526020600482015260096024820152683130b21037bbb732b960b91b6044820152606401610a81565b33600090815260086020526040902054611f3c573360009081526008602090815260409182902083905581516381ca29a160e01b815291517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316926381ca29a1926004808301939192829003018186803b158015611ea157600080fd5b505afa158015611eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed99190613125565b60405163698473e360e01b8152600481018390523360248201526001600160a01b03919091169063698473e390604401600060405180830381600087803b158015611f2357600080fd5b505af1158015611f37573d6000803e3d6000fd5b505050505b336000908152600860205260409020548114611f6a5760405162461bcd60e51b8152600401610a819061336b565b611f81565b50336000908152600860205260409020545b336000908152600160205260408120548154909182918190611fa490849061344e565b90915550611fb39050336117c0565b336000908152600160205260408120829055805491925082918190611fd99084906133f7565b90915550611fe990503382612aef565b611ff1612bfa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381ca29a16040518163ffffffff1660e01b815260040160206040518083038186803b15801561204a57600080fd5b505afa15801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190613125565b6001600160a01b031663a61c713a8333866040518463ffffffff1660e01b81526004016120b1939291906133d8565b600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b505060408051858152602081018790523393507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159250015b60405180910390a25050600160135550565b6000805461214d57506001600160a01b031660009081526005602052604090205490565b600080546001600160a01b038416825260026020908152604080842054600483528185205460039093529320549192670de0b6b3a764000092909161219191612dfc565b61219a866110de565b6121a4919061344e565b6121ae919061342f565b6121b8919061342f565b6121c2919061340f565b6001600160a01b03831660009081526005602052604090205461079291906133f7565b600b81815481106121f557600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b03821660009081526012602052604081205481908061223c576000809250925050612427565b6001600160a01b0385166000908152601160205260408120859161226160018561344e565b815260200190815260200160002060000154116122fe576001600160a01b03851660009081526011602052604081209061229c60018461344e565b81526020019081526020016000206001015460116000876001600160a01b03166001600160a01b0316815260200190815260200160002060006001846122e2919061344e565b8152602001908152602001600020600001549250925050612427565b6001600160a01b0385166000908152601160209081526040808320838052909152902054841015612336576000809250925050612427565b60008061234460018461344e565b90505b818111156123f6576000600261235d848461344e565b612367919061340f565b612371908361344e565b6001600160a01b03891660009081526011602090815260408083208484528252918290208251808401909352805480845260019091015491830191909152919250908814156123d0576020810151905190965094506124279350505050565b80518811156123e1578193506123ef565b6123ec60018361344e565b92505b5050612347565b506001600160a01b038616600090815260116020908152604080832093835292905220600181015490549093509150505b9250929050565b6013546001146124505760405162461bcd60e51b8152600401610a8190613390565b6002601381905550816009600082825461246a919061344e565b9091555050336000908152600a60205260408120805484929061248e90849061344e565b909155506124bf90507f000000000000000000000000000000000000000000000000000000000000000033846129b8565b8015612603573360009081526008602052604090205481146124f35760405162461bcd60e51b8152600401610a819061336b565b3360009081526008602090815260408083209290925581516381ca29a160e01b815291517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316926381ca29a1926004808301939192829003018186803b15801561256457600080fd5b505afa158015612578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259c9190613125565b60405163411b1f7760e01b8152600481018390523360248201526001600160a01b03919091169063411b1f7790604401600060405180830381600087803b1580156125e657600080fd5b505af11580156125fa573d6000803e3d6000fd5b50505050612615565b50336000908152600860205260409020545b33600090815260016020526040812054815490918291819061263890849061344e565b909155506126479050336117c0565b33600090815260016020526040812082905580549192508291819061266d9084906133f7565b90915550503360008181526001602052604090205461268c9190612aef565b612694612bfa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381ca29a16040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ed57600080fd5b505afa158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190613125565b6001600160a01b031663ea94ee448333866040518463ffffffff1660e01b8152600401612754939291906133d8565b600060405180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505060408051858152602081018790523393507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568925001612117565b6000818310156127ce5781611148565b5090919050565b6001600160a01b03811660009081526004602090815260408083205460059092528220546010548392919061280d5794909350915050565b6001600160a01b038516600090815260026020526040902054612834579442945092505050565b600061283f83611102565b905060006001601054612852919061344e565b90506001612860838361344e565b111561293857815b61287360018361344e565b811015612936576000818152600f60209081526040918290208251808401909352805483526001015490820181905215612923576000600f816128b78560016133f7565b81526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506000806129028c8460000151866000015187602001518d61303e565b909250905061291182896133f7565b975061291e8c8983612e0b565b975050505b508061292e81613465565b915050612868565b505b6000818152600f602090815260409182902082518084019093528054835260010154908201819052156129aa57600061298b896129748b6110de565b8451612980908a6127be565b85602001518a61303e565b50905061299881866133f7565b94506129a5898642612e0b565b429550505b509196929550919350505050565b6000836001600160a01b03163b116129e25760405162461bcd60e51b8152600401610a819061333e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612a3e91906132f1565b6000604051808303816000865af19150503d8060008114612a7b576040519150601f19603f3d011682016040523d82523d6000602084013e612a80565b606091505b5091509150818015612aaa575080511580612aaa575080806020019051810190612aaa9190613280565b612ae85760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610a81565b5050505050565b6001600160a01b0382166000908152600e602052604090205442908015801590612b4d57506001600160a01b0384166000908152600d602052604081208391612b3960018561344e565b815260200190815260200160002060000154145b15612b90576001600160a01b0384166000908152600d602052604081208491612b7760018561344e565b8152602081019190915260400160002060010155612bf4565b60408051808201825283815260208082018681526001600160a01b0388166000908152600d8352848120868252909252929020905181559051600191820155612bda9082906133f7565b6001600160a01b0385166000908152600e60205260409020555b50505050565b601054428115801590612c2c575080600f6000612c1860018661344e565b815260200190815260200160002060000154145b15612c5d57600054600f6000600185612c45919061344e565b81526020810191909152604001600020600101555050565b604080518082018252828152600080546020808401918252868352600f9052929020905181559051600191820155612c969083906133f7565b6010555050565b6001600160a01b038216600090815260046020908152604080832054600590925282205460105483929190612cd55792509050612427565b6001600160a01b038616600090815260026020526040902054612cfe5792504291506124279050565b6000612d0983611102565b90506000612d256001601054612d1f919061344e565b88612dfc565b9050815b81811015612ded576000818152600f60209081526040918290208251808401909352805483526001015490820181905215612dda576000600f81612d6e8560016133f7565b8152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050600080612db98d8460000151866000015187602001518d61303e565b9092509050612dc882896133f7565b9750612dd58d8983612e0b565b975050505b5080612de581613465565b915050612d29565b50919792965091945050505050565b60008183106127ce5781611148565b6001600160a01b0383166000908152601260205260409020548015801590612e6757506001600160a01b03841660009081526011602052604081208391612e5360018561344e565b815260200190815260200160002060000154145b15612e91576001600160a01b03841660009081526011602052604081208491612b7760018561344e565b60408051808201825283815260208082018681526001600160a01b038816600090815260118352848120868252909252929020905181559051600191820155612edb9082906133f7565b6001600160a01b03851660009081526012602052604090205550505050565b6000846001600160a01b03163b11612f245760405162461bcd60e51b8152600401610a819061333e565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612f8891906132f1565b6000604051808303816000865af19150503d8060008114612fc5576040519150601f19603f3d011682016040523d82523d6000602084013e612fca565b606091505b5091509150818015612ff4575080511580612ff4575080806020019051810190612ff49190613280565b6130365760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610a81565b505050505050565b600080600061304d87856127be565b6001600160a01b0389166000908152600260205260409020549091508590670de0b6b3a7640000906130a06130828a896127be565b6001600160a01b038d16600090815260036020526040902054612dfc565b6001600160a01b038c166000908152600360205260409020546130c4908690612dfc565b6130ce919061344e565b6130d8919061342f565b6130e2919061342f565b6130ec919061340f565b9890975095505050505050565b8035613104816134ac565b919050565b60006020828403121561311a578081fd5b8135611148816134ac565b600060208284031215613136578081fd5b8151611148816134ac565b60008060408385031215613153578081fd5b823561315e816134ac565b9150602083013561316e816134ac565b809150509250929050565b6000806040838503121561318b578182fd5b8235613196816134ac565b915060208381013567ffffffffffffffff808211156131b3578384fd5b818601915086601f8301126131c6578384fd5b8135818111156131d8576131d8613496565b8060051b604051601f19603f830116810181811085821117156131fd576131fd613496565b604052828152858101935084860182860187018b101561321b578788fd5b8795505b8386101561324457613230816130f9565b85526001959095019493860193860161321f565b508096505050505050509250929050565b60008060408385031215613267578182fd5b8235613272816134ac565b946020939093013593505050565b600060208284031215613291578081fd5b81518015158114611148578182fd5b6000602082840312156132b1578081fd5b5035919050565b6000602082840312156132c9578081fd5b5051919050565b600080604083850312156132e2578182fd5b50508035926020909101359150565b60008251815b8181101561331157602081860181015185830152016132f7565b8181111561331f5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6020808252601390820152720d2dcecc2d8d2c840c6dec8ca40d8cadccee8d606b1b604082015260600190565b6020808252600b908201526a189859081d1bdad95b925960aa1b604082015260600190565b6020808252600a90820152697265656e7472616e637960b01b604082015260600190565b6020808252600a90820152690616d6f756e74203d20360b41b604082015260600190565b9283526001600160a01b03919091166020830152604082015260600190565b6000821982111561340a5761340a613480565b500190565b60008261342a57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561344957613449613480565b500290565b60008282101561346057613460613480565b500390565b600060001982141561347957613479613480565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146117bd57600080fdfea2646970667358221220568400afb41149f20f1cb507561d9729c6cef6239c72b9b59ea0614ae344cb8364736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102125760003560e01c8063853828b611610120578063da09d19d116100b8578063f301af421161007c578063f301af42146105ab578063f7412baf146105be578063fc97a303146105e5578063fd31409814610605578063fdb483c71461061857600080fd5b8063da09d19d14610554578063e2bbb15814610574578063e688639614610587578063e8111a121461058f578063f12297771461059857600080fd5b8063853828b61461048c57806399bcc052146104945780639ce43f90146104a7578063a495e5b5146104c7578063aa479652146104f2578063b66503cf14610512578063c6f678bd14610525578063d35e254414610538578063d7da4bb01461054b57600080fd5b80633a4b66f1116101ae57806363fb415b1161017257806363fb415b146103f25780636fcfff451461041257806370a082311461043257806376f4be36146104525780637b1039991461046557600080fd5b80633a4b66f11461033a5780633ca068b61461036e5780634d5ce038146103995780635a45d052146103cc578063638634ee146103df57600080fd5b806301316ddf146102175780630cdfebfa14610263578063115c6f391461029557806318160ddd146102b6578063211dc32d146102bf578063221ca18c146102d25780632ce9aead146102f25780632e1a7d4d1461031257806331279d3d14610327575b600080fd5b610249610225366004613255565b60116020908152600092835260408084209091529082529020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610249610271366004613255565b600d6020908152600092835260408084209091529082529020805460019091015482565b6102a86102a3366004613255565b61062b565b60405190815260200161025a565b6102a860095481565b6102a86102cd366004613141565b610798565b6102a86102e0366004613109565b60026020526000908152604090205481565b6102a8610300366004613109565b60046020526000908152604090205481565b6103256103203660046132a0565b610a28565b005b610325610335366004613179565b610a5f565b6103617f000000000000000000000000000000000000000000000000000000000000000081565b60405161025a919061332a565b6102a861037c366004613141565b600760209081526000928352604080842090915290825290205481565b6103bc6103a7366004613109565b600c6020526000908152604090205460ff1681565b604051901515815260200161025a565b6103256103da366004613255565b6110a6565b6102a86103ed366004613109565b6110de565b6102a8610400366004613109565b60016020526000908152604090205481565b6102a8610420366004613109565b600e6020526000908152604090205481565b6102a8610440366004613109565b600a6020526000908152604090205481565b6102a86104603660046132a0565b611102565b6103617f000000000000000000000000000000000000000000000000000000000000000081565b610325611234565b6102a86104a2366004613109565b61124f565b6102a86104b5366004613109565b60056020526000908152604090205481565b6102a86104d5366004613141565b600660209081526000928352604080842090915290825290205481565b6102a8610500366004613109565b60126020526000908152604090205481565b610325610520366004613255565b6112c0565b6103256105333660046132a0565b611717565b6102a8610546366004613109565b6117c0565b6102a860005481565b6102a8610562366004613109565b60036020526000908152604090205481565b6103256105823660046132d0565b611b98565b600b546102a8565b6102a860105481565b6102a86105a6366004613109565b612129565b6103616105b93660046132a0565b6121e5565b6102496105cc3660046132a0565b600f602052600090815260409020805460019091015482565b6102a86105f3366004613109565b60086020526000908152604090205481565b610249610613366004613255565b61220f565b6103256106263660046132d0565b61242e565b6001600160a01b0382166000908152600e602052604081205480610653576000915050610792565b6001600160a01b0384166000908152600d60205260408120849161067860018561344e565b815260200190815260200160002060000154116106a25761069a60018261344e565b915050610792565b6001600160a01b0384166000908152600d602090815260408083208380529091529020548310156106d7576000915050610792565b6000806106e560018461344e565b90505b8181111561078d57600060026106fe848461344e565b610708919061340f565b610712908361344e565b6001600160a01b0388166000908152600d602090815260408083208484528252918290208251808401909352805480845260019091015491830191909152919250908714156107675750935061079292505050565b805187111561077857819350610786565b61078360018361344e565b92505b50506106e8565b509150505b92915050565b6001600160a01b0380831660008181526006602090815260408083209486168352938152838220549282526011815283822082805290529182205482916107de916127be565b6001600160a01b0384166000908152600e6020526040902054909150610808576000915050610792565b6000610814848361062b565b6001600160a01b0385166000908152600e60205260408120549192509061083d9060019061344e565b90506000600161084d848461344e565b111561095c57825b61086060018461344e565b81101561095a576001600160a01b0387166000818152600d6020818152604080842086855280835281852082518084019093528054835260019081015483850152958552929091529282906108b69086906133f7565b815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905060006108f58b846000015161220f565b50905060006109088c846000015161220f565b509050670de0b6b3a764000061091e838361344e565b856020015161092d919061342f565b610937919061340f565b61094190876133f7565b955050505050808061095290613465565b915050610855565b505b6001600160a01b0386166000908152600d602090815260408083208584528252808320815180830190925280548083526001909101549282019290925291906109a6908a9061220f565b506001600160a01b03808b166000908152600760209081526040808320938d1683529290522054909150670de0b6b3a7640000906109e59083906127be565b6109ee8b612129565b6109f8919061344e565b8360200151610a07919061342f565b610a11919061340f565b610a1b90846133f7565b9998505050505050505050565b336000908152600a6020526040812054821415610a515750336000908152600860205260409020545b610a5b828261242e565b5050565b601354600114610a8a5760405162461bcd60e51b8152600401610a8190613390565b60405180910390fd5b60026013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b50505050816001600160a01b0316336001600160a01b03161480610bc657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381ca29a16040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7957600080fd5b505afa158015610b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb19190613125565b6001600160a01b0316336001600160a01b0316145b610c125760405162461bcd60e51b815260206004820152601b60248201527f73656e646572206e6f74206163636f756e74206f7220766f74657200000000006044820152606401610a81565b60016013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381ca29a16040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7357600080fd5b505afa158015610c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab9190613125565b6001600160a01b03166363453ae1306040518263ffffffff1660e01b8152600401610cd6919061332a565b600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b5050600260135550600090505b815181101561100057610d4a828281518110610d3d57634e487b7160e01b600052603260045260246000fd5b60200260200101516127d5565b60056000858581518110610d6e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600060046000878781518110610dbc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008491905055839190505550506000610e25838381518110610e1757634e487b7160e01b600052603260045260246000fd5b602002602001015185610798565b90504260066000858581518110610e4c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000208190555060056000848481518110610ebf57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205460076000858581518110610f0c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b039081168352828201939093526040918201600090812093891681529290529020558015610f7957610f79838381518110610f6a57634e487b7160e01b600052603260045260246000fd5b602002602001015185836129b8565b828281518110610f9957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316336001600160a01b03167f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc983604051610fe591815260200190565b60405180910390a35080610ff881613465565b915050610d11565b506001600160a01b038216600090815260016020526040812054815490918291819061102d90849061344e565b9091555061103c9050836117c0565b6001600160a01b038416600090815260016020526040812082905580549192508291819061106b9084906133f7565b90915550506001600160a01b038316600090815260016020526040902054611094908490612aef565b61109c612bfa565b5050600160135550565b6110b08282612c9d565b6001600160a01b03909316600090815260056020908152604080832060049092529091209390935590915550565b6001600160a01b038116600090815260036020526040812054610792904290612dfc565b601054600090806111165750600092915050565b82600f600061112660018561344e565b8152602001908152602001600020600001541161114f5761114860018261344e565b9392505050565b60008052600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755483101561118a5750600092915050565b60008061119860018461344e565b90505b8181111561122c57600060026111b1848461344e565b6111bb919061340f565b6111c5908361344e565b6000818152600f6020908152604091829020825180840190935280548084526001909101549183019190915291925090871415611206575095945050505050565b805187111561121757819350611225565b61122260018361344e565b92505b505061119b565b509392505050565b336000908152600a602052604090205461124d90610a28565b565b6001600160a01b038116600090815260036020526040812054421061127657506000919050565b6001600160a01b03821660009081526003602052604081205461129a90429061344e565b6001600160a01b038416600090815260026020526040902054909150611148908261342f565b6013546001146112e25760405162461bcd60e51b8152600401610a8190613390565b60026013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561135c5760405162461bcd60e51b815260206004820152600d60248201526c746f6b656e203d207374616b6560981b6044820152606401610a81565b6000811161137c5760405162461bcd60e51b8152600401610a81906133b4565b6001600160a01b0382166000908152600260205260409020546113a5576113a582600042612e0b565b6113ae826127d5565b6001600160a01b038416600090815260056020908152604080832060048352818420949094559390925560039091522054421061141c576113f182333084612efa565b6113fe62093a808261340f565b6001600160a01b0383166000908152600260205260409020556114e8565b6001600160a01b03821660009081526003602052604081205461144090429061344e565b6001600160a01b03841660009081526002602052604081205491925090611467908361342f565b90508083116114a85760405162461bcd60e51b815260206004820152600d60248201526c185b5bdd5b9d080f881b19599d609a1b6044820152606401610a81565b6114b484333086612efa565b62093a806114c282856133f7565b6114cc919061340f565b6001600160a01b03851660009081526002602052604090205550505b6001600160a01b03821660009081526002602052604090205461153e5760405162461bcd60e51b815260206004820152600e60248201526d072657761726472617465203d20360941b6044820152606401610a81565b6040516370a0823160e01b81526000906001600160a01b038416906370a082319061156d90309060040161332a565b60206040518083038186803b15801561158557600080fd5b505afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd91906132b8565b90506115cc62093a808261340f565b6001600160a01b038416600090815260026020526040902054111561162e5760405162461bcd60e51b81526020600482015260186024820152770a0e4deecd2c8cac840e4caeec2e4c840e8dede40d0d2ced60431b6044820152606401610a81565b61163b62093a80426133f7565b6001600160a01b038416600090815260036020908152604080832093909355600c9052205460ff166116cd576001600160a01b0383166000818152600c60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b03191690911790555b6040518281526001600160a01b0384169033907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf508269060200160405180910390a35050600160135550565b6040516370a0823160e01b81526117bd906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061176790339060040161332a565b60206040518083038186803b15801561177f57600080fd5b505afa158015611793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b791906132b8565b82611b98565b50565b6001600160a01b038116600090815260086020908152604080832054600a9092528220548260646117f283601461342f565b6117fc919061340f565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561185a57600080fd5b505afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190613125565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118ca57600080fd5b505afa1580156118de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190291906132b8565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561195d57600080fd5b505afa158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190613125565b6001600160a01b0316636352211e866040518263ffffffff1660e01b81526004016119c291815260200190565b60206040518083038186803b1580156119da57600080fd5b505afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190613125565b6001600160a01b0316876001600160a01b0316148015611a325750600081115b15611b7a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9057600080fd5b505afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190613125565b6001600160a01b031663e7e242d4866040518263ffffffff1660e01b8152600401611af591815260200190565b60206040518083038186803b158015611b0d57600080fd5b505afa158015611b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4591906132b8565b915060648183600954611b58919061342f565b611b62919061340f565b611b6d90605061342f565b611b77919061340f565b91505b611b8d611b8783856133f7565b85612dfc565b979650505050505050565b601354600114611bba5760405162461bcd60e51b8152600401610a8190613390565b60026013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1d57600080fd5b505af1158015611c31573d6000803e3d6000fd5b5050505060008211611c555760405162461bcd60e51b8152600401610a81906133b4565b611c817f0000000000000000000000000000000000000000000000000000000000000000333085612efa565b8160096000828254611c9391906133f7565b9091555050336000908152600a602052604081208054849290611cb79084906133f7565b90915550508015611f6f57336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2557600080fd5b505afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d9190613125565b6001600160a01b0316636352211e836040518263ffffffff1660e01b8152600401611d8a91815260200190565b60206040518083038186803b158015611da257600080fd5b505afa158015611db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dda9190613125565b6001600160a01b031614611e1c5760405162461bcd60e51b81526020600482015260096024820152683130b21037bbb732b960b91b6044820152606401610a81565b33600090815260086020526040902054611f3c573360009081526008602090815260409182902083905581516381ca29a160e01b815291517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316926381ca29a1926004808301939192829003018186803b158015611ea157600080fd5b505afa158015611eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed99190613125565b60405163698473e360e01b8152600481018390523360248201526001600160a01b03919091169063698473e390604401600060405180830381600087803b158015611f2357600080fd5b505af1158015611f37573d6000803e3d6000fd5b505050505b336000908152600860205260409020548114611f6a5760405162461bcd60e51b8152600401610a819061336b565b611f81565b50336000908152600860205260409020545b336000908152600160205260408120548154909182918190611fa490849061344e565b90915550611fb39050336117c0565b336000908152600160205260408120829055805491925082918190611fd99084906133f7565b90915550611fe990503382612aef565b611ff1612bfa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381ca29a16040518163ffffffff1660e01b815260040160206040518083038186803b15801561204a57600080fd5b505afa15801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190613125565b6001600160a01b031663a61c713a8333866040518463ffffffff1660e01b81526004016120b1939291906133d8565b600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b505060408051858152602081018790523393507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159250015b60405180910390a25050600160135550565b6000805461214d57506001600160a01b031660009081526005602052604090205490565b600080546001600160a01b038416825260026020908152604080842054600483528185205460039093529320549192670de0b6b3a764000092909161219191612dfc565b61219a866110de565b6121a4919061344e565b6121ae919061342f565b6121b8919061342f565b6121c2919061340f565b6001600160a01b03831660009081526005602052604090205461079291906133f7565b600b81815481106121f557600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b03821660009081526012602052604081205481908061223c576000809250925050612427565b6001600160a01b0385166000908152601160205260408120859161226160018561344e565b815260200190815260200160002060000154116122fe576001600160a01b03851660009081526011602052604081209061229c60018461344e565b81526020019081526020016000206001015460116000876001600160a01b03166001600160a01b0316815260200190815260200160002060006001846122e2919061344e565b8152602001908152602001600020600001549250925050612427565b6001600160a01b0385166000908152601160209081526040808320838052909152902054841015612336576000809250925050612427565b60008061234460018461344e565b90505b818111156123f6576000600261235d848461344e565b612367919061340f565b612371908361344e565b6001600160a01b03891660009081526011602090815260408083208484528252918290208251808401909352805480845260019091015491830191909152919250908814156123d0576020810151905190965094506124279350505050565b80518811156123e1578193506123ef565b6123ec60018361344e565b92505b5050612347565b506001600160a01b038616600090815260116020908152604080832093835292905220600181015490549093509150505b9250929050565b6013546001146124505760405162461bcd60e51b8152600401610a8190613390565b6002601381905550816009600082825461246a919061344e565b9091555050336000908152600a60205260408120805484929061248e90849061344e565b909155506124bf90507f000000000000000000000000000000000000000000000000000000000000000033846129b8565b8015612603573360009081526008602052604090205481146124f35760405162461bcd60e51b8152600401610a819061336b565b3360009081526008602090815260408083209290925581516381ca29a160e01b815291517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316926381ca29a1926004808301939192829003018186803b15801561256457600080fd5b505afa158015612578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259c9190613125565b60405163411b1f7760e01b8152600481018390523360248201526001600160a01b03919091169063411b1f7790604401600060405180830381600087803b1580156125e657600080fd5b505af11580156125fa573d6000803e3d6000fd5b50505050612615565b50336000908152600860205260409020545b33600090815260016020526040812054815490918291819061263890849061344e565b909155506126479050336117c0565b33600090815260016020526040812082905580549192508291819061266d9084906133f7565b90915550503360008181526001602052604090205461268c9190612aef565b612694612bfa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381ca29a16040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ed57600080fd5b505afa158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190613125565b6001600160a01b031663ea94ee448333866040518463ffffffff1660e01b8152600401612754939291906133d8565b600060405180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505060408051858152602081018790523393507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568925001612117565b6000818310156127ce5781611148565b5090919050565b6001600160a01b03811660009081526004602090815260408083205460059092528220546010548392919061280d5794909350915050565b6001600160a01b038516600090815260026020526040902054612834579442945092505050565b600061283f83611102565b905060006001601054612852919061344e565b90506001612860838361344e565b111561293857815b61287360018361344e565b811015612936576000818152600f60209081526040918290208251808401909352805483526001015490820181905215612923576000600f816128b78560016133f7565b81526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506000806129028c8460000151866000015187602001518d61303e565b909250905061291182896133f7565b975061291e8c8983612e0b565b975050505b508061292e81613465565b915050612868565b505b6000818152600f602090815260409182902082518084019093528054835260010154908201819052156129aa57600061298b896129748b6110de565b8451612980908a6127be565b85602001518a61303e565b50905061299881866133f7565b94506129a5898642612e0b565b429550505b509196929550919350505050565b6000836001600160a01b03163b116129e25760405162461bcd60e51b8152600401610a819061333e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612a3e91906132f1565b6000604051808303816000865af19150503d8060008114612a7b576040519150601f19603f3d011682016040523d82523d6000602084013e612a80565b606091505b5091509150818015612aaa575080511580612aaa575080806020019051810190612aaa9190613280565b612ae85760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610a81565b5050505050565b6001600160a01b0382166000908152600e602052604090205442908015801590612b4d57506001600160a01b0384166000908152600d602052604081208391612b3960018561344e565b815260200190815260200160002060000154145b15612b90576001600160a01b0384166000908152600d602052604081208491612b7760018561344e565b8152602081019190915260400160002060010155612bf4565b60408051808201825283815260208082018681526001600160a01b0388166000908152600d8352848120868252909252929020905181559051600191820155612bda9082906133f7565b6001600160a01b0385166000908152600e60205260409020555b50505050565b601054428115801590612c2c575080600f6000612c1860018661344e565b815260200190815260200160002060000154145b15612c5d57600054600f6000600185612c45919061344e565b81526020810191909152604001600020600101555050565b604080518082018252828152600080546020808401918252868352600f9052929020905181559051600191820155612c969083906133f7565b6010555050565b6001600160a01b038216600090815260046020908152604080832054600590925282205460105483929190612cd55792509050612427565b6001600160a01b038616600090815260026020526040902054612cfe5792504291506124279050565b6000612d0983611102565b90506000612d256001601054612d1f919061344e565b88612dfc565b9050815b81811015612ded576000818152600f60209081526040918290208251808401909352805483526001015490820181905215612dda576000600f81612d6e8560016133f7565b8152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050600080612db98d8460000151866000015187602001518d61303e565b9092509050612dc882896133f7565b9750612dd58d8983612e0b565b975050505b5080612de581613465565b915050612d29565b50919792965091945050505050565b60008183106127ce5781611148565b6001600160a01b0383166000908152601260205260409020548015801590612e6757506001600160a01b03841660009081526011602052604081208391612e5360018561344e565b815260200190815260200160002060000154145b15612e91576001600160a01b03841660009081526011602052604081208491612b7760018561344e565b60408051808201825283815260208082018681526001600160a01b038816600090815260118352848120868252909252929020905181559051600191820155612edb9082906133f7565b6001600160a01b03851660009081526012602052604090205550505050565b6000846001600160a01b03163b11612f245760405162461bcd60e51b8152600401610a819061333e565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612f8891906132f1565b6000604051808303816000865af19150503d8060008114612fc5576040519150601f19603f3d011682016040523d82523d6000602084013e612fca565b606091505b5091509150818015612ff4575080511580612ff4575080806020019051810190612ff49190613280565b6130365760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610a81565b505050505050565b600080600061304d87856127be565b6001600160a01b0389166000908152600260205260409020549091508590670de0b6b3a7640000906130a06130828a896127be565b6001600160a01b038d16600090815260036020526040902054612dfc565b6001600160a01b038c166000908152600360205260409020546130c4908690612dfc565b6130ce919061344e565b6130d8919061342f565b6130e2919061342f565b6130ec919061340f565b9890975095505050505050565b8035613104816134ac565b919050565b60006020828403121561311a578081fd5b8135611148816134ac565b600060208284031215613136578081fd5b8151611148816134ac565b60008060408385031215613153578081fd5b823561315e816134ac565b9150602083013561316e816134ac565b809150509250929050565b6000806040838503121561318b578182fd5b8235613196816134ac565b915060208381013567ffffffffffffffff808211156131b3578384fd5b818601915086601f8301126131c6578384fd5b8135818111156131d8576131d8613496565b8060051b604051601f19603f830116810181811085821117156131fd576131fd613496565b604052828152858101935084860182860187018b101561321b578788fd5b8795505b8386101561324457613230816130f9565b85526001959095019493860193860161321f565b508096505050505050509250929050565b60008060408385031215613267578182fd5b8235613272816134ac565b946020939093013593505050565b600060208284031215613291578081fd5b81518015158114611148578182fd5b6000602082840312156132b1578081fd5b5035919050565b6000602082840312156132c9578081fd5b5051919050565b600080604083850312156132e2578182fd5b50508035926020909101359150565b60008251815b8181101561331157602081860181015185830152016132f7565b8181111561331f5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6020808252601390820152720d2dcecc2d8d2c840c6dec8ca40d8cadccee8d606b1b604082015260600190565b6020808252600b908201526a189859081d1bdad95b925960aa1b604082015260600190565b6020808252600a90820152697265656e7472616e637960b01b604082015260600190565b6020808252600a90820152690616d6f756e74203d20360b41b604082015260600190565b9283526001600160a01b03919091166020830152604082015260600190565b6000821982111561340a5761340a613480565b500190565b60008261342a57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561344957613449613480565b500290565b60008282101561346057613460613480565b500390565b600060001982141561347957613479613480565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146117bd57600080fdfea2646970667358221220568400afb41149f20f1cb507561d9729c6cef6239c72b9b59ea0614ae344cb8364736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
