[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "internalType": "address", "name": "hold", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "account", "type": "string" } ], "name": "grantPN", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "account", "type": "string" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "grantSN", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "account", "type": "string" } ], "name": "revokePN", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "tokenName", "type": "string" } ], "name": "setTName", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405260405180602001604052805f815250600990816100219190610b8c565b5034801561002d575f80fd5b50604051613798380380613798833981810160405281019061004f9190610dff565b838381600490816100609190610b8c565b5080600590816100709190610b8c565b5081600990816100809190610b8c565b505f734752ba5dbc23f44d87826276bf6fd6b1c372ad2490506101a28173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101099190610e9b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963073833589fcd6edb6e08f4c7c32d4f71b54bda029136040518363ffffffff1660e01b8152600401610157929190610ed5565b6020604051808303815f875af1158015610173573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101979190610e9b565b61024f60201b60201c565b600690816101b09190610b8c565b505050506101e8816101c661054a60201b60201c565b600a6101d29190611064565b846101dd91906110ae565b61055260201b60201c565b6102075f801b6101fc6105d760201b60201c565b6105de60201b60201c565b506102457fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561023a6105d760201b60201c565b6105de60201b60201c565b50505050506111c5565b60605f8273ffffffffffffffffffffffffffffffffffffffff165f1b90505f6040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090505f602a67ffffffffffffffff8111156102c2576102c161095c565b5b6040519080825280601f01601f1916602001820160405280156102f45781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f8151811061032b5761032a6110ef565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061038e5761038d6110ef565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b601481101561053e5782600485600c846103d8919061111c565b602081106103e9576103e86110ef565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff1681518110610428576104276110ef565b5b602001015160f81c60f81b8260028361044191906110ae565b600261044d919061111c565b8151811061045e5761045d6110ef565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535082600f60f81b85600c846104a0919061111c565b602081106104b1576104b06110ef565b5b1a60f81b1660f81c60ff16815181106104cd576104cc6110ef565b5b602001015160f81c60f81b826002836104e691906110ae565b60036104f2919061111c565b81518110610503576105026110ef565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535080806001019150506103be565b50809350505050919050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105c2575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016105b9919061114f565b60405180910390fd5b6105d35f83836106d360201b60201c565b5050565b5f33905090565b5f6105ef83836108ef60201b60201c565b6106c95760015f808581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506106666105d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506106cd565b5f90505b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610723578060035f828254610717919061111c565b925050819055506107f3565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156107ad578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016107a493929190611177565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361083a578060035f8282540392505081905550610885565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108e291906111ac565b60405180910390a3505050565b5f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806109cd57607f821691505b6020821081036109e0576109df610989565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610a07565b610a4c8683610a07565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a90610a8b610a8684610a64565b610a6d565b610a64565b9050919050565b5f819050919050565b610aa983610a76565b610abd610ab582610a97565b848454610a13565b825550505050565b5f90565b610ad1610ac5565b610adc818484610aa0565b505050565b5b81811015610aff57610af45f82610ac9565b600181019050610ae2565b5050565b601f821115610b4457610b15816109e6565b610b1e846109f8565b81016020851015610b2d578190505b610b41610b39856109f8565b830182610ae1565b50505b505050565b5f82821c905092915050565b5f610b645f1984600802610b49565b1980831691505092915050565b5f610b7c8383610b55565b9150826002028217905092915050565b610b9582610952565b67ffffffffffffffff811115610bae57610bad61095c565b5b610bb882546109b6565b610bc3828285610b03565b5f60209050601f831160018114610bf4575f8415610be2578287015190505b610bec8582610b71565b865550610c53565b601f198416610c02866109e6565b5f5b82811015610c2957848901518255600182019150602085019450602081019050610c04565b86831015610c465784890151610c42601f891682610b55565b8355505b6001600288020188555050505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b610c8d82610c74565b810181811067ffffffffffffffff82111715610cac57610cab61095c565b5b80604052505050565b5f610cbe610c5b565b9050610cca8282610c84565b919050565b5f67ffffffffffffffff821115610ce957610ce861095c565b5b610cf282610c74565b9050602081019050919050565b8281835e5f83830152505050565b5f610d1f610d1a84610ccf565b610cb5565b905082815260208101848484011115610d3b57610d3a610c70565b5b610d46848285610cff565b509392505050565b5f82601f830112610d6257610d61610c6c565b5b8151610d72848260208601610d0d565b91505092915050565b610d8481610a64565b8114610d8e575f80fd5b50565b5f81519050610d9f81610d7b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610dce82610da5565b9050919050565b610dde81610dc4565b8114610de8575f80fd5b50565b5f81519050610df981610dd5565b92915050565b5f805f8060808587031215610e1757610e16610c64565b5b5f85015167ffffffffffffffff811115610e3457610e33610c68565b5b610e4087828801610d4e565b945050602085015167ffffffffffffffff811115610e6157610e60610c68565b5b610e6d87828801610d4e565b9350506040610e7e87828801610d91565b9250506060610e8f87828801610deb565b91505092959194509250565b5f60208284031215610eb057610eaf610c64565b5b5f610ebd84828501610deb565b91505092915050565b610ecf81610dc4565b82525050565b5f604082019050610ee85f830185610ec6565b610ef56020830184610ec6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610f7e57808604811115610f5a57610f59610efc565b5b6001851615610f695780820291505b8081029050610f7785610f29565b9450610f3e565b94509492505050565b5f82610f965760019050611051565b81610fa3575f9050611051565b8160018114610fb95760028114610fc357610ff2565b6001915050611051565b60ff841115610fd557610fd4610efc565b5b8360020a915084821115610fec57610feb610efc565b5b50611051565b5060208310610133831016604e8410600b84101617156110275782820a90508381111561102257611021610efc565b5b611051565b6110348484846001610f35565b9250905081840481111561104b5761104a610efc565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61106e82610a64565b915061107983611058565b92506110a67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610f87565b905092915050565b5f6110b882610a64565b91506110c383610a64565b92508282026110d181610a64565b915082820484148315176110e8576110e7610efc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61112682610a64565b915061113183610a64565b925082820190508082111561114957611148610efc565b5b92915050565b5f6020820190506111625f830184610ec6565b92915050565b61117181610a64565b82525050565b5f60608201905061118a5f830186610ec6565b6111976020830185611168565b6111a46040830184611168565b949350505050565b5f6020820190506111bf5f830184611168565b92915050565b6125c6806111d25f395ff3fe608060405234801561000f575f80fd5b5060043610610135575f3560e01c806375b238fc116100b6578063a217fddf1161007a578063a217fddf1461035f578063a9059cbb1461037d578063b7305885146103ad578063d547741f146103c9578063dd62ed3e146103e5578063fe99c6c61461041557610135565b806375b238fc146102bb578063844010f4146102d957806389023d82146102f557806391d148541461031157806395d89b411461034157610135565b8063248a9ca3116100fd578063248a9ca3146102055780632f2ff15d14610235578063313ce5671461025157806336568abe1461026f57806370a082311461028b57610135565b806301ffc9a71461013957806306fdde0314610169578063095ea7b31461018757806318160ddd146101b757806323b872dd146101d5575b5f80fd5b610153600480360381019061014e9190611810565b610431565b6040516101609190611855565b60405180910390f35b6101716104aa565b60405161017e91906118de565b60405180910390f35b6101a1600480360381019061019c919061198b565b61053a565b6040516101ae9190611855565b60405180910390f35b6101bf61055c565b6040516101cc91906119d8565b60405180910390f35b6101ef60048036038101906101ea91906119f1565b610565565b6040516101fc9190611855565b60405180910390f35b61021f600480360381019061021a9190611a74565b610593565b60405161022c9190611aae565b60405180910390f35b61024f600480360381019061024a9190611ac7565b6105af565b005b6102596105d1565b6040516102669190611b20565b60405180910390f35b61028960048036038101906102849190611ac7565b6105d9565b005b6102a560048036038101906102a09190611b39565b610654565b6040516102b291906119d8565b60405180910390f35b6102c361069a565b6040516102d09190611aae565b60405180910390f35b6102f360048036038101906102ee9190611c90565b6106be565b005b61030f600480360381019061030a9190611cea565b61072e565b005b61032b60048036038101906103269190611ac7565b61076c565b6040516103389190611855565b60405180910390f35b6103496107cf565b60405161035691906118de565b60405180910390f35b61036761085f565b6040516103749190611aae565b60405180910390f35b6103976004803603810190610392919061198b565b610865565b6040516103a49190611855565b60405180910390f35b6103c760048036038101906103c29190611cea565b610887565b005b6103e360048036038101906103de9190611ac7565b6108ef565b005b6103ff60048036038101906103fa9190611d31565b610911565b60405161040c91906119d8565b60405180910390f35b61042f600480360381019061042a9190611cea565b610993565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a357506104a2826109ee565b5b9050919050565b6060600480546104b990611d9c565b80601f01602080910402602001604051908101604052809291908181526020018280546104e590611d9c565b80156105305780601f1061050757610100808354040283529160200191610530565b820191905f5260205f20905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b5f80610544610a57565b9050610551818585610a5e565b600191505092915050565b5f600354905090565b5f8061056f610a57565b905061057c858285610a70565b610587858585610b02565b60019150509392505050565b5f805f8381526020019081526020015f20600101549050919050565b6105b882610593565b6105c181610c48565b6105cb8383610c5c565b50505050565b5f6012905090565b6105e1610a57565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610645576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064f8282610d45565b505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106e881610c48565b6106f06105d1565b600a6106fc9190611f28565b826107079190611f72565b6007846040516107179190611fed565b908152602001604051809103902081905550505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561075881610c48565b816009908161076791906121a0565b505050565b5f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6060600580546107de90611d9c565b80601f016020809104026020016040519081016040528092919081815260200182805461080a90611d9c565b80156108555780601f1061082c57610100808354040283529160200191610855565b820191905f5260205f20905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b5f801b81565b5f8061086f610a57565b905061087c818585610b02565b600191505092915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756108b181610c48565b60405180602001604052805f8152506008836040516108d09190611fed565b908152602001604051809103902090816108ea91906121a0565b505050565b6108f882610593565b61090181610c48565b61090b8383610d45565b50505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109bd81610c48565b60046008836040516109cf9190611fed565b908152602001604051809103902090816109e99190612296565b505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b610a6b8383836001610e2e565b505050565b5f610a7b8484610911565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610afc5781811015610aed578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610ae49392919061238a565b60405180910390fd5b610afb84848484035f610e2e565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b72575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610b6991906123bf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610be2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610bd991906123bf565b60405180910390fd5b5f610bec84610ffd565b9050610bf881836112f8565b610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90612422565b60405180910390fd5b610c4284848461153d565b50505050565b610c5981610c54610a57565b611759565b50565b5f610c67838361076c565b610d3b5760015f808581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610cd8610a57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610d3f565b5f90505b92915050565b5f610d50838361076c565b15610e24575f805f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610dc1610a57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050610e28565b5f90505b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e9e575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e9591906123bf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f0e575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f0591906123bf565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610ff7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fee91906119d8565b60405180910390a35b50505050565b60605f8273ffffffffffffffffffffffffffffffffffffffff165f1b90505f6040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090505f602a67ffffffffffffffff8111156110705761106f611b6c565b5b6040519080825280601f01601f1916602001820160405280156110a25781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f815181106110d9576110d8612440565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061113c5761113b612440565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b60148110156112ec5782600485600c84611186919061246d565b6020811061119757611196612440565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff16815181106111d6576111d5612440565b5b602001015160f81c60f81b826002836111ef9190611f72565b60026111fb919061246d565b8151811061120c5761120b612440565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535082600f60f81b85600c8461124e919061246d565b6020811061125f5761125e612440565b5b1a60f81b1660f81c60ff168151811061127b5761127a612440565b5b602001015160f81c60f81b826002836112949190611f72565b60036112a0919061246d565b815181106112b1576112b0612440565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350808060010191505061116c565b50809350505050919050565b5f600460405160200161130b9190612520565b6040516020818303038152906040528051906020012060096040516020016113339190612520565b60405160208183030381529060405280519060200120036114505760046040516020016113609190612520565b604051602081830303815290604052805190602001206008846040516113869190611fed565b90815260200160405180910390206040516020016113a49190612520565b604051602081830303815290604052805190602001200361144b57816007846040516113d09190611fed565b908152602001604051809103902054101580156113ec57505f82115b1561144257816007846040516114029190611fed565b90815260200160405180910390205461141b9190612536565b60078460405161142b9190611fed565b90815260200160405180910390208190555061144a565b5f9050611537565b5b611532565b60066040516020016114629190612520565b60405160208183030381529060405280519060200120836040516020016114899190611fed565b60405160208183030381529060405280519060200120031561153157816007846040516114b69190611fed565b908152602001604051809103902054101580156114d257505f82115b1561152857816007846040516114e89190611fed565b9081526020016040518091039020546115019190612536565b6007846040516115119190611fed565b908152602001604051809103902081905550611530565b5f9050611537565b5b5b600190505b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361158d578060035f828254611581919061246d565b9250508190555061165d565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611617578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161160e9392919061238a565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a4578060035f82825403925050819055506116ef565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161174c91906119d8565b60405180910390a3505050565b611763828261076c565b6117a65780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161179d929190612569565b60405180910390fd5b5050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117ef816117bb565b81146117f9575f80fd5b50565b5f8135905061180a816117e6565b92915050565b5f60208284031215611825576118246117b3565b5b5f611832848285016117fc565b91505092915050565b5f8115159050919050565b61184f8161183b565b82525050565b5f6020820190506118685f830184611846565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6118b08261186e565b6118ba8185611878565b93506118ca818560208601611888565b6118d381611896565b840191505092915050565b5f6020820190508181035f8301526118f681846118a6565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611927826118fe565b9050919050565b6119378161191d565b8114611941575f80fd5b50565b5f813590506119528161192e565b92915050565b5f819050919050565b61196a81611958565b8114611974575f80fd5b50565b5f8135905061198581611961565b92915050565b5f80604083850312156119a1576119a06117b3565b5b5f6119ae85828601611944565b92505060206119bf85828601611977565b9150509250929050565b6119d281611958565b82525050565b5f6020820190506119eb5f8301846119c9565b92915050565b5f805f60608486031215611a0857611a076117b3565b5b5f611a1586828701611944565b9350506020611a2686828701611944565b9250506040611a3786828701611977565b9150509250925092565b5f819050919050565b611a5381611a41565b8114611a5d575f80fd5b50565b5f81359050611a6e81611a4a565b92915050565b5f60208284031215611a8957611a886117b3565b5b5f611a9684828501611a60565b91505092915050565b611aa881611a41565b82525050565b5f602082019050611ac15f830184611a9f565b92915050565b5f8060408385031215611add57611adc6117b3565b5b5f611aea85828601611a60565b9250506020611afb85828601611944565b9150509250929050565b5f60ff82169050919050565b611b1a81611b05565b82525050565b5f602082019050611b335f830184611b11565b92915050565b5f60208284031215611b4e57611b4d6117b3565b5b5f611b5b84828501611944565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611ba282611896565b810181811067ffffffffffffffff82111715611bc157611bc0611b6c565b5b80604052505050565b5f611bd36117aa565b9050611bdf8282611b99565b919050565b5f67ffffffffffffffff821115611bfe57611bfd611b6c565b5b611c0782611896565b9050602081019050919050565b828183375f83830152505050565b5f611c34611c2f84611be4565b611bca565b905082815260208101848484011115611c5057611c4f611b68565b5b611c5b848285611c14565b509392505050565b5f82601f830112611c7757611c76611b64565b5b8135611c87848260208601611c22565b91505092915050565b5f8060408385031215611ca657611ca56117b3565b5b5f83013567ffffffffffffffff811115611cc357611cc26117b7565b5b611ccf85828601611c63565b9250506020611ce085828601611977565b9150509250929050565b5f60208284031215611cff57611cfe6117b3565b5b5f82013567ffffffffffffffff811115611d1c57611d1b6117b7565b5b611d2884828501611c63565b91505092915050565b5f8060408385031215611d4757611d466117b3565b5b5f611d5485828601611944565b9250506020611d6585828601611944565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611db357607f821691505b602082108103611dc657611dc5611d6f565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115611e4e57808604811115611e2a57611e29611dcc565b5b6001851615611e395780820291505b8081029050611e4785611df9565b9450611e0e565b94509492505050565b5f82611e665760019050611f21565b81611e73575f9050611f21565b8160018114611e895760028114611e9357611ec2565b6001915050611f21565b60ff841115611ea557611ea4611dcc565b5b8360020a915084821115611ebc57611ebb611dcc565b5b50611f21565b5060208310610133831016604e8410600b8410161715611ef75782820a905083811115611ef257611ef1611dcc565b5b611f21565b611f048484846001611e05565b92509050818404811115611f1b57611f1a611dcc565b5b81810290505b9392505050565b5f611f3282611958565b9150611f3d83611b05565b9250611f6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611e57565b905092915050565b5f611f7c82611958565b9150611f8783611958565b9250828202611f9581611958565b91508282048414831517611fac57611fab611dcc565b5b5092915050565b5f81905092915050565b5f611fc78261186e565b611fd18185611fb3565b9350611fe1818560208601611888565b80840191505092915050565b5f611ff88284611fbd565b915081905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261205f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612024565b6120698683612024565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6120a461209f61209a84611958565b612081565b611958565b9050919050565b5f819050919050565b6120bd8361208a565b6120d16120c9826120ab565b848454612030565b825550505050565b5f90565b6120e56120d9565b6120f08184846120b4565b505050565b5b81811015612113576121085f826120dd565b6001810190506120f6565b5050565b601f8211156121585761212981612003565b61213284612015565b81016020851015612141578190505b61215561214d85612015565b8301826120f5565b50505b505050565b5f82821c905092915050565b5f6121785f198460080261215d565b1980831691505092915050565b5f6121908383612169565b9150826002028217905092915050565b6121a98261186e565b67ffffffffffffffff8111156121c2576121c1611b6c565b5b6121cc8254611d9c565b6121d7828285612117565b5f60209050601f831160018114612208575f84156121f6578287015190505b6122008582612185565b865550612267565b601f19841661221686612003565b5f5b8281101561223d57848901518255600182019150602085019450602081019050612218565b8683101561225a5784890151612256601f891682612169565b8355505b6001600288020188555050505b505050505050565b5f8154905061227d81611d9c565b9050919050565b5f819050815f5260205f209050919050565b8181036122a4575050612379565b6122ad8261226f565b67ffffffffffffffff8111156122c6576122c5611b6c565b5b6122d08254611d9c565b6122db828285612117565b5f601f831160018114612308575f84156122f6578287015490505b6123008582612185565b865550612372565b601f19841661231687612284565b965061232186612003565b5f5b8281101561234857848901548255600182019150600185019450602081019050612323565b868310156123655784890154612361601f891682612169565b8355505b6001600288020188555050505b5050505050505b565b6123848161191d565b82525050565b5f60608201905061239d5f83018661237b565b6123aa60208301856119c9565b6123b760408301846119c9565b949350505050565b5f6020820190506123d25f83018461237b565b92915050565b7f636865636b206661696c656400000000000000000000000000000000000000005f82015250565b5f61240c600c83611878565b9150612417826123d8565b602082019050919050565b5f6020820190508181035f83015261243981612400565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61247782611958565b915061248283611958565b925082820190508082111561249a57612499611dcc565b5b92915050565b5f81546124ac81611d9c565b6124b68186611fb3565b9450600182165f81146124d057600181146124e557612517565b60ff1983168652811515820286019350612517565b6124ee85612003565b5f5b8381101561250f578154818901526001820191506020810190506124f0565b838801955050505b50505092915050565b5f61252b82846124a0565b915081905092915050565b5f61254082611958565b915061254b83611958565b925082820390508181111561256357612562611dcc565b5b92915050565b5f60408201905061257c5f83018561237b565b6125896020830184611a9f565b939250505056fea26469706673582212200e083be6d500cab348d9d0032d1b1541da056d80cadf74fc8e62b6936e261e1f64736f6c63430008190033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000003c8e7e725154b1bdd5c8b6e3f169d656cb4a646f0000000000000000000000000000000000000000000000000000000000000005477561726400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054775617264000000000000000000000000000000000000000000000000000000