diff --git a/contracts/community/Community.sol b/contracts/community/Community.sol index 8f7a6e2..5102790 100755 --- a/contracts/community/Community.sol +++ b/contracts/community/Community.sol @@ -51,7 +51,7 @@ contract Community is ICommunity { uint256[] public projectIds; uint256 public totalMembersAllowed; uint256 public rolesCount; - mapping (RoleUtils.Roles => uint256) public roleMembershipsLeft; + mapping(RoleUtils.Roles => uint256) public roleMembershipsLeft; bool public claimableSkillWallets; // add JSON Schema base URL @@ -71,7 +71,10 @@ contract Community is ICommunity { _rolesCount == 2 || _rolesCount == 3, "Only 2 or 3 roles accepted" ); - require(_totalMembersAllowed >= _rolesCount, "Total members are less than roles"); + require( + _totalMembersAllowed >= _rolesCount, + "Total members are less than roles" + ); metadataUri = _url; distributedTownAddr = _distributedTownAddr; @@ -86,25 +89,28 @@ contract Community is ICommunity { ditoCreditsAddr ); gigsAddr = GigsFactory(provider.gigsFactory()).deploy(); - + totalMembersAllowed = _totalMembersAllowed; rolesCount = _rolesCount; uint256 totalroleMemberships = 0; uint256[3] memory roleCoefs = RoleUtils.getRolesCoefs(_rolesCount); for (uint256 i = 0; i < _rolesCount; i++) { //probably use math lib here or have limit for max totalMembersAllowed - uint256 roleMemberships = _totalMembersAllowed * roleCoefs[i] / 100; + uint256 roleMemberships = (_totalMembersAllowed * + roleCoefs[i]) / 100; if (roleMemberships == 0) roleMemberships = 1; roleMembershipsLeft[RoleUtils.Roles(i + 1)] = roleMemberships; totalroleMemberships += roleMemberships; } - uint256 leftoverMemberships = _totalMembersAllowed - totalroleMemberships; + uint256 leftoverMemberships = _totalMembersAllowed - + totalroleMemberships; if (leftoverMemberships > 0) { roleMembershipsLeft[RoleUtils.Roles.ROLE1]++; - if (leftoverMemberships == 2) roleMembershipsLeft[RoleUtils.Roles.ROLE2]++; + if (leftoverMemberships == 2) + roleMembershipsLeft[RoleUtils.Roles.ROLE2]++; } - + claimableSkillWallets = _claimableSkillWallets; if (_isDitoNative) { @@ -133,9 +139,13 @@ contract Community is ICommunity { creditsToTransfer = currentCommunity.creditsToTransfer(); rolesCount = currentCommunity.rolesCount(); - roleMembershipsLeft[RoleUtils.Roles(1)] = currentCommunity.roleMembershipsLeft(RoleUtils.Roles(1)); - roleMembershipsLeft[RoleUtils.Roles(2)] = currentCommunity.roleMembershipsLeft(RoleUtils.Roles(2)); - if (rolesCount == 3) roleMembershipsLeft[RoleUtils.Roles(3)] = currentCommunity.roleMembershipsLeft(RoleUtils.Roles(3)); + roleMembershipsLeft[RoleUtils.Roles(1)] = currentCommunity + .roleMembershipsLeft(RoleUtils.Roles(1)); + roleMembershipsLeft[RoleUtils.Roles(2)] = currentCommunity + .roleMembershipsLeft(RoleUtils.Roles(2)); + if (rolesCount == 3) + roleMembershipsLeft[RoleUtils.Roles(3)] = currentCommunity + .roleMembershipsLeft(RoleUtils.Roles(3)); status = STATUS.IN_PROGRESS; migratedFrom = _migrateFrom; @@ -181,15 +191,8 @@ contract Community is ICommunity { status = STATUS.MIGRATED; } - function joinNewMember( - string memory uri, - uint256 role, - uint256 credits - ) public override { - if (creditsToTransfer == 0) { - credits = 0; - } - _joinNewMember(msg.sender, uri, role, credits); + function joinNewMember(string memory uri, uint256 role) public override { + _joinNewMember(msg.sender, uri, role, 0); } // check if it's called only from deployer. @@ -204,7 +207,10 @@ contract Community is ICommunity { "No free spots left!" ); - require(roleMembershipsLeft[RoleUtils.Roles(role)] > 0, "All role positions are taken"); + require( + roleMembershipsLeft[RoleUtils.Roles(role)] > 0, + "All role positions are taken" + ); require(!isMember(_member), "Already a member"); diff --git a/contracts/community/ICommunity.sol b/contracts/community/ICommunity.sol index a32df65..16deb43 100644 --- a/contracts/community/ICommunity.sol +++ b/contracts/community/ICommunity.sol @@ -28,9 +28,8 @@ interface ICommunity { // check if it's called only from deployer. function joinNewMember( string memory uri, - uint256 role, - uint256 credits - ) external; + uint256 role + ) external; //function rolesCount() external view returns (uint256); //function roleMembershiftsLeft(RoleUtils.Roles) external view returns (uint256); diff --git a/contracts/mocks/MockCommunityV2.sol b/contracts/mocks/MockCommunityV2.sol index a00d0a7..2fe55bd 100755 --- a/contracts/mocks/MockCommunityV2.sol +++ b/contracts/mocks/MockCommunityV2.sol @@ -145,8 +145,8 @@ contract MockCommunityV2 is ICommunity { status = STATUS.MIGRATED; } - function joinNewMember(string memory uri, uint role, uint256 credits) public override { - _joinNewMember(msg.sender, uri, role, credits); + function joinNewMember(string memory uri, uint role) public override { + _joinNewMember(msg.sender, uri, role, 0); } // check if it's called only from deployer. diff --git a/scripts/deployDistributedTown.js b/scripts/deployDistributedTown.js index 9f583e7..db8f353 100644 --- a/scripts/deployDistributedTown.js +++ b/scripts/deployDistributedTown.js @@ -10,7 +10,7 @@ const main = async () => { const gigStatuses = await GigStatuses.deploy(); await gigStatuses.deployed(); console.log('gigStatusesAddress', gigStatuses.address) - const skillWalletAddress = '0x044F5A0F1fEE8cEa95Da4574de375A4Ea1DF39EF'; + const skillWalletAddress = '0xdC8fDfBdddcce3b8DfFc345Bd426789a7b2534A1'; const addressProvider = await deploy('AddressProvider', [], {}, { @@ -35,8 +35,8 @@ const main = async () => { await distributedTown.deployed(); const a = await distributedTown.deployGenesisCommunities(0); - // await distributedTown.deployGenesisCommunities(1); - // await distributedTown.deployGenesisCommunities(2); + await distributedTown.deployGenesisCommunities(1); + await distributedTown.deployGenesisCommunities(2); console.log(await a.wait()); console.log(a); diff --git a/test/integration.js b/test/integration.js new file mode 100644 index 0000000..7b4caec --- /dev/null +++ b/test/integration.js @@ -0,0 +1,123 @@ +const skillWalletAddress = "0xdC8fDfBdddcce3b8DfFc345Bd426789a7b2534A1"; +const communityAddress = "0x8d67dBEF4F5259B48BFb35458174bEaeE60734b8"; + +const { assert } = require("chai"); +var ethers = require("ethers"); + +var communityAbi = require("../artifacts/contracts/community/Community.sol/Community.json") + .abi; + +var gigsAbi = require("../artifacts/contracts/gigs/Gigs.sol/Gigs.json").abi; +var skillWalletAbi = require("./skillWalletAbi.json").abi; + +const helpers = require("../test/helpers"); +const fs = require("fs"); + +function mnemonic() { + try { + return fs.readFileSync("./mnemonic.txt").toString().trim(); + } catch (e) { + console.log(e); + } + return ""; +} + +let keyPair = { + pubKey: + "0442f1fa140d9fcb8ddca188ffc83d1512bcb3be4de464512169c4555f3f7a6ca5e3afb51f7604cdbbf4234b6958852d0b4c57b0ba18af4350a652e889f7f6660a", +}; + +const provider = new ethers.providers.JsonRpcProvider( + // 'https://polygon-rpc.com/' + "https://matic-mumbai.chainstacklabs.com/" +); + +// Wallet connected to a provider +const senderWalletMnemonic = ethers.Wallet.fromMnemonic( + mnemonic(), + "m/44'/60'/0'/0/0" +); + +let signer = senderWalletMnemonic.connect(provider); + +const skillWalletContract = new ethers.Contract(skillWalletAddress, skillWalletAbi, signer) + +const communityContract = new ethers.Contract( + communityAddress, + communityAbi, + signer +); + +async function joinCommunity() { + // const newKeyPair = helpers.generateKeyPair(); + // keyPair = newKeyPair; + + const url = + "https://hub.textile.io/ipfs/bafkreicezefuc6einewxdqhlpefelzjponwdqt4vmp2byosq5uwpn7hgoq"; + const joinedTx = await communityContract.joinNewMember(url, 1); + const joinCommunityTxResult = await joinedTx.wait(); + const { events } = joinCommunityTxResult; + const memberAddedEventEmitted = events.find((e) => e.event === "MemberAdded"); + + assert.isOk(memberAddedEventEmitted, "MemberAdded event emitted"); + console.log("[joinCommunity]:", "MemberAdded event emitted"); + assert.isAbove(+memberAddedEventEmitted.args[1], -1, "TokenID is valid"); + console.log("[joinCommunity]:", "TokenID is valid"); + return memberAddedEventEmitted.args[1]; +} + + +async function claim() { + // const newKeyPair = helpers.generateKeyPair(); + // keyPair = newKeyPair; + + const claimTx = await skillWalletContract.claim(); + const claimTxResult = await claimTx.wait(); + const { events } = claimTxResult; + const claimEventEmitted = events.find((e) => e.event === "SkillWalletClaimed"); + + assert.isOk(claimEventEmitted, "SkillWalletClaimed event emitted"); + console.log("[claim]:", "SkillWalletClaimed event emitted"); + return; +} + + +async function getOSMAddr() { + const osmAddr = await skillWalletContract.getOSMAddress(); + console.log(osmAddr); +} + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +async function getCommunity(tokenID) { + const com = await skillWalletContract.getActiveCommunity(tokenID); + console.log("[active community]", com); +} + +async function test() { + // await joinCommunity(); + await claim(); +// await getOSMAddr(); + // const tokenId = 14; + + // await getCommunity(tokenId); + // // // const tokenId = await joinCommunity() + // // // await claim(); + + // await addPubKeyToSkillWallet(tokenId) + // const activateRes = await validateSW(tokenId, 0); + // await isSkillWalletActivated(tokenId) + // console.log( + // '[sleep]', + // 'waiting 10 seconds for the chainlink validation to pass', + // ) + // await sleep(10000) + // await isSkillWalletActivated(tokenId) + + // await getmetadata(tokenId) + // await addDiscordID(); +} + +test(); diff --git a/test/skillWalletAbi.json b/test/skillWalletAbi.json new file mode 100644 index 0000000..6e421c6 --- /dev/null +++ b/test/skillWalletAbi.json @@ -0,0 +1,1030 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SkillWalletID", + "sourceName": "contracts/main/SkillWallet.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "discordId", + "type": "string" + } + ], + "name": "DiscordIDConnectedToSkillWallet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + } + ], + "name": "PubKeyAddedToSkillWallet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + } + ], + "name": "SkillWalletActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "SkillWalletClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "newCommunity", + "type": "address" + } + ], + "name": "SkillWalletCommunityChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "skillWalletOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "community", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + } + ], + "name": "SkillWalletCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + } + ], + "name": "activateSkillWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "discordID", + "type": "string" + } + ], + "name": "addDiscordIDToSkillWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "pubKey", + "type": "string" + } + ], + "name": "addPubKeyToSkillWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "skillWalletOwner", + "type": "address" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "enum RoleUtils.Roles", + "name": "role", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "isClaimable", + "type": "bool" + } + ], + "name": "create", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + } + ], + "name": "getActiveCommunity", + "outputs": [ + { + "internalType": "address", + "name": "community", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "skillWalletOwner", + "type": "address" + } + ], + "name": "getClaimableSkillWalletId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + } + ], + "name": "getCommunityHistory", + "outputs": [ + { + "internalType": "address[]", + "name": "communities", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOSMAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + } + ], + "name": "getPubKeyBySkillWalletId", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "skillWalletHolderAddress", + "type": "address" + } + ], + "name": "getRole", + "outputs": [ + { + "internalType": "enum RoleUtils.Roles", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "skillWalletOwner", + "type": "address" + } + ], + "name": "getSkillWalletIdByOwner", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalSkillWalletsRegistered", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_linkToken", + "type": "address" + }, + { + "internalType": "address", + "name": "_oracle", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "requestId", + "type": "bytes32" + } + ], + "name": "isRequestIdValid", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "skillWalletId", + "type": "uint256" + } + ], + "name": "isSkillWalletActivated", + "outputs": [ + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "skillWalletOwner", + "type": "address" + } + ], + "name": "isSkillWalletClaimable", + "outputs": [ + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "skillWalletOwner", + "type": "address" + } + ], + "name": "isSkillWalletRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "osmAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "jobID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "setChainlinkDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "skillWalletClaimers", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "skillWalletToDiscordID", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "skillWalletToPubKey", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "skillWalletToRole", + "outputs": [ + { + "internalType": "enum RoleUtils.Roles", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50615c7b806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620002bc5760003560e01c8063588bf7a9116200017d5780638da5cb5b11620000e1578063b88d4fde1162000093578063b88d4fde1462000641578063c71ae3021462000658578063c87b56dd1462000662578063e985e9c51462000679578063ec660fd91462000690578063f2fde38b14620006a757620002bc565b80638da5cb5b14620005d15780638ec4ad9e14620005db5780638f4b3f5914620005f257806395d89b411462000609578063a1a366f31462000613578063a22cb465146200062a57620002bc565b80636eba3dce116200013b5780636eba3dce14620005545780636f7e85eb146200056b57806370a082311462000582578063715018a61462000599578063739c1cba14620005a357806388f683f614620005ba57620002bc565b8063588bf7a914620004ee578063617fc19d14620005055780636352211e146200051c57806365cbb7aa14620005335780636c0360eb146200054a57620002bc565b80632c18ee73116200022557806342842e0e11620001e357806342842e0e146200047157806342ca9629146200048857806344276733146200049f578063485cc95514620004b65780634e71d92d14620004cd5780634f6ccce714620004d757620002bc565b80632c18ee7314620003e05780632f745c5914620003f7578063388620d3146200040e578063407ca1c7146200042557806341df66d4146200044b57620002bc565b80630fddba5f116200027f5780630fddba5f146200035f578063150b7a02146200037657806318160ddd146200039c5780631b6989b514620003b557806323b872dd14620003bf5780632b32da9014620003d657620002bc565b806301ffc9a714620002c157806305eb4ec214620002f057806306fdde031462000309578063081812fc1462000322578063095ea7b31462000348575b600080fd5b620002d8620002d236600462002fcb565b620006be565b604051620002e79190620031f6565b60405180910390f35b620003076200030136600462003009565b620006e1565b005b62000313620007c0565b604051620002e791906200322b565b620003396200033336600462002fb2565b6200085b565b604051620002e7919062003119565b620003076200035936600462002f85565b620008a3565b620003076200037036600462002ecc565b6200094b565b6200038d6200038736600462002da6565b62000a00565b604051620002e7919062003201565b620003a662000a11565b604051620002e7919062003d3f565b6200033962000a24565b62000307620003d036600462002d61565b62000a33565b6200033962000a74565b62000307620003f136600462002f03565b62000a83565b620003a66200040836600462002f85565b62000c12565b620003136200041f36600462002fb2565b62000c45565b6200043c6200043636600462002fb2565b62000cea565b604051620002e79190620031a7565b620004626200045c36600462002fb2565b62000db2565b604051620002e7919062003216565b620003076200048236600462002d61565b62000dc7565b620003a66200049936600462002d0a565b62000de4565b62000462620004b036600462002d0a565b62000e2f565b62000307620004c736600462002d28565b62000e8a565b6200030762000fd5565b620003a6620004e836600462002fb2565b62001098565b62000307620004ff3660046200304d565b620010b6565b620003076200051636600462002fb2565b62001256565b620003396200052d36600462002fb2565b6200135c565b620003396200054436600462002fb2565b6200138d565b620003136200140f565b620003136200056536600462002fb2565b62001473565b620002d86200057c36600462002fb2565b62001512565b620003a66200059336600462002d0a565b62001527565b6200030762001575565b620002d8620005b436600462002d0a565b62001605565b620002d8620005cb36600462002d0a565b62001644565b620003396200168d565b620003a6620005ec36600462002d0a565b6200169c565b620002d86200060336600462002fb2565b620016f0565b620003136200176c565b620003136200062436600462002fb2565b620017d0565b620003076200063b36600462002e8d565b6200183b565b620003076200065236600462002e1d565b62001914565b620003a66200195c565b620003136200067336600462002fb2565b6200196a565b620002d86200068a36600462002d28565b62001ac5565b620003a6620006a136600462002d0a565b62001af3565b62000307620006b836600462002d0a565b62001b05565b6001600160e01b0319811660009081526033602052604090205460ff165b919050565b33600090815260cc602090815260408083205480845260c9909252909120546001600160a01b0316620007315760405162461bcd60e51b815260040162000728906200350b565b60405180910390fd5b600081815260cd602052604090205460ff16620007625760405162461bcd60e51b8152600401620007289062003788565b600081815260cf602052604090206200077d90848462002b0a565b507f6446b2d7ea6c1205b2b18097bd5eb8014ddc1a8c403ec673bce2d31432d2406b818484604051620007b39392919062003d5f565b60405180910390a1505050565b606a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620008505780601f10620008245761010080835404028352916020019162000850565b820191906000526020600020905b8154815290600101906020018083116200083257829003601f168201915b505050505090505b90565b6000620008688262001bd0565b620008875760405162461bcd60e51b815260040162000728906200397c565b506000908152606860205260409020546001600160a01b031690565b6000620008b0826200135c565b9050806001600160a01b0316836001600160a01b03161415620008e75760405162461bcd60e51b8152600401620007289062003ae1565b806001600160a01b0316620008fb62001be5565b6001600160a01b031614806200091b57506200091b816200068a62001be5565b6200093a5760405162461bcd60e51b815260040162000728906200372b565b62000946838362001be9565b505050565b6200095562001be5565b6001600160a01b0316620009686200168d565b6001600160a01b031614620009915760405162461bcd60e51b8152600401620007289062003a14565b60d254604051630fddba5f60e01b81526001600160a01b0390911690630fddba5f90620009c79086908690869060040162003186565b600060405180830381600087803b158015620009e257600080fd5b505af1158015620009f7573d6000803e3d6000fd5b50505050505050565b630a85bd0160e11b95945050505050565b600062000a1f606662001c59565b905090565b60d2546001600160a01b031690565b62000a4862000a4162001be5565b8262001c66565b62000a675760405162461bcd60e51b8152600401620007289062003bba565b6200094683838362001cf8565b60d2546001600160a01b031681565b62000a8e8462001527565b1562000aae5760405162461bcd60e51b8152600401620007289062003240565b6001600160a01b038416600090815260d060205260409020541562000ae75760405162461bcd60e51b81526004016200072890620034ad565b600062000af560d162001d30565b9050811562000b2b5762000b0a308262001d34565b6001600160a01b038516600090815260d06020526040902081905562000b37565b62000b37858262001d34565b62000b43818562001d54565b600081815260c9602090815260408083208054336001600160a01b0319918216811790925560cb845282852080546001818101835591875285872001805490921690921790556001600160a01b038916845260cc835281842085905584845260ca9092529091208054859260ff199091169083600681111562000bc257fe5b021790555062000bd360d162001d9f565b604051819033906001600160a01b038816907f66ac2c421746d22be0909c7dcc105fafb6df697e7bd8b5489e5df0fca2bb0b8c90600090a45050505050565b6001600160a01b038216600090815260656020526040812062000c3c908363ffffffff62001da816565b90505b92915050565b600081815260ce602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801562000cde5780601f1062000cb25761010080835404028352916020019162000cde565b820191906000526020600020905b81548152906001019060200180831162000cc057829003601f168201915b50505050509050919050565b606062000cf860d162001d30565b821062000d195760405162461bcd60e51b815260040162000728906200381d565b600082815260cb602052604090205462000d475760405162461bcd60e51b8152600401620007289062003c8c565b600082815260cb60209081526040918290208054835181840281018401909452808452909183018282801562000cde57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000d885750505050509050919050565b60ca6020526000908152604090205460ff1681565b620009468383836040518060200160405280600081525062001914565b600062000df18262001527565b60011462000e135760405162461bcd60e51b815260040162000728906200357b565b506001600160a01b0316600090815260cc602052604090205490565b600062000e3c8262001527565b60011462000e5e5760405162461bcd60e51b815260040162000728906200357b565b506001600160a01b0316600090815260cc6020908152604080832054835260ca90915290205460ff1690565b600054610100900460ff168062000ea6575062000ea662001db6565b8062000eb5575060005460ff16155b62000ed45760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562000f00576000805460ff1961ff0019909116610100171660011790555b62000f0a62001dc9565b62000f576040518060400160405280600d81526020016c14dada5b1b15d85b1b195d1251609a1b8152506040518060400160405280600481526020016314d5d25160e21b81525062001e69565b62000f6360d162001d9f565b828260405162000f739062002b8f565b62000f809291906200316c565b604051809103906000f08015801562000f9d573d6000803e3d6000fd5b5060d280546001600160a01b0319166001600160a01b0392909216919091179055801562000946576000805461ff0019169055505050565b62000fe03362001527565b15620010005760405162461bcd60e51b8152600401620007289062003240565b33600090815260d060205260409020546200102f5760405162461bcd60e51b8152600401620007289062003386565b33600081815260d060205260409020546200104c91309162001cf8565b33600081815260d06020526040908190205490517f9bfc3cadf48744b6422b7ce9665cb9c6677f11494a78d74faab3abebe3c6afa2926200108e929162003d48565b60405180910390a1565b600080620010ae60668463ffffffff62001f1616565b509392505050565b620010c062001be5565b6001600160a01b0316620010d36200168d565b6001600160a01b031614620010fc5760405162461bcd60e51b8152600401620007289062003a14565b6200110860d162001d30565b8310620011295760405162461bcd60e51b815260040162000728906200381d565b600083815260c960205260409020546001600160a01b0316620011605760405162461bcd60e51b815260040162000728906200350b565b600083815260cd602052604090205460ff1615620011925760405162461bcd60e51b8152600401620007289062003b6f565b600083815260ce60205260409020546002600019610100600184161502019091160415620011d45760405162461bcd60e51b8152600401620007289062003ce9565b30620011e0846200135c565b6001600160a01b031614156200120a5760405162461bcd60e51b81526004016200072890620038b3565b600083815260ce602052604090206200122590838362002b0a565b5060405183907f46720ddbef9dfaafeff045ae333e447ae69c7560cb5982ce5f6c1c55471db14190600090a2505050565b60d2546001600160a01b03163314620012835760405162461bcd60e51b81526004016200072890620036d6565b6200128f60d162001d30565b8110620012b05760405162461bcd60e51b815260040162000728906200381d565b600081815260c960205260409020546001600160a01b0316620012e75760405162461bcd60e51b815260040162000728906200350b565b600081815260cd602052604090205460ff1615620013195760405162461bcd60e51b8152600401620007289062003b6f565b600081815260cd6020526040808220805460ff191660011790555182917f3b9fa7eba99fc1e57dd4fc92ee03c32e0766a7c33c9f6222a3e3d72788fe4ff691a250565b600062000c3f8260405180606001604052806029815260200162005c1d602991396066919063ffffffff62001f3616565b60006200139b60d162001d30565b8210620013bc5760405162461bcd60e51b815260040162000728906200381d565b600082815260c960205260409020546001600160a01b0316620013f35760405162461bcd60e51b815260040162000728906200350b565b50600090815260c960205260409020546001600160a01b031690565b606d8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620008505780601f10620008245761010080835404028352916020019162000850565b60cf6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156200150a5780601f10620014de576101008083540402835291602001916200150a565b820191906000526020600020905b815481529060010190602001808311620014ec57829003601f168201915b505050505081565b600090815260d4602052604090205460ff1690565b60006001600160a01b038216620015525760405162461bcd60e51b81526004016200072890620037d3565b6001600160a01b038216600090815260656020526040902062000c3f9062001c59565b6200157f62001be5565b6001600160a01b0316620015926200168d565b6001600160a01b031614620015bb5760405162461bcd60e51b8152600401620007289062003a14565b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60006001600160a01b038216620016305760405162461bcd60e51b8152600401620007289062003b22565b6200163b8262001527565b60011492915050565b60006001600160a01b0382166200166f5760405162461bcd60e51b8152600401620007289062003b22565b506001600160a01b0316600090815260d06020526040902054151590565b6097546001600160a01b031690565b6001600160a01b038116600090815260d06020526040812054620016d45760405162461bcd60e51b815260040162000728906200345d565b506001600160a01b0316600090815260d0602052604090205490565b6000620016fe60d162001d30565b82106200171f5760405162461bcd60e51b815260040162000728906200381d565b600082815260c960205260409020546001600160a01b0316620017565760405162461bcd60e51b815260040162000728906200350b565b50600090815260cd602052604090205460ff1690565b606b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620008505780601f10620008245761010080835404028352916020019162000850565b60ce6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156200150a5780601f10620014de576101008083540402835291602001916200150a565b6200184562001be5565b6001600160a01b0316826001600160a01b03161415620018795760405162461bcd60e51b815260040162000728906200360d565b80606960006200188862001be5565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155620018ce62001be5565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051620019089190620031f6565b60405180910390a35050565b620019296200192262001be5565b8362001c66565b620019485760405162461bcd60e51b8152600401620007289062003bba565b620019568484848462001f4f565b50505050565b600062000a1f60d162001d30565b6060620019778262001bd0565b620019965760405162461bcd60e51b8152600401620007289062003a92565b6000828152606c602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801562001a2f5780601f1062001a035761010080835404028352916020019162001a2f565b820191906000526020600020905b81548152906001019060200180831162001a1157829003601f168201915b50505050509050606062001a426200140f565b905080516000141562001a5857509050620006dc565b81511562001a8e57808260405160200162001a75929190620030e7565b60405160208183030381529060405292505050620006dc565b8062001a9a8562001f89565b60405160200162001aad929190620030e7565b60405160208183030381529060405292505050919050565b6001600160a01b03918216600090815260696020908152604080832093909416825291909152205460ff1690565b60d06020526000908152604090205481565b62001b0f62001be5565b6001600160a01b031662001b226200168d565b6001600160a01b03161462001b4b5760405162461bcd60e51b8152600401620007289062003a14565b6001600160a01b03811662001b745760405162461bcd60e51b8152600401620007289062003340565b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b600062000c3f60668363ffffffff6200206d16565b3390565b600081815260686020526040902080546001600160a01b0319166001600160a01b038416908117909155819062001c20826200135c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600062000c3f8262001d30565b600062001c738262001bd0565b62001c925760405162461bcd60e51b815260040162000728906200368a565b600062001c9f836200135c565b9050806001600160a01b0316846001600160a01b0316148062001cdd5750836001600160a01b031662001cd2846200085b565b6001600160a01b0316145b8062001cf0575062001cf0818562001ac5565b949350505050565b6001600160a01b038316301462001d235760405162461bcd60e51b8152600401620007289062003c42565b620009468383836200207b565b5490565b62001d50828260405180602001604052806000815250620021ad565b5050565b62001d5f8262001bd0565b62001d7e5760405162461bcd60e51b81526004016200072890620039c8565b6000828152606c602090815260409091208251620009469284019062002b9d565b80546001019055565b600062000c3c8383620021e7565b600062001dc33062002230565b15905090565b600054610100900460ff168062001de5575062001de562001db6565b8062001df4575060005460ff16155b62001e135760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562001e3f576000805460ff1961ff0019909116610100171660011790555b62001e4962002236565b62001e53620022c0565b801562001e66576000805461ff00191690555b50565b600054610100900460ff168062001e85575062001e8562001db6565b8062001e94575060005460ff16155b62001eb35760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562001edf576000805460ff1961ff0019909116610100171660011790555b62001ee962002236565b62001ef3620023a5565b62001eff83836200242d565b801562000946576000805461ff0019169055505050565b600080808062001f27868662002505565b909450925050505b9250929050565b600062001f4584848462002565565b90505b9392505050565b62001f5c84848462001cf8565b62001f6a84848484620025c8565b620019565760405162461bcd60e51b81526004016200072890620032ee565b60608162001fb057506040805180820190915260018152600360fc1b6020820152620006dc565b8160005b811562001fca57600101600a8204915062001fb4565b60608167ffffffffffffffff8111801562001fe457600080fd5b506040519080825280601f01601f19166020018201604052801562002010576020820181803683370190505b50859350905060001982015b83156200206457600a840660300160f81b828280600190039350815181106200204157fe5b60200101906001600160f81b031916908160001a905350600a840493506200201c565b50949350505050565b600062000c3c8383620026ba565b826001600160a01b031662002090826200135c565b6001600160a01b031614620020b95760405162461bcd60e51b8152600401620007289062003a49565b6001600160a01b038216620020e25760405162461bcd60e51b81526004016200072890620035c9565b620020ef83838362000946565b620020fc60008262001be9565b6001600160a01b038316600090815260656020526040902062002126908263ffffffff620026d216565b506001600160a01b038216600090815260656020526040902062002151908263ffffffff620026e016565b50620021666066828463ffffffff620026ee16565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b620021b9838362002706565b620021c86000848484620025c8565b620009465760405162461bcd60e51b81526004016200072890620032ee565b815460009082106200220d5760405162461bcd60e51b81526004016200072890620032ac565b8260000182815481106200221d57fe5b9060005260206000200154905092915050565b3b151590565b600054610100900460ff16806200225257506200225262001db6565b8062002261575060005460ff16155b620022805760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562001e53576000805460ff1961ff001990911661010017166001179055801562001e66576000805461ff001916905550565b600054610100900460ff1680620022dc5750620022dc62001db6565b80620022eb575060005460ff16155b6200230a5760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562002336576000805460ff1961ff0019909116610100171660011790555b60006200234262001be5565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801562001e66576000805461ff001916905550565b600054610100900460ff1680620023c15750620023c162001db6565b80620023d0575060005460ff16155b620023ef5760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff161580156200241b576000805460ff1961ff0019909116610100171660011790555b62001e536301ffc9a760e01b620027e4565b600054610100900460ff16806200244957506200244962001db6565b8062002458575060005460ff16155b620024775760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff16158015620024a3576000805460ff1961ff0019909116610100171660011790555b8251620024b890606a90602086019062002b9d565b508151620024ce90606b90602085019062002b9d565b50620024e16380ac58cd60e01b620027e4565b620024f3635b5e139f60e01b620027e4565b62001eff63780e9d6360e01b620027e4565b8154600090819083106200252d5760405162461bcd60e51b8152600401620007289062003905565b60008460000184815481106200253f57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281620025985760405162461bcd60e51b81526004016200072891906200322b565b50846000016001820381548110620025ac57fe5b9060005260206000209060020201600101549150509392505050565b6000620025de846001600160a01b031662002230565b620025ec5750600162001cf0565b606062002681630a85bd0160e11b6200260462001be5565b8887876040516024016200261c94939291906200312d565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505060405180606001604052806032815260200162005beb603291396001600160a01b038816919063ffffffff6200283616565b90506000818060200190518101906200269b919062002fea565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b60009081526001919091016020526040902054151590565b600062000c3c838362002847565b600062000c3c838362002913565b600062001f4584846001600160a01b03851662002962565b6001600160a01b0382166200272f5760405162461bcd60e51b8152600401620007289062003947565b6200273a8162001bd0565b156200275a5760405162461bcd60e51b8152600401620007289062003426565b620027686000838362000946565b6001600160a01b038216600090815260656020526040902062002792908263ffffffff620026e016565b50620027a76066828463ffffffff620026ee16565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198082161415620028115760405162461bcd60e51b81526004016200072890620033ef565b6001600160e01b0319166000908152603360205260409020805460ff19166001179055565b606062001f458484600085620029fd565b600081815260018301602052604081205480156200290857835460001980830191908101906000908790839081106200287c57fe5b90600052602060002001549050808760000184815481106200289a57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080620028cb57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505062000c3f565b600091505062000c3f565b6000620029218383620026ba565b620029595750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000c3f565b50600062000c3f565b600082815260018401602052604081205480620029c957505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205562001f48565b82856000016001830381548110620029dd57fe5b906000526020600020906002020160010181905550600091505062001f48565b60608247101562002a225760405162461bcd60e51b8152600401620007289062003644565b62002a2d8562002230565b62002a4c5760405162461bcd60e51b8152600401620007289062003c0b565b60006060866001600160a01b0316858760405162002a6b9190620030c9565b60006040518083038185875af1925050503d806000811462002aaa576040519150601f19603f3d011682016040523d82523d6000602084013e62002aaf565b606091505b509150915062002ac182828662002acc565b979650505050505050565b6060831562002add57508162001f48565b82511562002aee5782518084602001fd5b8160405162461bcd60e51b81526004016200072891906200322b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062002b4d5782800160ff1982351617855562002b7d565b8280016001018555821562002b7d579182015b8281111562002b7d57823582559160200191906001019062002b60565b5062002b8b92915062002c10565b5090565b611df98062003df283390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062002be057805160ff191683800117855562002b7d565b8280016001018555821562002b7d579182015b8281111562002b7d57825182559160200191906001019062002bf3565b6200085891905b8082111562002b8b576000815560010162002c17565b80356001600160a01b038116811462000c3f57600080fd5b60008083601f84011262002c57578182fd5b50813567ffffffffffffffff81111562002c6f578182fd5b60208301915083602082850101111562001f2f57600080fd5b600082601f83011262002c99578081fd5b813567ffffffffffffffff8082111562002cb1578283fd5b604051601f8301601f19168101602001828111828210171562002cd2578485fd5b60405282815292508284830160200186101562002cee57600080fd5b8260208601602083013760006020848301015250505092915050565b60006020828403121562002d1c578081fd5b62000c3c838362002c2d565b6000806040838503121562002d3b578081fd5b62002d47848462002c2d565b915062002d58846020850162002c2d565b90509250929050565b60008060006060848603121562002d76578081fd5b833562002d838162003dc4565b9250602084013562002d958162003dc4565b929592945050506040919091013590565b60008060008060006080868803121562002dbe578081fd5b62002dca878762002c2d565b945062002ddb876020880162002c2d565b935060408601359250606086013567ffffffffffffffff81111562002dfe578182fd5b62002e0c8882890162002c45565b969995985093965092949392505050565b6000806000806080858703121562002e33578384fd5b62002e3f868662002c2d565b935062002e50866020870162002c2d565b925060408501359150606085013567ffffffffffffffff81111562002e73578182fd5b62002e818782880162002c88565b91505092959194509250565b6000806040838503121562002ea0578182fd5b62002eac848462002c2d565b91506020830135801515811462002ec1578182fd5b809150509250929050565b60008060006060848603121562002ee1578283fd5b833562002eee8162003dc4565b95602085013595506040909401359392505050565b6000806000806080858703121562002f19578384fd5b843562002f268162003dc4565b9350602085013567ffffffffffffffff81111562002f42578384fd5b62002f508782880162002c88565b93505060408501356007811062002f65578283fd5b91506060850135801515811462002f7a578182fd5b939692955090935050565b6000806040838503121562002f98578182fd5b62002fa4848462002c2d565b946020939093013593505050565b60006020828403121562002fc4578081fd5b5035919050565b60006020828403121562002fdd578081fd5b813562001f488162003dda565b60006020828403121562002ffc578081fd5b815162001f488162003dda565b600080602083850312156200301c578182fd5b823567ffffffffffffffff81111562003033578283fd5b620030418582860162002c45565b90969095509350505050565b60008060006040848603121562003062578081fd5b83359250602084013567ffffffffffffffff81111562003080578182fd5b6200308e8682870162002c45565b9497909650939450505050565b60008151808452620030b581602086016020860162003d95565b601f01601f19169290920160200192915050565b60008251620030dd81846020870162003d95565b9190910192915050565b60008351620030fb81846020880162003d95565b83519083016200311082826020880162003d95565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009062003162908301846200309b565b9695505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6020808252825182820181905260009190848201906040850190845b81811015620031ea5783516001600160a01b031683529284019291840191600101620031c3565b50909695505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60208101600783106200322557fe5b91905290565b60006020825262000c3c60208301846200309b565b60208082526046908201527f536b696c6c57616c6c65743a20546865726520697320536b696c6c57616c6c6560408201527f7420616c7265616479207265676973746572656420666f722074686973206164606082015265323932b9b99760d11b608082015260a00190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526043908201527f536b696c6c57616c6c65743a205468657265206973206e6f20536b696c6c576160408201527f6c6c657420746f20626520636c61696d6564206279207468697320616464726560608201526239b99760e91b608082015260a00190565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526030908201527f536b696c6c57616c6c65743a2054686520536b696c6c57616c6c657420636c6160408201526f34b6b2b91034b99034b73b30b634b21760811b606082015260800190565b602080825260409082018190527f536b696c6c57616c6c65743a20546865726520697320536b696c6c57616c6c65908201527f7420746f20626520636c61696d6564206279207468697320616464726573732e606082015260800190565b6020808252604a908201527f536b696c6c57616c6c65743a2054686520536b696c6c57616c6c65742069732060408201527f6e6f7420696e20616e7920636f6d6d756e6974792c20696e76616c696420536b60608201526934b6362bb0b63632ba1760b11b608082015260a00190565b6020808252602e908201527f536b696c6c57616c6c65743a2054686520536b696c6c57616c6c6574206f776e60408201526d32b91034b99034b73b30b634b21760911b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526035908201527f546869732066756e6374696f6e2063616e2062652063616c6c6564206f6e6c7960408201527420627920746865204f534d20636f6e74726163742160581b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602b908201527f536b696c6c57616c6c65743a20536b696c6c2077616c6c6574206e6f7420796560408201526a1d081858dd1a5d985d195960aa1b606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526028908201527f536b696c6c57616c6c65743a20736b696c6c57616c6c65744964206f7574206f60408201526733103930b733b29760c11b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526032908201527f536b696c6c57616c6c65743a20536b696c6c2077616c6c6574206861736e2774604082015271103132b2b71031b630b4b6b2b2103cb2ba1760711b606082015260800190565b60208082526022908201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252602c908201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252602d908201527f536b696c6c57616c6c65743a20496e76616c696420736b696c6c57616c6c657460408201526c4f776e6572206164647265737360981b606082015260800190565b6020808252602b908201527f536b696c6c57616c6c65743a20536b696c6c2077616c6c657420616c7265616460408201526a1e481858dd1a5d985d195960aa1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f536b696c6c57616c6c65743a20536b696c6c57616c6c6574207472616e7366656040820152691c88191a5cd8589b195960b21b606082015260800190565b6020808252603a908201527f536b696c6c57616c6c65743a2054686520536b696c6c57616c6c65742069732060408201527f6e6f742070617274206f6620616e7920636f6d6d756e6974792e000000000000606082015260800190565b60208082526036908201527f536b696c6c57616c6c65743a20536b696c6c2077616c6c657420616c726561646040820152753c903430b990383ab125b2bc9030b9b9b4b3b732b21760511b606082015260800190565b90815260200190565b9182526001600160a01b0316602082015260400190565b60008482526040602083015282604083015282846060840137818301606090810191909152601f909201601f1916010192915050565b60005b8381101562003db257818101518382015260200162003d98565b83811115620019565750506000910152565b6001600160a01b038116811462001e6657600080fd5b6001600160e01b03198116811462001e6657600080fdfe608060405260016004553480156200001657600080fd5b5060405162001df938038062001df98339810160408190526200003991620000ce565b6200004d826001600160e01b03620000ac16565b600680546001600160a01b039092166001600160a01b03199283161790557f393661376465306233633431343062346230346264633264303538653535396360075566b1a2bc2ec5000060085560098054909116331790555062000125565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008060408385031215620000e1578182fd5b8251620000ee816200010c565b602084015190925062000101816200010c565b809150509250929050565b6001600160a01b03811681146200012257600080fd5b50565b611cc480620001356000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630fddba5f146100465780631ad563961461005b5780635f6c93ad1461006e575b600080fd5b6100596100543660046115d7565b610081565b005b610059610069366004611627565b6100dd565b61005961007c366004611656565b610696565b6009546001600160a01b031633146100b45760405162461bcd60e51b81526004016100ab90611a51565b60405180910390fd5b600680546001600160a01b0319166001600160a01b039490941693909317909255600755600855565b60008281526005602052604090205482906001600160a01b031633146101155760405162461bcd60e51b81526004016100ab90611b81565b60008181526005602052604080822080546001600160a01b03191690555182917f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a91a261016061115c565b6000848152600a602090815260409182902082516060810190935280546001600160a01b03811684529091830190600160a01b900460ff1660058111156101a357fe5b60058111156101ae57fe5b81526020016001820160405180606001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156102925760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561027e5780601f106102535761010080835404028352916020019161027e565b820191906000526020600020905b81548152906001019060200180831161026157829003601f168201915b5050505050815260200190600101906101e7565b505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156102e957602002820191906000526020600020905b8154815260200190600101908083116102d5575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561034b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161032d575b5050505050815250508152505090508215610657577f9deb3aa1850ce8b8beb0fc836ebcff5a08e5347d0c2a2ec2f40ab96ff6593eab8460405161038f9190611955565b60405180910390a16000848152600b60205260409020805460ff19166001908117909155816020015160058111156103c357fe5b14156103cf5750610691565b6000816020015160058111156103e157fe5b14156104c25760095481516040516342ca962960e01b81526001600160a01b039092169163617fc19d9183916342ca96299161041f916004016118b2565b60206040518083038186803b15801561043757600080fd5b505afa15801561044b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046f9190611784565b6040518263ffffffff1660e01b815260040161048b9190611955565b600060405180830381600087803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b50505050610652565b60095481516040516342ca962960e01b81526001600160a01b0390921691638f4b3f599183916342ca9629916104fa916004016118b2565b60206040518083038186803b15801561051257600080fd5b505afa158015610526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054a9190611784565b6040518263ffffffff1660e01b81526004016105669190611955565b60206040518083038186803b15801561057e57600080fd5b505afa158015610592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b6919061160b565b6105d25760405162461bcd60e51b81526004016100ab90611afa565b6009546020808301518351604080860151938401518451948201519151630ed552f560e21b81526001600160a01b03909616958695633b554bd49561061e95909490939260040161197d565b600060405180830381600087803b15801561063857600080fd5b505af115801561064c573d6000803e3d6000fd5b50505050505b61068f565b7f306479af91d8f74801639ceeee450e67ce1ce1dc4d904eaa6a900053c490ab49846040516106869190611955565b60405180910390a15b505b505050565b60095460405163388620d360e01b81526000916001600160a01b03169063388620d3906106c7908990600401611955565b60006040518083038186803b1580156106df57600080fd5b505afa1580156106f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071b9190810190611717565b51116107395760405162461bcd60e51b81526004016100ab90611aa4565b610741611180565b6007546107569030630d6ab1cb60e11b610aee565b60408051808201825260068152657075624b657960d01b6020820152600954915163388620d360e01b815292935061080a9290916001600160a01b03169063388620d3906107a8908b90600401611955565b60006040518083038186803b1580156107c057600080fd5b505afa1580156107d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107fc9190810190611717565b83919063ffffffff610b1916565b610875604051806040016040528060098152602001687369676e617475726560b81b81525089898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086949392505063ffffffff610b19169050565b6108dd6040518060400160405280600b81526020016a19d95d139bdb98d9555c9b60aa1b8152506108a588610b43565b6108ae88610b43565b6040516020016108bf92919061182a565b60408051601f1981840301815291905283919063ffffffff610b1916565b61090d6040518060400160405280600b81526020016a19195b139bdb98d9555c9b60aa1b8152506108a588610b43565b6009546040516331a9108f60e11b81526000916001600160a01b031690636352211e9061093e908a90600401611955565b60206040518083038186803b15801561095657600080fd5b505afa15801561096a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098e91906115bb565b6006546008549192506000916109af916001600160a01b0316908590610c20565b90506040518060600160405280836001600160a01b031681526020018860058111156109d757fe5b60058111156109e257fe5b81526040805160608101825289815260208082018a9052818301899052928301526000848152600a835220825181546001600160a01b0319166001600160a01b0390911617808255918301519091829060ff60a01b1916600160a01b836005811115610a4a57fe5b02179055506040820151805180516001840191610a6c918391602001906111b0565b506020828101518051610a85926001850192019061120d565b5060408201518051610aa1916002840191602090910190611254565b5050509050507f333949fca308f4036f410b4043d12561c861b3b69bc64792706725b52bd7d49881838a604051610ada9392919061195e565b60405180910390a150505050505050505050565b610af6611180565b610afe611180565b610b108186868663ffffffff610d5f16565b95945050505050565b6080830151610b2e908363ffffffff610d9c16565b6080830151610691908263ffffffff610d9c16565b606081610b6857506040805180820190915260018152600360fc1b6020820152610c1b565b8160005b8115610b8057600101600a82049150610b6c565b60608167ffffffffffffffff81118015610b9957600080fd5b506040519080825280601f01601f191660200182016040528015610bc4576020820181803683370190505b50859350905060001982015b8315610c1557600a840660300160f81b82828060019003935081518110610bf357fe5b60200101906001600160f81b031916908160001a905350600a84049350610bd0565b50925050505b919050565b600030600454604051602001610c37929190611808565b60408051808303601f19018152918152815160209283012060045460608701526000818152600590935281832080546001600160a01b0319166001600160a01b038916179055905190925082917fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af991a26002546001600160a01b0316634000aea08584610cc387610db9565b6040518463ffffffff1660e01b8152600401610ce19392919061192e565b602060405180830381600087803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d33919061160b565b610d4f5760405162461bcd60e51b81526004016100ab90611b3e565b6004805460010190559392505050565b610d67611180565b610d778560800151610100610e35565b50509183526001600160a01b031660208301526001600160e01b031916604082015290565b610da98260038351610e75565b610691828263ffffffff610f7f16565b6060634042994660e01b60008084600001518560200151866040015187606001516001896080015160000151604051602401610dfc9897969594939291906118c6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050919050565b610e3d6112b5565b6020820615610e525760208206602003820191505b506020808301829052604080518085526000815283019091019052815b92915050565b60178111610e9c57610e968360e0600585901b16831763ffffffff610fa016565b50610691565b60ff8111610ed257610ebf836018611fe0600586901b161763ffffffff610fa016565b50610e968382600163ffffffff610fb816565b61ffff8111610f0957610ef6836019611fe0600586901b161763ffffffff610fa016565b50610e968382600263ffffffff610fb816565b63ffffffff8111610f4257610f2f83601a611fe0600586901b161763ffffffff610fa016565b50610e968382600463ffffffff610fb816565b67ffffffffffffffff811161069157610f6c83601b611fe0600586901b161763ffffffff610fa016565b5061068f8382600863ffffffff610fb816565b610f876112b5565b610f9983846000015151848551610fd9565b9392505050565b610fa86112b5565b610f998384600001515184611085565b610fc06112b5565b610fd18485600001515185856110d0565b949350505050565b610fe16112b5565b8251821115610fef57600080fd5b846020015182850111156110195761101985611011876020015187860161112e565b600202611145565b6000808651805187602083010193508088870111156110385787860182525b505050602084015b6020841061105f5780518252601f199093019260209182019101611040565b51815160001960208690036101000a019081169019919091161790525083949350505050565b61108d6112b5565b836020015183106110a9576110a9848560200151600202611145565b8351805160208583010184815350808514156110c6576001810182525b5093949350505050565b6110d86112b5565b846020015184830111156110f5576110f585858401600202611145565b60006001836101000a0390508551838682010185831982511617815250805184870111156111235783860181525b509495945050505050565b60008183111561113f575081610e6f565b50919050565b81516111518383610e35565b5061068f8382610f7f565b604080516060810182526000808252602082015290810161117b6112cf565b905290565b6040805160a08101825260008082526020820181905291810182905260608101919091526080810161117b6112b5565b8280548282559060005260206000209081019282156111fd579160200282015b828111156111fd57825180516111ed9184916020909101906112f0565b50916020019190600101906111d0565b5061120992915061135d565b5090565b828054828255906000526020600020908101928215611248579160200282015b8281111561124857825182559160200191906001019061122d565b50611209929150611383565b8280548282559060005260206000209081019282156112a9579160200282015b828111156112a957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611274565b5061120992915061139d565b604051806040016040528060608152602001600081525090565b60405180606001604052806060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061133157805160ff1916838001178555611248565b82800160010185558215611248579182018281111561124857825182559160200191906001019061122d565b61138091905b8082111561120957600061137782826113c1565b50600101611363565b90565b61138091905b808211156112095760008155600101611389565b61138091905b808211156112095780546001600160a01b03191681556001016113a3565b50805460018160011615610100020316600290046000825580601f106113e75750611405565b601f0160209004906000526020600020908101906114059190611383565b50565b600082601f830112611418578081fd5b813561142b61142682611bf0565b611bc9565b81815291506020808301908481018184028601820187101561144c57600080fd5b60005b8481101561147457813561146281611c6b565b8452928201929082019060010161144f565b505050505092915050565b600082601f83011261148f578081fd5b813561149d61142682611bf0565b818152915060208083019084810160005b84811015611474578135870188603f8201126114c957600080fd5b838101356114d961142682611c10565b81815260408b818486010111156114ef57600080fd5b828185018884013750600091810186019190915285525092820192908201906001016114ae565b600082601f830112611526578081fd5b813561153461142682611bf0565b81815291506020808301908481018184028601820187101561155557600080fd5b60005b8481101561147457813584529282019290820190600101611558565b60008083601f840112611585578182fd5b50813567ffffffffffffffff81111561159c578182fd5b6020830191508360208285010111156115b457600080fd5b9250929050565b6000602082840312156115cc578081fd5b8151610f9981611c6b565b6000806000606084860312156115eb578182fd5b83356115f681611c6b565b95602085013595506040909401359392505050565b60006020828403121561161c578081fd5b8151610f9981611c80565b60008060408385031215611639578182fd5b82359150602083013561164b81611c80565b809150509250929050565b600080600080600080600060c0888a031215611670578283fd5b873567ffffffffffffffff80821115611687578485fd5b6116938b838c01611574565b909950975060208a0135965060408a0135955060608a01359150808211156116b9578485fd5b6116c58b838c0161147f565b945060808a01359150808211156116da578384fd5b6116e68b838c01611516565b935060a08a01359150808211156116fb578283fd5b506117088a828b01611408565b91505092959891949750929550565b600060208284031215611728578081fd5b815167ffffffffffffffff81111561173e578182fd5b80830184601f82011261174f578283fd5b8051915061175f61142683611c10565b828152856020848401011115611773578384fd5b610b10836020830160208501611c3f565b600060208284031215611795578081fd5b5051919050565b815260200190565b6000815180845260208085019450808401835b838110156111235781516001600160a01b0316875295820195908201906001016117b7565b600081518084526117f4816020860160208601611c3f565b601f01601f19169290920160200192915050565b60609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60007f68747470733a2f2f6170692e736b696c6c77616c6c65742e69642f6170692f7382526a6b696c6c77616c6c65742f60a81b6020830152835161187681602b850160208801611c3f565b8083016e2f6e6f6e6365733f616374696f6e3d60881b602b820152845191506118a682603a830160208801611c3f565b01603a01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0389811682526020820189905260408201889052861660608201526001600160e01b03198516608082015260a0810184905260c0810183905261010060e0820181905260009061191f838201856117dc565b9b9a5050505050505050505050565b600060018060a01b038516825283602083015260606040830152610b1060608301846117dc565b90815260200190565b9283526001600160a01b03919091166020830152604082015260600190565b600060a0820161198c88611c34565b8352602060018060a01b0388168185015260a060408501528187516119b18185611955565b91508289019350845b818110156119db576119cd83865161179c565b9484019492506001016119ba565b5050848103606086015280925086516119f48183611955565b93508391508281028401838901865b83811015611a2d578483038752611a1b8383516117dc565b96860196925090850190600101611a03565b50508681036080880152611a4181896117a4565b9c9b505050505050505050505050565b60208082526033908201527f4f6e6c7920536b696c6c57616c6c657420636f6e74726163742063616e2073656040820152727420636861696e6c696e6b2064657461696c7360681b606082015260800190565b60208082526036908201527f5075624b65792073686f756c642062652061737369676e656420746f2074686560408201527520736b696c6c2077616c6c657449442066697273742160501b606082015260800190565b60208082526024908201527f536b696c6c57616c6c6574206d757374206265206163746976617465642066696040820152637273742160e01b606082015260800190565b60208082526023908201527f756e61626c6520746f207472616e73666572416e6443616c6c20746f206f7261604082015262636c6560e81b606082015260800190565b60208082526028908201527f536f75726365206d75737420626520746865206f7261636c65206f6620746865604082015267081c995c5d595cdd60c21b606082015260800190565b60405181810167ffffffffffffffff81118282101715611be857600080fd5b604052919050565b600067ffffffffffffffff821115611c06578081fd5b5060209081020190565b600067ffffffffffffffff821115611c26578081fd5b50601f01601f191660200190565b8060068110610c1b57fe5b60005b83811015611c5a578181015183820152602001611c42565b8381111561068f5750506000910152565b6001600160a01b038116811461140557600080fd5b801515811461140557600080fdfea26469706673582212208f96b54cad209f530aaa7813a8175dc3a697d690e21d40762a5ae1b88e054a6764736f6c634300060a00334552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea264697066735822122064c13324aa53d09cdb7b759347612eed16d406fba43a82a34234cf573a42668564736f6c634300060a0033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620002bc5760003560e01c8063588bf7a9116200017d5780638da5cb5b11620000e1578063b88d4fde1162000093578063b88d4fde1462000641578063c71ae3021462000658578063c87b56dd1462000662578063e985e9c51462000679578063ec660fd91462000690578063f2fde38b14620006a757620002bc565b80638da5cb5b14620005d15780638ec4ad9e14620005db5780638f4b3f5914620005f257806395d89b411462000609578063a1a366f31462000613578063a22cb465146200062a57620002bc565b80636eba3dce116200013b5780636eba3dce14620005545780636f7e85eb146200056b57806370a082311462000582578063715018a61462000599578063739c1cba14620005a357806388f683f614620005ba57620002bc565b8063588bf7a914620004ee578063617fc19d14620005055780636352211e146200051c57806365cbb7aa14620005335780636c0360eb146200054a57620002bc565b80632c18ee73116200022557806342842e0e11620001e357806342842e0e146200047157806342ca9629146200048857806344276733146200049f578063485cc95514620004b65780634e71d92d14620004cd5780634f6ccce714620004d757620002bc565b80632c18ee7314620003e05780632f745c5914620003f7578063388620d3146200040e578063407ca1c7146200042557806341df66d4146200044b57620002bc565b80630fddba5f116200027f5780630fddba5f146200035f578063150b7a02146200037657806318160ddd146200039c5780631b6989b514620003b557806323b872dd14620003bf5780632b32da9014620003d657620002bc565b806301ffc9a714620002c157806305eb4ec214620002f057806306fdde031462000309578063081812fc1462000322578063095ea7b31462000348575b600080fd5b620002d8620002d236600462002fcb565b620006be565b604051620002e79190620031f6565b60405180910390f35b620003076200030136600462003009565b620006e1565b005b62000313620007c0565b604051620002e791906200322b565b620003396200033336600462002fb2565b6200085b565b604051620002e7919062003119565b620003076200035936600462002f85565b620008a3565b620003076200037036600462002ecc565b6200094b565b6200038d6200038736600462002da6565b62000a00565b604051620002e7919062003201565b620003a662000a11565b604051620002e7919062003d3f565b6200033962000a24565b62000307620003d036600462002d61565b62000a33565b6200033962000a74565b62000307620003f136600462002f03565b62000a83565b620003a66200040836600462002f85565b62000c12565b620003136200041f36600462002fb2565b62000c45565b6200043c6200043636600462002fb2565b62000cea565b604051620002e79190620031a7565b620004626200045c36600462002fb2565b62000db2565b604051620002e7919062003216565b620003076200048236600462002d61565b62000dc7565b620003a66200049936600462002d0a565b62000de4565b62000462620004b036600462002d0a565b62000e2f565b62000307620004c736600462002d28565b62000e8a565b6200030762000fd5565b620003a6620004e836600462002fb2565b62001098565b62000307620004ff3660046200304d565b620010b6565b620003076200051636600462002fb2565b62001256565b620003396200052d36600462002fb2565b6200135c565b620003396200054436600462002fb2565b6200138d565b620003136200140f565b620003136200056536600462002fb2565b62001473565b620002d86200057c36600462002fb2565b62001512565b620003a66200059336600462002d0a565b62001527565b6200030762001575565b620002d8620005b436600462002d0a565b62001605565b620002d8620005cb36600462002d0a565b62001644565b620003396200168d565b620003a6620005ec36600462002d0a565b6200169c565b620002d86200060336600462002fb2565b620016f0565b620003136200176c565b620003136200062436600462002fb2565b620017d0565b620003076200063b36600462002e8d565b6200183b565b620003076200065236600462002e1d565b62001914565b620003a66200195c565b620003136200067336600462002fb2565b6200196a565b620002d86200068a36600462002d28565b62001ac5565b620003a6620006a136600462002d0a565b62001af3565b62000307620006b836600462002d0a565b62001b05565b6001600160e01b0319811660009081526033602052604090205460ff165b919050565b33600090815260cc602090815260408083205480845260c9909252909120546001600160a01b0316620007315760405162461bcd60e51b815260040162000728906200350b565b60405180910390fd5b600081815260cd602052604090205460ff16620007625760405162461bcd60e51b8152600401620007289062003788565b600081815260cf602052604090206200077d90848462002b0a565b507f6446b2d7ea6c1205b2b18097bd5eb8014ddc1a8c403ec673bce2d31432d2406b818484604051620007b39392919062003d5f565b60405180910390a1505050565b606a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620008505780601f10620008245761010080835404028352916020019162000850565b820191906000526020600020905b8154815290600101906020018083116200083257829003601f168201915b505050505090505b90565b6000620008688262001bd0565b620008875760405162461bcd60e51b815260040162000728906200397c565b506000908152606860205260409020546001600160a01b031690565b6000620008b0826200135c565b9050806001600160a01b0316836001600160a01b03161415620008e75760405162461bcd60e51b8152600401620007289062003ae1565b806001600160a01b0316620008fb62001be5565b6001600160a01b031614806200091b57506200091b816200068a62001be5565b6200093a5760405162461bcd60e51b815260040162000728906200372b565b62000946838362001be9565b505050565b6200095562001be5565b6001600160a01b0316620009686200168d565b6001600160a01b031614620009915760405162461bcd60e51b8152600401620007289062003a14565b60d254604051630fddba5f60e01b81526001600160a01b0390911690630fddba5f90620009c79086908690869060040162003186565b600060405180830381600087803b158015620009e257600080fd5b505af1158015620009f7573d6000803e3d6000fd5b50505050505050565b630a85bd0160e11b95945050505050565b600062000a1f606662001c59565b905090565b60d2546001600160a01b031690565b62000a4862000a4162001be5565b8262001c66565b62000a675760405162461bcd60e51b8152600401620007289062003bba565b6200094683838362001cf8565b60d2546001600160a01b031681565b62000a8e8462001527565b1562000aae5760405162461bcd60e51b8152600401620007289062003240565b6001600160a01b038416600090815260d060205260409020541562000ae75760405162461bcd60e51b81526004016200072890620034ad565b600062000af560d162001d30565b9050811562000b2b5762000b0a308262001d34565b6001600160a01b038516600090815260d06020526040902081905562000b37565b62000b37858262001d34565b62000b43818562001d54565b600081815260c9602090815260408083208054336001600160a01b0319918216811790925560cb845282852080546001818101835591875285872001805490921690921790556001600160a01b038916845260cc835281842085905584845260ca9092529091208054859260ff199091169083600681111562000bc257fe5b021790555062000bd360d162001d9f565b604051819033906001600160a01b038816907f66ac2c421746d22be0909c7dcc105fafb6df697e7bd8b5489e5df0fca2bb0b8c90600090a45050505050565b6001600160a01b038216600090815260656020526040812062000c3c908363ffffffff62001da816565b90505b92915050565b600081815260ce602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801562000cde5780601f1062000cb25761010080835404028352916020019162000cde565b820191906000526020600020905b81548152906001019060200180831162000cc057829003601f168201915b50505050509050919050565b606062000cf860d162001d30565b821062000d195760405162461bcd60e51b815260040162000728906200381d565b600082815260cb602052604090205462000d475760405162461bcd60e51b8152600401620007289062003c8c565b600082815260cb60209081526040918290208054835181840281018401909452808452909183018282801562000cde57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000d885750505050509050919050565b60ca6020526000908152604090205460ff1681565b620009468383836040518060200160405280600081525062001914565b600062000df18262001527565b60011462000e135760405162461bcd60e51b815260040162000728906200357b565b506001600160a01b0316600090815260cc602052604090205490565b600062000e3c8262001527565b60011462000e5e5760405162461bcd60e51b815260040162000728906200357b565b506001600160a01b0316600090815260cc6020908152604080832054835260ca90915290205460ff1690565b600054610100900460ff168062000ea6575062000ea662001db6565b8062000eb5575060005460ff16155b62000ed45760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562000f00576000805460ff1961ff0019909116610100171660011790555b62000f0a62001dc9565b62000f576040518060400160405280600d81526020016c14dada5b1b15d85b1b195d1251609a1b8152506040518060400160405280600481526020016314d5d25160e21b81525062001e69565b62000f6360d162001d9f565b828260405162000f739062002b8f565b62000f809291906200316c565b604051809103906000f08015801562000f9d573d6000803e3d6000fd5b5060d280546001600160a01b0319166001600160a01b0392909216919091179055801562000946576000805461ff0019169055505050565b62000fe03362001527565b15620010005760405162461bcd60e51b8152600401620007289062003240565b33600090815260d060205260409020546200102f5760405162461bcd60e51b8152600401620007289062003386565b33600081815260d060205260409020546200104c91309162001cf8565b33600081815260d06020526040908190205490517f9bfc3cadf48744b6422b7ce9665cb9c6677f11494a78d74faab3abebe3c6afa2926200108e929162003d48565b60405180910390a1565b600080620010ae60668463ffffffff62001f1616565b509392505050565b620010c062001be5565b6001600160a01b0316620010d36200168d565b6001600160a01b031614620010fc5760405162461bcd60e51b8152600401620007289062003a14565b6200110860d162001d30565b8310620011295760405162461bcd60e51b815260040162000728906200381d565b600083815260c960205260409020546001600160a01b0316620011605760405162461bcd60e51b815260040162000728906200350b565b600083815260cd602052604090205460ff1615620011925760405162461bcd60e51b8152600401620007289062003b6f565b600083815260ce60205260409020546002600019610100600184161502019091160415620011d45760405162461bcd60e51b8152600401620007289062003ce9565b30620011e0846200135c565b6001600160a01b031614156200120a5760405162461bcd60e51b81526004016200072890620038b3565b600083815260ce602052604090206200122590838362002b0a565b5060405183907f46720ddbef9dfaafeff045ae333e447ae69c7560cb5982ce5f6c1c55471db14190600090a2505050565b60d2546001600160a01b03163314620012835760405162461bcd60e51b81526004016200072890620036d6565b6200128f60d162001d30565b8110620012b05760405162461bcd60e51b815260040162000728906200381d565b600081815260c960205260409020546001600160a01b0316620012e75760405162461bcd60e51b815260040162000728906200350b565b600081815260cd602052604090205460ff1615620013195760405162461bcd60e51b8152600401620007289062003b6f565b600081815260cd6020526040808220805460ff191660011790555182917f3b9fa7eba99fc1e57dd4fc92ee03c32e0766a7c33c9f6222a3e3d72788fe4ff691a250565b600062000c3f8260405180606001604052806029815260200162005c1d602991396066919063ffffffff62001f3616565b60006200139b60d162001d30565b8210620013bc5760405162461bcd60e51b815260040162000728906200381d565b600082815260c960205260409020546001600160a01b0316620013f35760405162461bcd60e51b815260040162000728906200350b565b50600090815260c960205260409020546001600160a01b031690565b606d8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620008505780601f10620008245761010080835404028352916020019162000850565b60cf6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156200150a5780601f10620014de576101008083540402835291602001916200150a565b820191906000526020600020905b815481529060010190602001808311620014ec57829003601f168201915b505050505081565b600090815260d4602052604090205460ff1690565b60006001600160a01b038216620015525760405162461bcd60e51b81526004016200072890620037d3565b6001600160a01b038216600090815260656020526040902062000c3f9062001c59565b6200157f62001be5565b6001600160a01b0316620015926200168d565b6001600160a01b031614620015bb5760405162461bcd60e51b8152600401620007289062003a14565b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60006001600160a01b038216620016305760405162461bcd60e51b8152600401620007289062003b22565b6200163b8262001527565b60011492915050565b60006001600160a01b0382166200166f5760405162461bcd60e51b8152600401620007289062003b22565b506001600160a01b0316600090815260d06020526040902054151590565b6097546001600160a01b031690565b6001600160a01b038116600090815260d06020526040812054620016d45760405162461bcd60e51b815260040162000728906200345d565b506001600160a01b0316600090815260d0602052604090205490565b6000620016fe60d162001d30565b82106200171f5760405162461bcd60e51b815260040162000728906200381d565b600082815260c960205260409020546001600160a01b0316620017565760405162461bcd60e51b815260040162000728906200350b565b50600090815260cd602052604090205460ff1690565b606b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620008505780601f10620008245761010080835404028352916020019162000850565b60ce6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156200150a5780601f10620014de576101008083540402835291602001916200150a565b6200184562001be5565b6001600160a01b0316826001600160a01b03161415620018795760405162461bcd60e51b815260040162000728906200360d565b80606960006200188862001be5565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155620018ce62001be5565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051620019089190620031f6565b60405180910390a35050565b620019296200192262001be5565b8362001c66565b620019485760405162461bcd60e51b8152600401620007289062003bba565b620019568484848462001f4f565b50505050565b600062000a1f60d162001d30565b6060620019778262001bd0565b620019965760405162461bcd60e51b8152600401620007289062003a92565b6000828152606c602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801562001a2f5780601f1062001a035761010080835404028352916020019162001a2f565b820191906000526020600020905b81548152906001019060200180831162001a1157829003601f168201915b50505050509050606062001a426200140f565b905080516000141562001a5857509050620006dc565b81511562001a8e57808260405160200162001a75929190620030e7565b60405160208183030381529060405292505050620006dc565b8062001a9a8562001f89565b60405160200162001aad929190620030e7565b60405160208183030381529060405292505050919050565b6001600160a01b03918216600090815260696020908152604080832093909416825291909152205460ff1690565b60d06020526000908152604090205481565b62001b0f62001be5565b6001600160a01b031662001b226200168d565b6001600160a01b03161462001b4b5760405162461bcd60e51b8152600401620007289062003a14565b6001600160a01b03811662001b745760405162461bcd60e51b8152600401620007289062003340565b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b600062000c3f60668363ffffffff6200206d16565b3390565b600081815260686020526040902080546001600160a01b0319166001600160a01b038416908117909155819062001c20826200135c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600062000c3f8262001d30565b600062001c738262001bd0565b62001c925760405162461bcd60e51b815260040162000728906200368a565b600062001c9f836200135c565b9050806001600160a01b0316846001600160a01b0316148062001cdd5750836001600160a01b031662001cd2846200085b565b6001600160a01b0316145b8062001cf0575062001cf0818562001ac5565b949350505050565b6001600160a01b038316301462001d235760405162461bcd60e51b8152600401620007289062003c42565b620009468383836200207b565b5490565b62001d50828260405180602001604052806000815250620021ad565b5050565b62001d5f8262001bd0565b62001d7e5760405162461bcd60e51b81526004016200072890620039c8565b6000828152606c602090815260409091208251620009469284019062002b9d565b80546001019055565b600062000c3c8383620021e7565b600062001dc33062002230565b15905090565b600054610100900460ff168062001de5575062001de562001db6565b8062001df4575060005460ff16155b62001e135760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562001e3f576000805460ff1961ff0019909116610100171660011790555b62001e4962002236565b62001e53620022c0565b801562001e66576000805461ff00191690555b50565b600054610100900460ff168062001e85575062001e8562001db6565b8062001e94575060005460ff16155b62001eb35760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562001edf576000805460ff1961ff0019909116610100171660011790555b62001ee962002236565b62001ef3620023a5565b62001eff83836200242d565b801562000946576000805461ff0019169055505050565b600080808062001f27868662002505565b909450925050505b9250929050565b600062001f4584848462002565565b90505b9392505050565b62001f5c84848462001cf8565b62001f6a84848484620025c8565b620019565760405162461bcd60e51b81526004016200072890620032ee565b60608162001fb057506040805180820190915260018152600360fc1b6020820152620006dc565b8160005b811562001fca57600101600a8204915062001fb4565b60608167ffffffffffffffff8111801562001fe457600080fd5b506040519080825280601f01601f19166020018201604052801562002010576020820181803683370190505b50859350905060001982015b83156200206457600a840660300160f81b828280600190039350815181106200204157fe5b60200101906001600160f81b031916908160001a905350600a840493506200201c565b50949350505050565b600062000c3c8383620026ba565b826001600160a01b031662002090826200135c565b6001600160a01b031614620020b95760405162461bcd60e51b8152600401620007289062003a49565b6001600160a01b038216620020e25760405162461bcd60e51b81526004016200072890620035c9565b620020ef83838362000946565b620020fc60008262001be9565b6001600160a01b038316600090815260656020526040902062002126908263ffffffff620026d216565b506001600160a01b038216600090815260656020526040902062002151908263ffffffff620026e016565b50620021666066828463ffffffff620026ee16565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b620021b9838362002706565b620021c86000848484620025c8565b620009465760405162461bcd60e51b81526004016200072890620032ee565b815460009082106200220d5760405162461bcd60e51b81526004016200072890620032ac565b8260000182815481106200221d57fe5b9060005260206000200154905092915050565b3b151590565b600054610100900460ff16806200225257506200225262001db6565b8062002261575060005460ff16155b620022805760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562001e53576000805460ff1961ff001990911661010017166001179055801562001e66576000805461ff001916905550565b600054610100900460ff1680620022dc5750620022dc62001db6565b80620022eb575060005460ff16155b6200230a5760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff1615801562002336576000805460ff1961ff0019909116610100171660011790555b60006200234262001be5565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801562001e66576000805461ff001916905550565b600054610100900460ff1680620023c15750620023c162001db6565b80620023d0575060005460ff16155b620023ef5760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff161580156200241b576000805460ff1961ff0019909116610100171660011790555b62001e536301ffc9a760e01b620027e4565b600054610100900460ff16806200244957506200244962001db6565b8062002458575060005460ff16155b620024775760405162461bcd60e51b8152600401620007289062003865565b600054610100900460ff16158015620024a3576000805460ff1961ff0019909116610100171660011790555b8251620024b890606a90602086019062002b9d565b508151620024ce90606b90602085019062002b9d565b50620024e16380ac58cd60e01b620027e4565b620024f3635b5e139f60e01b620027e4565b62001eff63780e9d6360e01b620027e4565b8154600090819083106200252d5760405162461bcd60e51b8152600401620007289062003905565b60008460000184815481106200253f57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281620025985760405162461bcd60e51b81526004016200072891906200322b565b50846000016001820381548110620025ac57fe5b9060005260206000209060020201600101549150509392505050565b6000620025de846001600160a01b031662002230565b620025ec5750600162001cf0565b606062002681630a85bd0160e11b6200260462001be5565b8887876040516024016200261c94939291906200312d565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505060405180606001604052806032815260200162005beb603291396001600160a01b038816919063ffffffff6200283616565b90506000818060200190518101906200269b919062002fea565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b60009081526001919091016020526040902054151590565b600062000c3c838362002847565b600062000c3c838362002913565b600062001f4584846001600160a01b03851662002962565b6001600160a01b0382166200272f5760405162461bcd60e51b8152600401620007289062003947565b6200273a8162001bd0565b156200275a5760405162461bcd60e51b8152600401620007289062003426565b620027686000838362000946565b6001600160a01b038216600090815260656020526040902062002792908263ffffffff620026e016565b50620027a76066828463ffffffff620026ee16565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198082161415620028115760405162461bcd60e51b81526004016200072890620033ef565b6001600160e01b0319166000908152603360205260409020805460ff19166001179055565b606062001f458484600085620029fd565b600081815260018301602052604081205480156200290857835460001980830191908101906000908790839081106200287c57fe5b90600052602060002001549050808760000184815481106200289a57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080620028cb57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505062000c3f565b600091505062000c3f565b6000620029218383620026ba565b620029595750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000c3f565b50600062000c3f565b600082815260018401602052604081205480620029c957505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205562001f48565b82856000016001830381548110620029dd57fe5b906000526020600020906002020160010181905550600091505062001f48565b60608247101562002a225760405162461bcd60e51b8152600401620007289062003644565b62002a2d8562002230565b62002a4c5760405162461bcd60e51b8152600401620007289062003c0b565b60006060866001600160a01b0316858760405162002a6b9190620030c9565b60006040518083038185875af1925050503d806000811462002aaa576040519150601f19603f3d011682016040523d82523d6000602084013e62002aaf565b606091505b509150915062002ac182828662002acc565b979650505050505050565b6060831562002add57508162001f48565b82511562002aee5782518084602001fd5b8160405162461bcd60e51b81526004016200072891906200322b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062002b4d5782800160ff1982351617855562002b7d565b8280016001018555821562002b7d579182015b8281111562002b7d57823582559160200191906001019062002b60565b5062002b8b92915062002c10565b5090565b611df98062003df283390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062002be057805160ff191683800117855562002b7d565b8280016001018555821562002b7d579182015b8281111562002b7d57825182559160200191906001019062002bf3565b6200085891905b8082111562002b8b576000815560010162002c17565b80356001600160a01b038116811462000c3f57600080fd5b60008083601f84011262002c57578182fd5b50813567ffffffffffffffff81111562002c6f578182fd5b60208301915083602082850101111562001f2f57600080fd5b600082601f83011262002c99578081fd5b813567ffffffffffffffff8082111562002cb1578283fd5b604051601f8301601f19168101602001828111828210171562002cd2578485fd5b60405282815292508284830160200186101562002cee57600080fd5b8260208601602083013760006020848301015250505092915050565b60006020828403121562002d1c578081fd5b62000c3c838362002c2d565b6000806040838503121562002d3b578081fd5b62002d47848462002c2d565b915062002d58846020850162002c2d565b90509250929050565b60008060006060848603121562002d76578081fd5b833562002d838162003dc4565b9250602084013562002d958162003dc4565b929592945050506040919091013590565b60008060008060006080868803121562002dbe578081fd5b62002dca878762002c2d565b945062002ddb876020880162002c2d565b935060408601359250606086013567ffffffffffffffff81111562002dfe578182fd5b62002e0c8882890162002c45565b969995985093965092949392505050565b6000806000806080858703121562002e33578384fd5b62002e3f868662002c2d565b935062002e50866020870162002c2d565b925060408501359150606085013567ffffffffffffffff81111562002e73578182fd5b62002e818782880162002c88565b91505092959194509250565b6000806040838503121562002ea0578182fd5b62002eac848462002c2d565b91506020830135801515811462002ec1578182fd5b809150509250929050565b60008060006060848603121562002ee1578283fd5b833562002eee8162003dc4565b95602085013595506040909401359392505050565b6000806000806080858703121562002f19578384fd5b843562002f268162003dc4565b9350602085013567ffffffffffffffff81111562002f42578384fd5b62002f508782880162002c88565b93505060408501356007811062002f65578283fd5b91506060850135801515811462002f7a578182fd5b939692955090935050565b6000806040838503121562002f98578182fd5b62002fa4848462002c2d565b946020939093013593505050565b60006020828403121562002fc4578081fd5b5035919050565b60006020828403121562002fdd578081fd5b813562001f488162003dda565b60006020828403121562002ffc578081fd5b815162001f488162003dda565b600080602083850312156200301c578182fd5b823567ffffffffffffffff81111562003033578283fd5b620030418582860162002c45565b90969095509350505050565b60008060006040848603121562003062578081fd5b83359250602084013567ffffffffffffffff81111562003080578182fd5b6200308e8682870162002c45565b9497909650939450505050565b60008151808452620030b581602086016020860162003d95565b601f01601f19169290920160200192915050565b60008251620030dd81846020870162003d95565b9190910192915050565b60008351620030fb81846020880162003d95565b83519083016200311082826020880162003d95565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009062003162908301846200309b565b9695505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6020808252825182820181905260009190848201906040850190845b81811015620031ea5783516001600160a01b031683529284019291840191600101620031c3565b50909695505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60208101600783106200322557fe5b91905290565b60006020825262000c3c60208301846200309b565b60208082526046908201527f536b696c6c57616c6c65743a20546865726520697320536b696c6c57616c6c6560408201527f7420616c7265616479207265676973746572656420666f722074686973206164606082015265323932b9b99760d11b608082015260a00190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526043908201527f536b696c6c57616c6c65743a205468657265206973206e6f20536b696c6c576160408201527f6c6c657420746f20626520636c61696d6564206279207468697320616464726560608201526239b99760e91b608082015260a00190565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526030908201527f536b696c6c57616c6c65743a2054686520536b696c6c57616c6c657420636c6160408201526f34b6b2b91034b99034b73b30b634b21760811b606082015260800190565b602080825260409082018190527f536b696c6c57616c6c65743a20546865726520697320536b696c6c57616c6c65908201527f7420746f20626520636c61696d6564206279207468697320616464726573732e606082015260800190565b6020808252604a908201527f536b696c6c57616c6c65743a2054686520536b696c6c57616c6c65742069732060408201527f6e6f7420696e20616e7920636f6d6d756e6974792c20696e76616c696420536b60608201526934b6362bb0b63632ba1760b11b608082015260a00190565b6020808252602e908201527f536b696c6c57616c6c65743a2054686520536b696c6c57616c6c6574206f776e60408201526d32b91034b99034b73b30b634b21760911b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526035908201527f546869732066756e6374696f6e2063616e2062652063616c6c6564206f6e6c7960408201527420627920746865204f534d20636f6e74726163742160581b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602b908201527f536b696c6c57616c6c65743a20536b696c6c2077616c6c6574206e6f7420796560408201526a1d081858dd1a5d985d195960aa1b606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526028908201527f536b696c6c57616c6c65743a20736b696c6c57616c6c65744964206f7574206f60408201526733103930b733b29760c11b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526032908201527f536b696c6c57616c6c65743a20536b696c6c2077616c6c6574206861736e2774604082015271103132b2b71031b630b4b6b2b2103cb2ba1760711b606082015260800190565b60208082526022908201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252602c908201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252602d908201527f536b696c6c57616c6c65743a20496e76616c696420736b696c6c57616c6c657460408201526c4f776e6572206164647265737360981b606082015260800190565b6020808252602b908201527f536b696c6c57616c6c65743a20536b696c6c2077616c6c657420616c7265616460408201526a1e481858dd1a5d985d195960aa1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f536b696c6c57616c6c65743a20536b696c6c57616c6c6574207472616e7366656040820152691c88191a5cd8589b195960b21b606082015260800190565b6020808252603a908201527f536b696c6c57616c6c65743a2054686520536b696c6c57616c6c65742069732060408201527f6e6f742070617274206f6620616e7920636f6d6d756e6974792e000000000000606082015260800190565b60208082526036908201527f536b696c6c57616c6c65743a20536b696c6c2077616c6c657420616c726561646040820152753c903430b990383ab125b2bc9030b9b9b4b3b732b21760511b606082015260800190565b90815260200190565b9182526001600160a01b0316602082015260400190565b60008482526040602083015282604083015282846060840137818301606090810191909152601f909201601f1916010192915050565b60005b8381101562003db257818101518382015260200162003d98565b83811115620019565750506000910152565b6001600160a01b038116811462001e6657600080fd5b6001600160e01b03198116811462001e6657600080fdfe608060405260016004553480156200001657600080fd5b5060405162001df938038062001df98339810160408190526200003991620000ce565b6200004d826001600160e01b03620000ac16565b600680546001600160a01b039092166001600160a01b03199283161790557f393661376465306233633431343062346230346264633264303538653535396360075566b1a2bc2ec5000060085560098054909116331790555062000125565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008060408385031215620000e1578182fd5b8251620000ee816200010c565b602084015190925062000101816200010c565b809150509250929050565b6001600160a01b03811681146200012257600080fd5b50565b611cc480620001356000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630fddba5f146100465780631ad563961461005b5780635f6c93ad1461006e575b600080fd5b6100596100543660046115d7565b610081565b005b610059610069366004611627565b6100dd565b61005961007c366004611656565b610696565b6009546001600160a01b031633146100b45760405162461bcd60e51b81526004016100ab90611a51565b60405180910390fd5b600680546001600160a01b0319166001600160a01b039490941693909317909255600755600855565b60008281526005602052604090205482906001600160a01b031633146101155760405162461bcd60e51b81526004016100ab90611b81565b60008181526005602052604080822080546001600160a01b03191690555182917f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a91a261016061115c565b6000848152600a602090815260409182902082516060810190935280546001600160a01b03811684529091830190600160a01b900460ff1660058111156101a357fe5b60058111156101ae57fe5b81526020016001820160405180606001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156102925760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561027e5780601f106102535761010080835404028352916020019161027e565b820191906000526020600020905b81548152906001019060200180831161026157829003601f168201915b5050505050815260200190600101906101e7565b505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156102e957602002820191906000526020600020905b8154815260200190600101908083116102d5575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561034b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161032d575b5050505050815250508152505090508215610657577f9deb3aa1850ce8b8beb0fc836ebcff5a08e5347d0c2a2ec2f40ab96ff6593eab8460405161038f9190611955565b60405180910390a16000848152600b60205260409020805460ff19166001908117909155816020015160058111156103c357fe5b14156103cf5750610691565b6000816020015160058111156103e157fe5b14156104c25760095481516040516342ca962960e01b81526001600160a01b039092169163617fc19d9183916342ca96299161041f916004016118b2565b60206040518083038186803b15801561043757600080fd5b505afa15801561044b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046f9190611784565b6040518263ffffffff1660e01b815260040161048b9190611955565b600060405180830381600087803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b50505050610652565b60095481516040516342ca962960e01b81526001600160a01b0390921691638f4b3f599183916342ca9629916104fa916004016118b2565b60206040518083038186803b15801561051257600080fd5b505afa158015610526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054a9190611784565b6040518263ffffffff1660e01b81526004016105669190611955565b60206040518083038186803b15801561057e57600080fd5b505afa158015610592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b6919061160b565b6105d25760405162461bcd60e51b81526004016100ab90611afa565b6009546020808301518351604080860151938401518451948201519151630ed552f560e21b81526001600160a01b03909616958695633b554bd49561061e95909490939260040161197d565b600060405180830381600087803b15801561063857600080fd5b505af115801561064c573d6000803e3d6000fd5b50505050505b61068f565b7f306479af91d8f74801639ceeee450e67ce1ce1dc4d904eaa6a900053c490ab49846040516106869190611955565b60405180910390a15b505b505050565b60095460405163388620d360e01b81526000916001600160a01b03169063388620d3906106c7908990600401611955565b60006040518083038186803b1580156106df57600080fd5b505afa1580156106f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071b9190810190611717565b51116107395760405162461bcd60e51b81526004016100ab90611aa4565b610741611180565b6007546107569030630d6ab1cb60e11b610aee565b60408051808201825260068152657075624b657960d01b6020820152600954915163388620d360e01b815292935061080a9290916001600160a01b03169063388620d3906107a8908b90600401611955565b60006040518083038186803b1580156107c057600080fd5b505afa1580156107d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107fc9190810190611717565b83919063ffffffff610b1916565b610875604051806040016040528060098152602001687369676e617475726560b81b81525089898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086949392505063ffffffff610b19169050565b6108dd6040518060400160405280600b81526020016a19d95d139bdb98d9555c9b60aa1b8152506108a588610b43565b6108ae88610b43565b6040516020016108bf92919061182a565b60408051601f1981840301815291905283919063ffffffff610b1916565b61090d6040518060400160405280600b81526020016a19195b139bdb98d9555c9b60aa1b8152506108a588610b43565b6009546040516331a9108f60e11b81526000916001600160a01b031690636352211e9061093e908a90600401611955565b60206040518083038186803b15801561095657600080fd5b505afa15801561096a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098e91906115bb565b6006546008549192506000916109af916001600160a01b0316908590610c20565b90506040518060600160405280836001600160a01b031681526020018860058111156109d757fe5b60058111156109e257fe5b81526040805160608101825289815260208082018a9052818301899052928301526000848152600a835220825181546001600160a01b0319166001600160a01b0390911617808255918301519091829060ff60a01b1916600160a01b836005811115610a4a57fe5b02179055506040820151805180516001840191610a6c918391602001906111b0565b506020828101518051610a85926001850192019061120d565b5060408201518051610aa1916002840191602090910190611254565b5050509050507f333949fca308f4036f410b4043d12561c861b3b69bc64792706725b52bd7d49881838a604051610ada9392919061195e565b60405180910390a150505050505050505050565b610af6611180565b610afe611180565b610b108186868663ffffffff610d5f16565b95945050505050565b6080830151610b2e908363ffffffff610d9c16565b6080830151610691908263ffffffff610d9c16565b606081610b6857506040805180820190915260018152600360fc1b6020820152610c1b565b8160005b8115610b8057600101600a82049150610b6c565b60608167ffffffffffffffff81118015610b9957600080fd5b506040519080825280601f01601f191660200182016040528015610bc4576020820181803683370190505b50859350905060001982015b8315610c1557600a840660300160f81b82828060019003935081518110610bf357fe5b60200101906001600160f81b031916908160001a905350600a84049350610bd0565b50925050505b919050565b600030600454604051602001610c37929190611808565b60408051808303601f19018152918152815160209283012060045460608701526000818152600590935281832080546001600160a01b0319166001600160a01b038916179055905190925082917fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af991a26002546001600160a01b0316634000aea08584610cc387610db9565b6040518463ffffffff1660e01b8152600401610ce19392919061192e565b602060405180830381600087803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d33919061160b565b610d4f5760405162461bcd60e51b81526004016100ab90611b3e565b6004805460010190559392505050565b610d67611180565b610d778560800151610100610e35565b50509183526001600160a01b031660208301526001600160e01b031916604082015290565b610da98260038351610e75565b610691828263ffffffff610f7f16565b6060634042994660e01b60008084600001518560200151866040015187606001516001896080015160000151604051602401610dfc9897969594939291906118c6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050919050565b610e3d6112b5565b6020820615610e525760208206602003820191505b506020808301829052604080518085526000815283019091019052815b92915050565b60178111610e9c57610e968360e0600585901b16831763ffffffff610fa016565b50610691565b60ff8111610ed257610ebf836018611fe0600586901b161763ffffffff610fa016565b50610e968382600163ffffffff610fb816565b61ffff8111610f0957610ef6836019611fe0600586901b161763ffffffff610fa016565b50610e968382600263ffffffff610fb816565b63ffffffff8111610f4257610f2f83601a611fe0600586901b161763ffffffff610fa016565b50610e968382600463ffffffff610fb816565b67ffffffffffffffff811161069157610f6c83601b611fe0600586901b161763ffffffff610fa016565b5061068f8382600863ffffffff610fb816565b610f876112b5565b610f9983846000015151848551610fd9565b9392505050565b610fa86112b5565b610f998384600001515184611085565b610fc06112b5565b610fd18485600001515185856110d0565b949350505050565b610fe16112b5565b8251821115610fef57600080fd5b846020015182850111156110195761101985611011876020015187860161112e565b600202611145565b6000808651805187602083010193508088870111156110385787860182525b505050602084015b6020841061105f5780518252601f199093019260209182019101611040565b51815160001960208690036101000a019081169019919091161790525083949350505050565b61108d6112b5565b836020015183106110a9576110a9848560200151600202611145565b8351805160208583010184815350808514156110c6576001810182525b5093949350505050565b6110d86112b5565b846020015184830111156110f5576110f585858401600202611145565b60006001836101000a0390508551838682010185831982511617815250805184870111156111235783860181525b509495945050505050565b60008183111561113f575081610e6f565b50919050565b81516111518383610e35565b5061068f8382610f7f565b604080516060810182526000808252602082015290810161117b6112cf565b905290565b6040805160a08101825260008082526020820181905291810182905260608101919091526080810161117b6112b5565b8280548282559060005260206000209081019282156111fd579160200282015b828111156111fd57825180516111ed9184916020909101906112f0565b50916020019190600101906111d0565b5061120992915061135d565b5090565b828054828255906000526020600020908101928215611248579160200282015b8281111561124857825182559160200191906001019061122d565b50611209929150611383565b8280548282559060005260206000209081019282156112a9579160200282015b828111156112a957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611274565b5061120992915061139d565b604051806040016040528060608152602001600081525090565b60405180606001604052806060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061133157805160ff1916838001178555611248565b82800160010185558215611248579182018281111561124857825182559160200191906001019061122d565b61138091905b8082111561120957600061137782826113c1565b50600101611363565b90565b61138091905b808211156112095760008155600101611389565b61138091905b808211156112095780546001600160a01b03191681556001016113a3565b50805460018160011615610100020316600290046000825580601f106113e75750611405565b601f0160209004906000526020600020908101906114059190611383565b50565b600082601f830112611418578081fd5b813561142b61142682611bf0565b611bc9565b81815291506020808301908481018184028601820187101561144c57600080fd5b60005b8481101561147457813561146281611c6b565b8452928201929082019060010161144f565b505050505092915050565b600082601f83011261148f578081fd5b813561149d61142682611bf0565b818152915060208083019084810160005b84811015611474578135870188603f8201126114c957600080fd5b838101356114d961142682611c10565b81815260408b818486010111156114ef57600080fd5b828185018884013750600091810186019190915285525092820192908201906001016114ae565b600082601f830112611526578081fd5b813561153461142682611bf0565b81815291506020808301908481018184028601820187101561155557600080fd5b60005b8481101561147457813584529282019290820190600101611558565b60008083601f840112611585578182fd5b50813567ffffffffffffffff81111561159c578182fd5b6020830191508360208285010111156115b457600080fd5b9250929050565b6000602082840312156115cc578081fd5b8151610f9981611c6b565b6000806000606084860312156115eb578182fd5b83356115f681611c6b565b95602085013595506040909401359392505050565b60006020828403121561161c578081fd5b8151610f9981611c80565b60008060408385031215611639578182fd5b82359150602083013561164b81611c80565b809150509250929050565b600080600080600080600060c0888a031215611670578283fd5b873567ffffffffffffffff80821115611687578485fd5b6116938b838c01611574565b909950975060208a0135965060408a0135955060608a01359150808211156116b9578485fd5b6116c58b838c0161147f565b945060808a01359150808211156116da578384fd5b6116e68b838c01611516565b935060a08a01359150808211156116fb578283fd5b506117088a828b01611408565b91505092959891949750929550565b600060208284031215611728578081fd5b815167ffffffffffffffff81111561173e578182fd5b80830184601f82011261174f578283fd5b8051915061175f61142683611c10565b828152856020848401011115611773578384fd5b610b10836020830160208501611c3f565b600060208284031215611795578081fd5b5051919050565b815260200190565b6000815180845260208085019450808401835b838110156111235781516001600160a01b0316875295820195908201906001016117b7565b600081518084526117f4816020860160208601611c3f565b601f01601f19169290920160200192915050565b60609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60007f68747470733a2f2f6170692e736b696c6c77616c6c65742e69642f6170692f7382526a6b696c6c77616c6c65742f60a81b6020830152835161187681602b850160208801611c3f565b8083016e2f6e6f6e6365733f616374696f6e3d60881b602b820152845191506118a682603a830160208801611c3f565b01603a01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0389811682526020820189905260408201889052861660608201526001600160e01b03198516608082015260a0810184905260c0810183905261010060e0820181905260009061191f838201856117dc565b9b9a5050505050505050505050565b600060018060a01b038516825283602083015260606040830152610b1060608301846117dc565b90815260200190565b9283526001600160a01b03919091166020830152604082015260600190565b600060a0820161198c88611c34565b8352602060018060a01b0388168185015260a060408501528187516119b18185611955565b91508289019350845b818110156119db576119cd83865161179c565b9484019492506001016119ba565b5050848103606086015280925086516119f48183611955565b93508391508281028401838901865b83811015611a2d578483038752611a1b8383516117dc565b96860196925090850190600101611a03565b50508681036080880152611a4181896117a4565b9c9b505050505050505050505050565b60208082526033908201527f4f6e6c7920536b696c6c57616c6c657420636f6e74726163742063616e2073656040820152727420636861696e6c696e6b2064657461696c7360681b606082015260800190565b60208082526036908201527f5075624b65792073686f756c642062652061737369676e656420746f2074686560408201527520736b696c6c2077616c6c657449442066697273742160501b606082015260800190565b60208082526024908201527f536b696c6c57616c6c6574206d757374206265206163746976617465642066696040820152637273742160e01b606082015260800190565b60208082526023908201527f756e61626c6520746f207472616e73666572416e6443616c6c20746f206f7261604082015262636c6560e81b606082015260800190565b60208082526028908201527f536f75726365206d75737420626520746865206f7261636c65206f6620746865604082015267081c995c5d595cdd60c21b606082015260800190565b60405181810167ffffffffffffffff81118282101715611be857600080fd5b604052919050565b600067ffffffffffffffff821115611c06578081fd5b5060209081020190565b600067ffffffffffffffff821115611c26578081fd5b50601f01601f191660200190565b8060068110610c1b57fe5b60005b83811015611c5a578181015183820152602001611c42565b8381111561068f5750506000910152565b6001600160a01b038116811461140557600080fd5b801515811461140557600080fdfea26469706673582212208f96b54cad209f530aaa7813a8175dc3a697d690e21d40762a5ae1b88e054a6764736f6c634300060a00334552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea264697066735822122064c13324aa53d09cdb7b759347612eed16d406fba43a82a34234cf573a42668564736f6c634300060a0033", + "linkReferences": {}, + "deployedLinkReferences": {} + } + \ No newline at end of file