{
  "_format": "hh-sol-artifact-1",
  "contractName": "GovernorPango",
  "sourceName": "contracts/governance/GovernorPango.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_TIMELOCK",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_PANGOLIN_STAKING_POSITIONS",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "_PROPOSAL_THRESHOLD",
          "type": "uint96"
        },
        {
          "internalType": "uint96",
          "name": "_PROPOSAL_THRESHOLD_MIN",
          "type": "uint96"
        },
        {
          "internalType": "uint96",
          "name": "_PROPOSAL_THRESHOLD_MAX",
          "type": "uint96"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "IllegalVote",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientVotes",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAction",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidNFT",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidState",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        }
      ],
      "name": "ProposalCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "string[]",
          "name": "signatures",
          "type": "string[]"
        },
        {
          "indexed": false,
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "indexed": false,
          "internalType": "uint40",
          "name": "startTime",
          "type": "uint40"
        },
        {
          "indexed": false,
          "internalType": "uint40",
          "name": "endTime",
          "type": "uint40"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "description",
          "type": "string"
        }
      ],
      "name": "ProposalCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        }
      ],
      "name": "ProposalExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint40",
          "name": "eta",
          "type": "uint40"
        }
      ],
      "name": "ProposalQueued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "newProposalThreshold",
          "type": "uint96"
        }
      ],
      "name": "ProposalThresholdChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "support",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "votes",
          "type": "uint96"
        }
      ],
      "name": "VoteCast",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint40",
          "name": "newVotingDelay",
          "type": "uint40"
        }
      ],
      "name": "VotingDelayChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint40",
          "name": "newVotingPeriod",
          "type": "uint40"
        }
      ],
      "name": "VotingPeriodChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "PANGOLIN_STAKING_POSITIONS",
      "outputs": [
        {
          "internalType": "contract IPangolinStakingPositions",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROPOSAL_THRESHOLD",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROPOSAL_THRESHOLD_MAX",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROPOSAL_THRESHOLD_MIN",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TIMELOCK",
      "outputs": [
        {
          "internalType": "contract ITimelock",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VOTING_DELAY",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VOTING_PERIOD",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "__acceptAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint96",
          "name": "newProposalThreshold",
          "type": "uint96"
        }
      ],
      "name": "__setProposalThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint40",
          "name": "newVotingDelay",
          "type": "uint40"
        }
      ],
      "name": "__setVotingDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint40",
          "name": "newVotingPeriod",
          "type": "uint40"
        }
      ],
      "name": "__setVotingPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        }
      ],
      "name": "cancel",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        },
        {
          "internalType": "bool",
          "name": "support",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "nftId",
          "type": "uint256"
        }
      ],
      "name": "castVote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        }
      ],
      "name": "getActions",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address[]",
              "name": "targets",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "values",
              "type": "uint256[]"
            },
            {
              "internalType": "string[]",
              "name": "signatures",
              "type": "string[]"
            },
            {
              "internalType": "bytes[]",
              "name": "calldatas",
              "type": "bytes[]"
            }
          ],
          "internalType": "struct GovernorPango.ProposalAction",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposalCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "proposalTimeout",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "name": "proposals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "proposer",
          "type": "uint256"
        },
        {
          "internalType": "uint96",
          "name": "forVotes",
          "type": "uint96"
        },
        {
          "internalType": "uint96",
          "name": "againstVotes",
          "type": "uint96"
        },
        {
          "internalType": "uint40",
          "name": "startTime",
          "type": "uint40"
        },
        {
          "internalType": "uint40",
          "name": "endTime",
          "type": "uint40"
        },
        {
          "internalType": "uint40",
          "name": "eta",
          "type": "uint40"
        },
        {
          "internalType": "bool",
          "name": "executed",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "canceled",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "string[]",
          "name": "signatures",
          "type": "string[]"
        },
        {
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "internalType": "string",
          "name": "description",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "nftId",
          "type": "uint256"
        }
      ],
      "name": "propose",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        }
      ],
      "name": "queue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "receipts",
      "outputs": [
        {
          "internalType": "bool",
          "name": "hasVoted",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "support",
          "type": "bool"
        },
        {
          "internalType": "uint96",
          "name": "votes",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "proposalId",
          "type": "uint64"
        }
      ],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum GovernorPango.ProposalState",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x610100604052600080546001600160501b0319166703f48000000151801790553480156200002c57600080fd5b50604051620033d5380380620033d58339810160408190526200004f9162000171565b806001600160601b0316826001600160601b031611156200008357604051634a7f394f60e01b815260040160405180910390fd5b816001600160601b0316836001600160601b03161015620000b757604051634a7f394f60e01b815260040160405180910390fd5b806001600160601b0316836001600160601b03161115620000eb57604051634a7f394f60e01b815260040160405180910390fd5b6001600160a01b0394851660c0529290931660e05260008054600160501b600160b01b0319166a01000000000000000000006001600160601b03938416021790559182166080521660a052620001e1565b80516001600160a01b03811681146200015457600080fd5b919050565b80516001600160601b03811681146200015457600080fd5b600080600080600060a086880312156200018a57600080fd5b62000195866200013c565b9450620001a5602087016200013c565b9350620001b56040870162000159565b9250620001c56060870162000159565b9150620001d56080870162000159565b90509295509295909350565b60805160a05160c05160e0516131586200027d600039600081816101ca01528181611dd10152611eec015260008181610459015281816106d801528181610b06015281816112690152818161161a015281816117ef0152818161186d01528181611cba0152818161202f015281816120e201526121eb01526000818161021601526119000152600081816103db01526118ad01526131586000f3fe6080604052600436106101755760003560e01c8063926c46b2116100cb578063d39046821161007f578063e907dc8111610059578063e907dc81146105cf578063f3dc6314146105ef578063fc45ddcd1461060f57600080fd5b8063d390468214610511578063d6159fe51461058d578063da35c664146105ab57600080fd5b8063b1610d7e116100b0578063b1610d7e146104c2578063b590be77146104e9578063b9a61961146104fc57600080fd5b8063926c46b21461047b578063a6c266031461049b57600080fd5b806331c5eec81161012d5780635ad77de6116101075780635ad77de6146103c95780636ffa2a81146103fd5780637aadef8b1461044757600080fd5b806331c5eec81461029f5780633d928f3c1461037c5780634c125e79146103a957600080fd5b8063176ed5ad1161015e578063176ed5ad146102045780632d4c7bd3146102505780632df23d151461027257600080fd5b80630944db161461017a5780630f1622af146101b8575b600080fd5b34801561018657600080fd5b5061019a61019536600461276d565b61062f565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b506101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101af565b34801561021057600080fd5b506102387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160601b0390911681526020016101af565b34801561025c57600080fd5b5061027061026b366004612847565b610afb565b005b34801561027e57600080fd5b5061029261028d366004612886565b610bfb565b6040516101af91906128b7565b3480156102ab57600080fd5b506103276102ba366004612886565b60026020819052600091825260409091208054600182015491909201546001600160601b0380831692600160601b81049091169164ffffffffff600160c01b909204821691818116916501000000000081049091169060ff600160501b8204811691600160581b90041688565b604080519889526001600160601b0397881660208a0152959096169487019490945264ffffffffff928316606087015290821660808601521660a0840152151560c0830152151560e0820152610100016101af565b34801561038857600080fd5b5061039c610397366004612886565b610caf565b6040516101af91906129c7565b3480156103b557600080fd5b506102706103c4366004612886565b610f68565b3480156103d557600080fd5b506102387f000000000000000000000000000000000000000000000000000000000000000081565b34801561040957600080fd5b50610431610418366004612a78565b60056020526000908152604090205464ffffffffff1681565b60405164ffffffffff90911681526020016101af565b34801561045357600080fd5b506101ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561048757600080fd5b50610270610496366004612886565b61113c565b3480156104a757600080fd5b5060005461023890600160501b90046001600160601b031681565b3480156104ce57600080fd5b506000546104319065010000000000900464ffffffffff1681565b6102706104f7366004612886565b611515565b34801561050857600080fd5b506102706117ed565b34801561051d57600080fd5b5061056761052c366004612a91565b600460209081526000928352604080842090915290825290205460ff808216916101008104909116906201000090046001600160601b031683565b60408051931515845291151560208401526001600160601b0316908201526060016101af565b34801561059957600080fd5b506000546104319064ffffffffff1681565b3480156105b757600080fd5b506105c160015481565b6040519081526020016101af565b3480156105db57600080fd5b506102706105ea366004612ad0565b611862565b3480156105fb57600080fd5b5061027061060a366004612afb565b6119c0565b34801561061b57600080fd5b5061027061062a366004612847565b611caf565b60008551875114158061064457508451875114155b8061065157508351875114155b1561066f57604051634a7f394f60e01b815260040160405180910390fd5b600a8751111561069257604051634a7f394f60e01b815260040160405180910390fd5b61069b82611d98565b600080546106b09064ffffffffff1642612b50565b60008054919250906106d29065010000000000900464ffffffffff1683612b50565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a42b8f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107589190612b79565b6000546107779064ffffffffff65010000000000820481169116612b50565b6107819190612b50565b600054909150600160501b90046001600160601b03166107aa866107a58442612b92565b611e7f565b6001600160601b031610156107d257604051633048076b60e11b815260040160405180910390fd5b60008581526005602052604090205464ffffffffff1642101561080857604051633048076b60e11b815260040160405180910390fd5b6108128142612b50565b6000868152600560205260408120805464ffffffffff191664ffffffffff93909316929092179091556001805490919061084b90612bb8565b91829055506040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290945085815264ffffffffff8085166060808401918252858316608080860191825267ffffffffffffffff8a1660009081526002602081815260409283902089518155818a0151600182018054868d01519a518c16600160c01b027fffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffff6001600160601b039c8d16600160601b027fffffffffffffffff0000000000000000000000000000000000000000000000009093169c9094169b909b1717919091169890981790975593519501805460a089015160c08a015160e08b01511515600160581b026bff000000000000000000000019911515600160501b02919091167fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff928b1665010000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941699909a169890981791909117169690961794909417909455825193840183528184528301819052908201819052818101528b815260208082018c905260408083018c9052606083018b905267ffffffffffffffff881660009081526003835220825180518493610a52928492910190612273565b506020828101518051610a6b92600185019201906122f0565b5060408201518051610a8791600284019160209091019061232b565b5060608201518051610aa391600384019160209091019061237d565b509050507f20d9b108f8538dcfcbae90dfbf2df4a0b7df3ec4a7f38db98fea51298228a575868d8d8d8d8a8a8f604051610ae4989796959493929190612bd2565b60405180910390a150505050509695505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4457604051634a7f394f60e01b815260040160405180910390fd5b6203f4808164ffffffffff161015610b6f57604051634a7f394f60e01b815260040160405180910390fd5b62278d008164ffffffffff161115610b9a57604051634a7f394f60e01b815260040160405180910390fd5b6000805469ffffffffff000000000019166501000000000064ffffffffff8416908102919091179091556040519081527fc6bdba91ad0eaeaaa3026c197783f40dff7571fd0e71402de571b9c508329db6906020015b60405180910390a150565b67ffffffffffffffff811660009081526002602081815260408084208151610100810183528154815260018201546001600160601b0380821695830195909552600160601b81049094169281019290925264ffffffffff600160c01b9093048316606083015290920154808216608084015265010000000000810490911660a083015260ff600160501b82048116151560c0840152600160581b90910416151560e0820152610ca990611f8f565b92915050565b610cda6040518060800160405280606081526020016060815260200160608152602001606081525090565b67ffffffffffffffff82166000908152600360209081526040918290208251815460a093810282018401909452608081018481529093919284928491840182828015610d4f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d31575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610da757602002820191906000526020600020905b815481526020019060010190808311610d93575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015610e81578382906000526020600020018054610df490612ca1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2090612ca1565b8015610e6d5780601f10610e4257610100808354040283529160200191610e6d565b820191906000526020600020905b815481529060010190602001808311610e5057829003601f168201915b505050505081526020019060010190610dd5565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610f5a578382906000526020600020018054610ecd90612ca1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef990612ca1565b8015610f465780601f10610f1b57610100808354040283529160200191610f46565b820191906000526020600020905b815481529060010190602001808311610f2957829003601f168201915b505050505081526020019060010190610eae565b505050915250909392505050565b67ffffffffffffffff811660009081526002602081815260408084208151610100810183528154815260018201546001600160601b0380821695830195909552600160601b81049094169281019290925264ffffffffff600160c01b9093048316606083015292830154808316608083015265010000000000810490921660a082015260ff600160501b83048116151560c0830152600160581b909204909116151560e082015290919061101b90611f8f565b90506007816007811115611031576110316128a1565b148061104e5750600681600781111561104c5761104c6128a1565b145b1561106c5760405163baf3f0f760e01b815260040160405180910390fd5b6000548254600160501b9091046001600160601b03169061108d9042611e7f565b6001600160601b0316106110dd5760008160078111156110af576110af6128a1565b036110c45781546110bf90611d98565b6110dd565b60405163baf3f0f760e01b815260040160405180910390fd5b6002820180546bff00000000000000000000001916600160581b17905560405167ffffffffffffffff841681527fe5c6a12e7989e74f4c07006b06767eae6da096502bba0f69213882f71242aab29060200160405180910390a1505050565b67ffffffffffffffff81166000908152600260205260409020600460408051610100810182528354815260018401546001600160601b038082166020840152600160601b8204169282019290925264ffffffffff600160c01b909204821660608201526002840154808316608083015265010000000000810490921660a082015260ff600160501b83048116151560c0830152600160581b909204909116151560e08201526111ea90611f8f565b60078111156111fb576111fb6128a1565b146112195760405163baf3f0f760e01b815260040160405180910390fd5b67ffffffffffffffff8216600090815260036020908152604080832081517f6a42b8f800000000000000000000000000000000000000000000000000000000815291519093926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692636a42b8f892600480830193928290030181865afa1580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190612b79565b6112de9042612cdb565b825490915060005b8181101561149d5761149584600001828154811061130657611306612cf3565b6000918252602090912001546001860180546001600160a01b03909216918490811061133457611334612cf3565b906000526020600020015486600201848154811061135457611354612cf3565b90600052602060002001805461136990612ca1565b80601f016020809104026020016040519081016040528092919081815260200182805461139590612ca1565b80156113e25780601f106113b7576101008083540402835291602001916113e2565b820191906000526020600020905b8154815290600101906020018083116113c557829003601f168201915b50505050508760030185815481106113fc576113fc612cf3565b90600052602060002001805461141190612ca1565b80601f016020809104026020016040519081016040528092919081815260200182805461143d90612ca1565b801561148a5780601f1061145f5761010080835404028352916020019161148a565b820191906000526020600020905b81548152906001019060200180831161146d57829003601f168201915b5050505050876120e0565b6001016112e6565b5060028401805469ffffffffff000000000019166501000000000064ffffffffff8516908102919091179091556040805167ffffffffffffffff8816815260208101929092527ffd77b3148cb69f934b0fb64fb5f6dbc650c23d1aaaf91d12bb52d78923c41308910160405180910390a15050505050565b67ffffffffffffffff81166000908152600260205260409020600560408051610100810182528354815260018401546001600160601b038082166020840152600160601b8204169282019290925264ffffffffff600160c01b909204821660608201526002840154808316608083015265010000000000810490921660a082015260ff600160501b83048116151560c0830152600160581b909204909116151560e08201526115c390611f8f565b60078111156115d4576115d46128a1565b146115f25760405163baf3f0f760e01b815260040160405180910390fd5b67ffffffffffffffff82166000908152600360205260408120805490915b81811015611779577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630825f38f84600101838154811061165c5761165c612cf3565b906000526020600020015485600001848154811061167c5761167c612cf3565b6000918252602090912001546001870180546001600160a01b0390921691869081106116aa576116aa612cf3565b90600052602060002001548760020186815481106116ca576116ca612cf3565b906000526020600020018860030187815481106116e9576116e9612cf3565b906000526020600020018a60020160059054906101000a900464ffffffffff166040518763ffffffff1660e01b8152600401611729959493929190612da4565b60006040518083038185885af1158015611747573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526117709190810190612df8565b50600101611610565b506002830180547fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16600160501b17905560405167ffffffffffffffff851681527f2b3962140cfad697e04b60d47af771de8568e6ead5f42b8873c4a8d12bd2b3c79060200160405180910390a150505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118ab57604051634a7f394f60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160601b0316816001600160601b031610156118fe57604051634a7f394f60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160601b0316816001600160601b0316111561195157604051634a7f394f60e01b815260040160405180910390fd5b600080547fffffffffffffffffffff000000000000000000000000ffffffffffffffffffff16600160501b6001600160601b038416908102919091179091556040519081527fff6500f609261dffe81c46cd3a92bfacb4ba18bb4a8fb2244547986c5ba7457f90602001610bf0565b67ffffffffffffffff83166000908152600260205260409020600160408051610100810182528354815260018401546001600160601b038082166020840152600160601b8204169282019290925264ffffffffff600160c01b909204821660608201526002840154808316608083015265010000000000810490921660a082015260ff600160501b83048116151560c0830152600160581b909204909116151560e0820152611a6e90611f8f565b6007811115611a7f57611a7f6128a1565b14611a9d5760405163baf3f0f760e01b815260040160405180910390fd5b611aa682611d98565b6000611ac7838360010160189054906101000a900464ffffffffff16611e7f565b9050806001600160601b0316600003611af357604051633048076b60e11b815260040160405180910390fd5b67ffffffffffffffff851660009081526004602090815260408083208684529091529020805460ff1615611b53576040517f667a709a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160601b03831662010000027fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff87158015610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169390931760011716178255611c0957600183018054839190600090611be09084906001600160601b0316612e6f565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550611c54565b8183600101600c8282829054906101000a90046001600160601b0316611c2f9190612e6f565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b6040805167ffffffffffffffff8816815286151560208201526001600160601b0384168183015290517fab2f5ddd7116794a68bdc6c3e14b18b5888ce4f48fdea983f4a1032a24a7989b9181900360600190a1505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611cf857604051634a7f394f60e01b815260040160405180910390fd5b620151808164ffffffffff161015611d2357604051634a7f394f60e01b815260040160405180910390fd5b62093a808164ffffffffff161115611d4e57604051634a7f394f60e01b815260040160405180910390fd5b6000805464ffffffffff191664ffffffffff83169081179091556040519081527f4b9e05d03a781f25fd55d65f8a28c7452e1ecb4a70c2b761bbfe0d9fb8a9d3cb90602001610bf0565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c9190612e91565b6001600160a01b031614611e7c576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6000808311611eba576040517f0f3e2a3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f99fbab88000000000000000000000000000000000000000000000000000000008152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240160e060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190612eff565b90508264ffffffffff16816060015165ffffffffffff161015611f855751519050610ca9565b5060009392505050565b60008160e0015115611fa357506002919050565b816060015164ffffffffff164211611fbd57506000919050565b816080015164ffffffffff164211611fd757506001919050565b81604001516001600160601b031682602001516001600160601b03161161200057506003919050565b8160a0015164ffffffffff1660000361201b57506004919050565b8160c001511561202d57506007919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190612b79565b8260a0015164ffffffffff166120c59190612cdb565b42106120d357506006919050565b506005919050565b919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2b065378686868686604051602001612128959493929190612fc0565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161215c91815260200190565b602060405180830381865afa158015612179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219d9190612ffa565b156121bb5760405163baf3f0f760e01b815260040160405180910390fd5b6040517f3a66f9010000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633a66f901906122289088908890889088908890600401612fc0565b6020604051808303816000875af1158015612247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226b9190612b79565b505050505050565b8280548282559060005260206000209081019282156122e0579160200282015b828111156122e057825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178255602090920191600190910190612293565b506122ec9291506123cf565b5090565b8280548282559060005260206000209081019282156122e0579160200282015b828111156122e0578251825591602001919060010190612310565b828054828255906000526020600020908101928215612371579160200282015b8281111561237157825182906123619082613062565b509160200191906001019061234b565b506122ec9291506123e4565b8280548282559060005260206000209081019282156123c3579160200282015b828111156123c357825182906123b39082613062565b509160200191906001019061239d565b506122ec929150612401565b5b808211156122ec57600081556001016123d0565b808211156122ec5760006123f8828261241e565b506001016123e4565b808211156122ec576000612415828261241e565b50600101612401565b50805461242a90612ca1565b6000825580601f1061243a575050565b601f016020900490600052602060002090810190611e7c91906123cf565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561249157612491612458565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156124c0576124c0612458565b604052919050565b600067ffffffffffffffff8211156124e2576124e2612458565b5060051b60200190565b6001600160a01b0381168114611e7c57600080fd5b600082601f83011261251257600080fd5b81356020612527612522836124c8565b612497565b82815260059290921b8401810191818101908684111561254657600080fd5b8286015b8481101561256a57803561255d816124ec565b835291830191830161254a565b509695505050505050565b600082601f83011261258657600080fd5b81356020612596612522836124c8565b82815260059290921b840181019181810190868411156125b557600080fd5b8286015b8481101561256a57803583529183019183016125b9565b600067ffffffffffffffff8211156125ea576125ea612458565b50601f01601f191660200190565b6000612606612522846125d0565b905082815283838301111561261a57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261264257600080fd5b612651838335602085016125f8565b9392505050565b600082601f83011261266957600080fd5b81356020612679612522836124c8565b82815260059290921b8401810191818101908684111561269857600080fd5b8286015b8481101561256a57803567ffffffffffffffff8111156126bc5760008081fd5b6126ca8986838b0101612631565b84525091830191830161269c565b600082601f8301126126e957600080fd5b813560206126f9612522836124c8565b82815260059290921b8401810191818101908684111561271857600080fd5b8286015b8481101561256a57803567ffffffffffffffff81111561273c5760008081fd5b8701603f8101891361274e5760008081fd5b61275f8986830135604084016125f8565b84525091830191830161271c565b60008060008060008060c0878903121561278657600080fd5b863567ffffffffffffffff8082111561279e57600080fd5b6127aa8a838b01612501565b975060208901359150808211156127c057600080fd5b6127cc8a838b01612575565b965060408901359150808211156127e257600080fd5b6127ee8a838b01612658565b9550606089013591508082111561280457600080fd5b6128108a838b016126d8565b9450608089013591508082111561282657600080fd5b5061283389828a01612631565b92505060a087013590509295509295509295565b60006020828403121561285957600080fd5b813564ffffffffff8116811461265157600080fd5b803567ffffffffffffffff811681146120db57600080fd5b60006020828403121561289857600080fd5b6126518261286e565b634e487b7160e01b600052602160045260246000fd5b60208101600883106128d957634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b8381101561290f578151875295820195908201906001016128f3565b509495945050505050565b60005b8381101561293557818101518382015260200161291d565b8381111561185c5750506000910152565b6000815180845261295e81602086016020860161291a565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156129ba5782840389526129a8848351612946565b98850198935090840190600101612990565b5091979650505050505050565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b80831015612a155783516001600160a01b031682529284019260019290920191908401906129ec565b50838701519350601f19925082868203016040870152612a3581856128df565b93505050604085015181858403016060860152612a528382612972565b925050606085015181858403016080860152612a6e8382612972565b9695505050505050565b600060208284031215612a8a57600080fd5b5035919050565b60008060408385031215612aa457600080fd5b612aad8361286e565b946020939093013593505050565b6001600160601b0381168114611e7c57600080fd5b600060208284031215612ae257600080fd5b813561265181612abb565b8015158114611e7c57600080fd5b600080600060608486031215612b1057600080fd5b612b198461286e565b92506020840135612b2981612aed565b929592945050506040919091013590565b634e487b7160e01b600052601160045260246000fd5b600064ffffffffff808316818516808303821115612b7057612b70612b3a565b01949350505050565b600060208284031215612b8b57600080fd5b5051919050565b600064ffffffffff83811690831681811015612bb057612bb0612b3a565b039392505050565b60006000198203612bcb57612bcb612b3a565b5060010190565b67ffffffffffffffff89168152610100602080830182905289519183018290526000916101208401918b810191845b81811015612c265783516001600160a01b031685529382019392820192600101612c01565b505050508281036040840152612c3c818a6128df565b90508281036060840152612c508189612972565b90508281036080840152612c648188612972565b64ffffffffff871660a0850152905064ffffffffff851660c084015282810360e0840152612c928185612946565b9b9a5050505050505050505050565b600181811c90821680612cb557607f821691505b602082108103612cd557634e487b7160e01b600052602260045260246000fd5b50919050565b60008219821115612cee57612cee612b3a565b500190565b634e487b7160e01b600052603260045260246000fd5b60008154612d1681612ca1565b808552602060018381168015612d335760018114612d6b57612d99565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b8901019550612d99565b866000528260002060005b85811015612d915781548a8201860152908301908401612d76565b890184019650505b505050505092915050565b6001600160a01b038616815284602082015260a060408201526000612dcc60a0830186612d09565b8281036060840152612dde8186612d09565b91505064ffffffffff831660808301529695505050505050565b600060208284031215612e0a57600080fd5b815167ffffffffffffffff811115612e2157600080fd5b8201601f81018413612e3257600080fd5b8051612e40612522826125d0565b818152856020838501011115612e5557600080fd5b612e6682602083016020860161291a565b95945050505050565b60006001600160601b03808316818516808303821115612b7057612b70612b3a565b600060208284031215612ea357600080fd5b8151612651816124ec565b80516120db816124ec565b600060408284031215612ecb57600080fd5b612ed361246e565b9050815181526020820151602082015292915050565b805165ffffffffffff811681146120db57600080fd5b600081830360e0811215612f1257600080fd5b60405160a0810181811067ffffffffffffffff82111715612f3557612f35612458565b6040908152821215612f4657600080fd5b612f4e61246e565b91508351612f5b81612abb565b82526020840151612f6b816124ec565b6020830152818152612f808560408601612eb9565b6020820152612f9160808501612eae565b6040820152612fa260a08501612ee9565b6060820152612fb360c08501612ee9565b6080820152949350505050565b6001600160a01b038616815284602082015260a060408201526000612fe860a0830186612946565b8281036060840152612dde8186612946565b60006020828403121561300c57600080fd5b815161265181612aed565b601f82111561305d57600081815260208120601f850160051c8101602086101561303e5750805b601f850160051c820191505b8181101561226b5782815560010161304a565b505050565b815167ffffffffffffffff81111561307c5761307c612458565b6130908161308a8454612ca1565b84613017565b602080601f8311600181146130c557600084156130ad5750858301515b600019600386901b1c1916600185901b17855561226b565b600085815260208120601f198616915b828110156130f4578886015182559484019460019091019084016130d5565b50858210156131125787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212207510720b4c693837355491acfecb686abddf5b28a76543b77d46ecd89564fb9964736f6c634300080f0033",
  "deployedBytecode": "0x6080604052600436106101755760003560e01c8063926c46b2116100cb578063d39046821161007f578063e907dc8111610059578063e907dc81146105cf578063f3dc6314146105ef578063fc45ddcd1461060f57600080fd5b8063d390468214610511578063d6159fe51461058d578063da35c664146105ab57600080fd5b8063b1610d7e116100b0578063b1610d7e146104c2578063b590be77146104e9578063b9a61961146104fc57600080fd5b8063926c46b21461047b578063a6c266031461049b57600080fd5b806331c5eec81161012d5780635ad77de6116101075780635ad77de6146103c95780636ffa2a81146103fd5780637aadef8b1461044757600080fd5b806331c5eec81461029f5780633d928f3c1461037c5780634c125e79146103a957600080fd5b8063176ed5ad1161015e578063176ed5ad146102045780632d4c7bd3146102505780632df23d151461027257600080fd5b80630944db161461017a5780630f1622af146101b8575b600080fd5b34801561018657600080fd5b5061019a61019536600461276d565b61062f565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b506101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101af565b34801561021057600080fd5b506102387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160601b0390911681526020016101af565b34801561025c57600080fd5b5061027061026b366004612847565b610afb565b005b34801561027e57600080fd5b5061029261028d366004612886565b610bfb565b6040516101af91906128b7565b3480156102ab57600080fd5b506103276102ba366004612886565b60026020819052600091825260409091208054600182015491909201546001600160601b0380831692600160601b81049091169164ffffffffff600160c01b909204821691818116916501000000000081049091169060ff600160501b8204811691600160581b90041688565b604080519889526001600160601b0397881660208a0152959096169487019490945264ffffffffff928316606087015290821660808601521660a0840152151560c0830152151560e0820152610100016101af565b34801561038857600080fd5b5061039c610397366004612886565b610caf565b6040516101af91906129c7565b3480156103b557600080fd5b506102706103c4366004612886565b610f68565b3480156103d557600080fd5b506102387f000000000000000000000000000000000000000000000000000000000000000081565b34801561040957600080fd5b50610431610418366004612a78565b60056020526000908152604090205464ffffffffff1681565b60405164ffffffffff90911681526020016101af565b34801561045357600080fd5b506101ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561048757600080fd5b50610270610496366004612886565b61113c565b3480156104a757600080fd5b5060005461023890600160501b90046001600160601b031681565b3480156104ce57600080fd5b506000546104319065010000000000900464ffffffffff1681565b6102706104f7366004612886565b611515565b34801561050857600080fd5b506102706117ed565b34801561051d57600080fd5b5061056761052c366004612a91565b600460209081526000928352604080842090915290825290205460ff808216916101008104909116906201000090046001600160601b031683565b60408051931515845291151560208401526001600160601b0316908201526060016101af565b34801561059957600080fd5b506000546104319064ffffffffff1681565b3480156105b757600080fd5b506105c160015481565b6040519081526020016101af565b3480156105db57600080fd5b506102706105ea366004612ad0565b611862565b3480156105fb57600080fd5b5061027061060a366004612afb565b6119c0565b34801561061b57600080fd5b5061027061062a366004612847565b611caf565b60008551875114158061064457508451875114155b8061065157508351875114155b1561066f57604051634a7f394f60e01b815260040160405180910390fd5b600a8751111561069257604051634a7f394f60e01b815260040160405180910390fd5b61069b82611d98565b600080546106b09064ffffffffff1642612b50565b60008054919250906106d29065010000000000900464ffffffffff1683612b50565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a42b8f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107589190612b79565b6000546107779064ffffffffff65010000000000820481169116612b50565b6107819190612b50565b600054909150600160501b90046001600160601b03166107aa866107a58442612b92565b611e7f565b6001600160601b031610156107d257604051633048076b60e11b815260040160405180910390fd5b60008581526005602052604090205464ffffffffff1642101561080857604051633048076b60e11b815260040160405180910390fd5b6108128142612b50565b6000868152600560205260408120805464ffffffffff191664ffffffffff93909316929092179091556001805490919061084b90612bb8565b91829055506040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290945085815264ffffffffff8085166060808401918252858316608080860191825267ffffffffffffffff8a1660009081526002602081815260409283902089518155818a0151600182018054868d01519a518c16600160c01b027fffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffff6001600160601b039c8d16600160601b027fffffffffffffffff0000000000000000000000000000000000000000000000009093169c9094169b909b1717919091169890981790975593519501805460a089015160c08a015160e08b01511515600160581b026bff000000000000000000000019911515600160501b02919091167fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff928b1665010000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941699909a169890981791909117169690961794909417909455825193840183528184528301819052908201819052818101528b815260208082018c905260408083018c9052606083018b905267ffffffffffffffff881660009081526003835220825180518493610a52928492910190612273565b506020828101518051610a6b92600185019201906122f0565b5060408201518051610a8791600284019160209091019061232b565b5060608201518051610aa391600384019160209091019061237d565b509050507f20d9b108f8538dcfcbae90dfbf2df4a0b7df3ec4a7f38db98fea51298228a575868d8d8d8d8a8a8f604051610ae4989796959493929190612bd2565b60405180910390a150505050509695505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4457604051634a7f394f60e01b815260040160405180910390fd5b6203f4808164ffffffffff161015610b6f57604051634a7f394f60e01b815260040160405180910390fd5b62278d008164ffffffffff161115610b9a57604051634a7f394f60e01b815260040160405180910390fd5b6000805469ffffffffff000000000019166501000000000064ffffffffff8416908102919091179091556040519081527fc6bdba91ad0eaeaaa3026c197783f40dff7571fd0e71402de571b9c508329db6906020015b60405180910390a150565b67ffffffffffffffff811660009081526002602081815260408084208151610100810183528154815260018201546001600160601b0380821695830195909552600160601b81049094169281019290925264ffffffffff600160c01b9093048316606083015290920154808216608084015265010000000000810490911660a083015260ff600160501b82048116151560c0840152600160581b90910416151560e0820152610ca990611f8f565b92915050565b610cda6040518060800160405280606081526020016060815260200160608152602001606081525090565b67ffffffffffffffff82166000908152600360209081526040918290208251815460a093810282018401909452608081018481529093919284928491840182828015610d4f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d31575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610da757602002820191906000526020600020905b815481526020019060010190808311610d93575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015610e81578382906000526020600020018054610df490612ca1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2090612ca1565b8015610e6d5780601f10610e4257610100808354040283529160200191610e6d565b820191906000526020600020905b815481529060010190602001808311610e5057829003601f168201915b505050505081526020019060010190610dd5565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610f5a578382906000526020600020018054610ecd90612ca1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef990612ca1565b8015610f465780601f10610f1b57610100808354040283529160200191610f46565b820191906000526020600020905b815481529060010190602001808311610f2957829003601f168201915b505050505081526020019060010190610eae565b505050915250909392505050565b67ffffffffffffffff811660009081526002602081815260408084208151610100810183528154815260018201546001600160601b0380821695830195909552600160601b81049094169281019290925264ffffffffff600160c01b9093048316606083015292830154808316608083015265010000000000810490921660a082015260ff600160501b83048116151560c0830152600160581b909204909116151560e082015290919061101b90611f8f565b90506007816007811115611031576110316128a1565b148061104e5750600681600781111561104c5761104c6128a1565b145b1561106c5760405163baf3f0f760e01b815260040160405180910390fd5b6000548254600160501b9091046001600160601b03169061108d9042611e7f565b6001600160601b0316106110dd5760008160078111156110af576110af6128a1565b036110c45781546110bf90611d98565b6110dd565b60405163baf3f0f760e01b815260040160405180910390fd5b6002820180546bff00000000000000000000001916600160581b17905560405167ffffffffffffffff841681527fe5c6a12e7989e74f4c07006b06767eae6da096502bba0f69213882f71242aab29060200160405180910390a1505050565b67ffffffffffffffff81166000908152600260205260409020600460408051610100810182528354815260018401546001600160601b038082166020840152600160601b8204169282019290925264ffffffffff600160c01b909204821660608201526002840154808316608083015265010000000000810490921660a082015260ff600160501b83048116151560c0830152600160581b909204909116151560e08201526111ea90611f8f565b60078111156111fb576111fb6128a1565b146112195760405163baf3f0f760e01b815260040160405180910390fd5b67ffffffffffffffff8216600090815260036020908152604080832081517f6a42b8f800000000000000000000000000000000000000000000000000000000815291519093926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692636a42b8f892600480830193928290030181865afa1580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190612b79565b6112de9042612cdb565b825490915060005b8181101561149d5761149584600001828154811061130657611306612cf3565b6000918252602090912001546001860180546001600160a01b03909216918490811061133457611334612cf3565b906000526020600020015486600201848154811061135457611354612cf3565b90600052602060002001805461136990612ca1565b80601f016020809104026020016040519081016040528092919081815260200182805461139590612ca1565b80156113e25780601f106113b7576101008083540402835291602001916113e2565b820191906000526020600020905b8154815290600101906020018083116113c557829003601f168201915b50505050508760030185815481106113fc576113fc612cf3565b90600052602060002001805461141190612ca1565b80601f016020809104026020016040519081016040528092919081815260200182805461143d90612ca1565b801561148a5780601f1061145f5761010080835404028352916020019161148a565b820191906000526020600020905b81548152906001019060200180831161146d57829003601f168201915b5050505050876120e0565b6001016112e6565b5060028401805469ffffffffff000000000019166501000000000064ffffffffff8516908102919091179091556040805167ffffffffffffffff8816815260208101929092527ffd77b3148cb69f934b0fb64fb5f6dbc650c23d1aaaf91d12bb52d78923c41308910160405180910390a15050505050565b67ffffffffffffffff81166000908152600260205260409020600560408051610100810182528354815260018401546001600160601b038082166020840152600160601b8204169282019290925264ffffffffff600160c01b909204821660608201526002840154808316608083015265010000000000810490921660a082015260ff600160501b83048116151560c0830152600160581b909204909116151560e08201526115c390611f8f565b60078111156115d4576115d46128a1565b146115f25760405163baf3f0f760e01b815260040160405180910390fd5b67ffffffffffffffff82166000908152600360205260408120805490915b81811015611779577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630825f38f84600101838154811061165c5761165c612cf3565b906000526020600020015485600001848154811061167c5761167c612cf3565b6000918252602090912001546001870180546001600160a01b0390921691869081106116aa576116aa612cf3565b90600052602060002001548760020186815481106116ca576116ca612cf3565b906000526020600020018860030187815481106116e9576116e9612cf3565b906000526020600020018a60020160059054906101000a900464ffffffffff166040518763ffffffff1660e01b8152600401611729959493929190612da4565b60006040518083038185885af1158015611747573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526117709190810190612df8565b50600101611610565b506002830180547fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16600160501b17905560405167ffffffffffffffff851681527f2b3962140cfad697e04b60d47af771de8568e6ead5f42b8873c4a8d12bd2b3c79060200160405180910390a150505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118ab57604051634a7f394f60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160601b0316816001600160601b031610156118fe57604051634a7f394f60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160601b0316816001600160601b0316111561195157604051634a7f394f60e01b815260040160405180910390fd5b600080547fffffffffffffffffffff000000000000000000000000ffffffffffffffffffff16600160501b6001600160601b038416908102919091179091556040519081527fff6500f609261dffe81c46cd3a92bfacb4ba18bb4a8fb2244547986c5ba7457f90602001610bf0565b67ffffffffffffffff83166000908152600260205260409020600160408051610100810182528354815260018401546001600160601b038082166020840152600160601b8204169282019290925264ffffffffff600160c01b909204821660608201526002840154808316608083015265010000000000810490921660a082015260ff600160501b83048116151560c0830152600160581b909204909116151560e0820152611a6e90611f8f565b6007811115611a7f57611a7f6128a1565b14611a9d5760405163baf3f0f760e01b815260040160405180910390fd5b611aa682611d98565b6000611ac7838360010160189054906101000a900464ffffffffff16611e7f565b9050806001600160601b0316600003611af357604051633048076b60e11b815260040160405180910390fd5b67ffffffffffffffff851660009081526004602090815260408083208684529091529020805460ff1615611b53576040517f667a709a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160601b03831662010000027fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff87158015610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169390931760011716178255611c0957600183018054839190600090611be09084906001600160601b0316612e6f565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550611c54565b8183600101600c8282829054906101000a90046001600160601b0316611c2f9190612e6f565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b6040805167ffffffffffffffff8816815286151560208201526001600160601b0384168183015290517fab2f5ddd7116794a68bdc6c3e14b18b5888ce4f48fdea983f4a1032a24a7989b9181900360600190a1505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611cf857604051634a7f394f60e01b815260040160405180910390fd5b620151808164ffffffffff161015611d2357604051634a7f394f60e01b815260040160405180910390fd5b62093a808164ffffffffff161115611d4e57604051634a7f394f60e01b815260040160405180910390fd5b6000805464ffffffffff191664ffffffffff83169081179091556040519081527f4b9e05d03a781f25fd55d65f8a28c7452e1ecb4a70c2b761bbfe0d9fb8a9d3cb90602001610bf0565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c9190612e91565b6001600160a01b031614611e7c576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6000808311611eba576040517f0f3e2a3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f99fbab88000000000000000000000000000000000000000000000000000000008152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240160e060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190612eff565b90508264ffffffffff16816060015165ffffffffffff161015611f855751519050610ca9565b5060009392505050565b60008160e0015115611fa357506002919050565b816060015164ffffffffff164211611fbd57506000919050565b816080015164ffffffffff164211611fd757506001919050565b81604001516001600160601b031682602001516001600160601b03161161200057506003919050565b8160a0015164ffffffffff1660000361201b57506004919050565b8160c001511561202d57506007919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190612b79565b8260a0015164ffffffffff166120c59190612cdb565b42106120d357506006919050565b506005919050565b919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2b065378686868686604051602001612128959493929190612fc0565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161215c91815260200190565b602060405180830381865afa158015612179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219d9190612ffa565b156121bb5760405163baf3f0f760e01b815260040160405180910390fd5b6040517f3a66f9010000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633a66f901906122289088908890889088908890600401612fc0565b6020604051808303816000875af1158015612247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226b9190612b79565b505050505050565b8280548282559060005260206000209081019282156122e0579160200282015b828111156122e057825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178255602090920191600190910190612293565b506122ec9291506123cf565b5090565b8280548282559060005260206000209081019282156122e0579160200282015b828111156122e0578251825591602001919060010190612310565b828054828255906000526020600020908101928215612371579160200282015b8281111561237157825182906123619082613062565b509160200191906001019061234b565b506122ec9291506123e4565b8280548282559060005260206000209081019282156123c3579160200282015b828111156123c357825182906123b39082613062565b509160200191906001019061239d565b506122ec929150612401565b5b808211156122ec57600081556001016123d0565b808211156122ec5760006123f8828261241e565b506001016123e4565b808211156122ec576000612415828261241e565b50600101612401565b50805461242a90612ca1565b6000825580601f1061243a575050565b601f016020900490600052602060002090810190611e7c91906123cf565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561249157612491612458565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156124c0576124c0612458565b604052919050565b600067ffffffffffffffff8211156124e2576124e2612458565b5060051b60200190565b6001600160a01b0381168114611e7c57600080fd5b600082601f83011261251257600080fd5b81356020612527612522836124c8565b612497565b82815260059290921b8401810191818101908684111561254657600080fd5b8286015b8481101561256a57803561255d816124ec565b835291830191830161254a565b509695505050505050565b600082601f83011261258657600080fd5b81356020612596612522836124c8565b82815260059290921b840181019181810190868411156125b557600080fd5b8286015b8481101561256a57803583529183019183016125b9565b600067ffffffffffffffff8211156125ea576125ea612458565b50601f01601f191660200190565b6000612606612522846125d0565b905082815283838301111561261a57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261264257600080fd5b612651838335602085016125f8565b9392505050565b600082601f83011261266957600080fd5b81356020612679612522836124c8565b82815260059290921b8401810191818101908684111561269857600080fd5b8286015b8481101561256a57803567ffffffffffffffff8111156126bc5760008081fd5b6126ca8986838b0101612631565b84525091830191830161269c565b600082601f8301126126e957600080fd5b813560206126f9612522836124c8565b82815260059290921b8401810191818101908684111561271857600080fd5b8286015b8481101561256a57803567ffffffffffffffff81111561273c5760008081fd5b8701603f8101891361274e5760008081fd5b61275f8986830135604084016125f8565b84525091830191830161271c565b60008060008060008060c0878903121561278657600080fd5b863567ffffffffffffffff8082111561279e57600080fd5b6127aa8a838b01612501565b975060208901359150808211156127c057600080fd5b6127cc8a838b01612575565b965060408901359150808211156127e257600080fd5b6127ee8a838b01612658565b9550606089013591508082111561280457600080fd5b6128108a838b016126d8565b9450608089013591508082111561282657600080fd5b5061283389828a01612631565b92505060a087013590509295509295509295565b60006020828403121561285957600080fd5b813564ffffffffff8116811461265157600080fd5b803567ffffffffffffffff811681146120db57600080fd5b60006020828403121561289857600080fd5b6126518261286e565b634e487b7160e01b600052602160045260246000fd5b60208101600883106128d957634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b8381101561290f578151875295820195908201906001016128f3565b509495945050505050565b60005b8381101561293557818101518382015260200161291d565b8381111561185c5750506000910152565b6000815180845261295e81602086016020860161291a565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156129ba5782840389526129a8848351612946565b98850198935090840190600101612990565b5091979650505050505050565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b80831015612a155783516001600160a01b031682529284019260019290920191908401906129ec565b50838701519350601f19925082868203016040870152612a3581856128df565b93505050604085015181858403016060860152612a528382612972565b925050606085015181858403016080860152612a6e8382612972565b9695505050505050565b600060208284031215612a8a57600080fd5b5035919050565b60008060408385031215612aa457600080fd5b612aad8361286e565b946020939093013593505050565b6001600160601b0381168114611e7c57600080fd5b600060208284031215612ae257600080fd5b813561265181612abb565b8015158114611e7c57600080fd5b600080600060608486031215612b1057600080fd5b612b198461286e565b92506020840135612b2981612aed565b929592945050506040919091013590565b634e487b7160e01b600052601160045260246000fd5b600064ffffffffff808316818516808303821115612b7057612b70612b3a565b01949350505050565b600060208284031215612b8b57600080fd5b5051919050565b600064ffffffffff83811690831681811015612bb057612bb0612b3a565b039392505050565b60006000198203612bcb57612bcb612b3a565b5060010190565b67ffffffffffffffff89168152610100602080830182905289519183018290526000916101208401918b810191845b81811015612c265783516001600160a01b031685529382019392820192600101612c01565b505050508281036040840152612c3c818a6128df565b90508281036060840152612c508189612972565b90508281036080840152612c648188612972565b64ffffffffff871660a0850152905064ffffffffff851660c084015282810360e0840152612c928185612946565b9b9a5050505050505050505050565b600181811c90821680612cb557607f821691505b602082108103612cd557634e487b7160e01b600052602260045260246000fd5b50919050565b60008219821115612cee57612cee612b3a565b500190565b634e487b7160e01b600052603260045260246000fd5b60008154612d1681612ca1565b808552602060018381168015612d335760018114612d6b57612d99565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b8901019550612d99565b866000528260002060005b85811015612d915781548a8201860152908301908401612d76565b890184019650505b505050505092915050565b6001600160a01b038616815284602082015260a060408201526000612dcc60a0830186612d09565b8281036060840152612dde8186612d09565b91505064ffffffffff831660808301529695505050505050565b600060208284031215612e0a57600080fd5b815167ffffffffffffffff811115612e2157600080fd5b8201601f81018413612e3257600080fd5b8051612e40612522826125d0565b818152856020838501011115612e5557600080fd5b612e6682602083016020860161291a565b95945050505050565b60006001600160601b03808316818516808303821115612b7057612b70612b3a565b600060208284031215612ea357600080fd5b8151612651816124ec565b80516120db816124ec565b600060408284031215612ecb57600080fd5b612ed361246e565b9050815181526020820151602082015292915050565b805165ffffffffffff811681146120db57600080fd5b600081830360e0811215612f1257600080fd5b60405160a0810181811067ffffffffffffffff82111715612f3557612f35612458565b6040908152821215612f4657600080fd5b612f4e61246e565b91508351612f5b81612abb565b82526020840151612f6b816124ec565b6020830152818152612f808560408601612eb9565b6020820152612f9160808501612eae565b6040820152612fa260a08501612ee9565b6060820152612fb360c08501612ee9565b6080820152949350505050565b6001600160a01b038616815284602082015260a060408201526000612fe860a0830186612946565b8281036060840152612dde8186612946565b60006020828403121561300c57600080fd5b815161265181612aed565b601f82111561305d57600081815260208120601f850160051c8101602086101561303e5750805b601f850160051c820191505b8181101561226b5782815560010161304a565b505050565b815167ffffffffffffffff81111561307c5761307c612458565b6130908161308a8454612ca1565b84613017565b602080601f8311600181146130c557600084156130ad5750858301515b600019600386901b1c1916600185901b17855561226b565b600085815260208120601f198616915b828110156130f4578886015182559484019460019091019084016130d5565b50858210156131125787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212207510720b4c693837355491acfecb686abddf5b28a76543b77d46ecd89564fb9964736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
