[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "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": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountWithdrawn", "type": "uint256" } ], "name": "PayoutWithdrawn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256", "name": "totalPayout", "type": "uint256" } ], "name": "TokensBurned", "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" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "ClaimPayout", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "ForgeGem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "MeltGems", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numberOfTokens", "type": "uint256" } ], "name": "Mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "RevealMyGems", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "_devShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_forgePrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_mintOpen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_reRollPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_revealOpen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_totalEverMinted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "changeForgePrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "changeReRollPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "checkPayout", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "checkUserPayout", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "distributeRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "doInput", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "mintOpen", "type": "bool" } ], "name": "editMintStatus", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "revealOpen", "type": "bool" } ], "name": "editRevealStatus", "outputs": [], "stateMutability": "nonpayable", "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": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "isRevealed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "paymentToken", "outputs": [ { "internalType": "contract IERC20Burnable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "reRollGems", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "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": "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": "devAddress", "type": "address" } ], "name": "setDevAddy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "erc20Address", "type": "address" } ], "name": "setERC20Contract", "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": [ { "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" }, { "stateMutability": "payable", "type": "receive" } ]
60806040525f6012556001601355620186a06017556175306018555f60195f6101000a81548160ff0219169083151502179055505f601960016101000a81548160ff02191690831515021790555034801562000059575f80fd5b50604051620064ab380380620064ab83398181016040528101906200007f9190620002cd565b806040518060400160405280600681526020017f446547656d7300000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4447454d00000000000000000000000000000000000000000000000000000000815250815f9081620000fc919062000561565b5080600190816200010e919062000561565b5050506001600b819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200018c575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000183919062000656565b60405180910390fd5b6200019d81620001a560201b60201c565b505062000671565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000297826200026c565b9050919050565b620002a9816200028b565b8114620002b4575f80fd5b50565b5f81519050620002c7816200029e565b92915050565b5f60208284031215620002e557620002e462000268565b5b5f620002f484828501620002b7565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200037957607f821691505b6020821081036200038f576200038e62000334565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620003f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003b6565b620003ff8683620003b6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000449620004436200043d8462000417565b62000420565b62000417565b9050919050565b5f819050919050565b620004648362000429565b6200047c620004738262000450565b848454620003c2565b825550505050565b5f90565b6200049262000484565b6200049f81848462000459565b505050565b5b81811015620004c657620004ba5f8262000488565b600181019050620004a5565b5050565b601f8211156200051557620004df8162000395565b620004ea84620003a7565b81016020851015620004fa578190505b620005126200050985620003a7565b830182620004a4565b50505b505050565b5f82821c905092915050565b5f620005375f19846008026200051a565b1980831691505092915050565b5f62000551838362000526565b9150826002028217905092915050565b6200056c82620002fd565b67ffffffffffffffff81111562000588576200058762000307565b5b62000594825462000361565b620005a1828285620004ca565b5f60209050601f831160018114620005d7575f8415620005c2578287015190505b620005ce858262000544565b8655506200063d565b601f198416620005e78662000395565b5f5b828110156200061057848901518255600182019150602085019450602081019050620005e9565b868310156200063057848901516200062c601f89168262000526565b8355505b6001600288020188555050505b505050505050565b62000650816200028b565b82525050565b5f6020820190506200066b5f83018462000645565b92915050565b615e2c806200067f5f395ff3fe608060405260043610610275575f3560e01c80636352211e1161014e578063a84547a9116100c0578063cd9a222811610079578063cd9a222814610935578063d0d125081461095f578063de0e93b514610989578063e9099829146109b1578063e985e9c5146109d9578063f2fde38b14610a15576102af565b8063a84547a91461082c578063b145c01314610856578063b88d4fde14610881578063c3292950146108a9578063c87b56dd146108d1578063cac8d5381461090d576102af565b80637c193d0d116101125780637c193d0d146107365780638da5cb5b1461075e57806395d89b41146107885780639d6c1abd146107b25780639ffad757146107da578063a22cb46514610804576102af565b80636352211e146106545780636b363ca11461069057806370a08231146106ba578063715018a6146106f65780637b0eba7f1461070c576102af565b80632fb8a96e116101e757806342842e0e116101ab57806342842e0e1461053a57806342966c6814610562578063433bfbbc1461058a5780634f6ccce7146105c65780634fdc0194146106025780635055fbc314610618576102af565b80632fb8a96e146104b25780633013ce29146104c8578063331bcfa8146104f257806335bea4e1146105085780633bc8da1a14610512576102af565b8063095ea7b311610239578063095ea7b314610397578063142422e4146103bf57806318160ddd146103e757806323b872dd146104115780632a55205a146104395780632f745c5914610476576102af565b806301ffc9a7146102b157806305000410146102ed57806306fdde0314610315578063078837031461033f578063081812fc1461035b576102af565b366102af575f606460143461028a9190613fe8565b6102949190614056565b90508060155f8282546102a79190614086565b925050819055005b005b3480156102bc575f80fd5b506102d760048036038101906102d2919061411f565b610a3d565b6040516102e49190614164565b60405180910390f35b3480156102f8575f80fd5b50610313600480360381019061030e91906141d7565b610a6e565b005b348015610320575f80fd5b50610329610ab9565b604051610336919061428c565b60405180910390f35b610359600480360381019061035491906142d6565b610b48565b005b348015610366575f80fd5b50610381600480360381019061037c91906142d6565b610e51565b60405161038e9190614310565b60405180910390f35b3480156103a2575f80fd5b506103bd60048036038101906103b89190614329565b610e6c565b005b3480156103ca575f80fd5b506103e560048036038101906103e091906142d6565b610e82565b005b3480156103f2575f80fd5b506103fb610e94565b6040516104089190614376565b60405180910390f35b34801561041c575f80fd5b506104376004803603810190610432919061438f565b610ea0565b005b348015610444575f80fd5b5061045f600480360381019061045a91906143df565b610f9f565b60405161046d92919061441d565b60405180910390f35b348015610481575f80fd5b5061049c60048036038101906104979190614329565b610fcd565b6040516104a99190614376565b60405180910390f35b3480156104bd575f80fd5b506104c6611071565b005b3480156104d3575f80fd5b506104dc611235565b6040516104e9919061449f565b60405180910390f35b3480156104fd575f80fd5b5061050661125a565b005b610510611543565b005b34801561051d575f80fd5b50610538600480360381019061053391906145f8565b611545565b005b348015610545575f80fd5b50610560600480360381019061055b919061438f565b611766565b005b34801561056d575f80fd5b50610588600480360381019061058391906142d6565b611785565b005b348015610595575f80fd5b506105b060048036038101906105ab91906141d7565b61179b565b6040516105bd9190614376565b60405180910390f35b3480156105d1575f80fd5b506105ec60048036038101906105e791906142d6565b6117e1565b6040516105f99190614376565b60405180910390f35b34801561060d575f80fd5b50610616611853565b005b348015610623575f80fd5b5061063e600480360381019061063991906142d6565b611a56565b60405161064b9190614164565b60405180910390f35b34801561065f575f80fd5b5061067a600480360381019061067591906142d6565b611a73565b6040516106879190614310565b60405180910390f35b34801561069b575f80fd5b506106a4611a84565b6040516106b19190614376565b60405180910390f35b3480156106c5575f80fd5b506106e060048036038101906106db91906141d7565b611a8a565b6040516106ed9190614376565b60405180910390f35b348015610701575f80fd5b5061070a611b40565b005b348015610717575f80fd5b50610720611b53565b60405161072d9190614376565b60405180910390f35b348015610741575f80fd5b5061075c60048036038101906107579190614669565b611b59565b005b348015610769575f80fd5b50610772611b7e565b60405161077f9190614310565b60405180910390f35b348015610793575f80fd5b5061079c611ba6565b6040516107a9919061428c565b60405180910390f35b3480156107bd575f80fd5b506107d860048036038101906107d391906142d6565b611c36565b005b3480156107e5575f80fd5b506107ee611c48565b6040516107fb9190614376565b60405180910390f35b34801561080f575f80fd5b5061082a60048036038101906108259190614694565b611c4e565b005b348015610837575f80fd5b50610840611c64565b60405161084d9190614164565b60405180910390f35b348015610861575f80fd5b5061086a611c77565b6040516108789291906146d2565b60405180910390f35b34801561088c575f80fd5b506108a760048036038101906108a291906147a9565b611d0e565b005b3480156108b4575f80fd5b506108cf60048036038101906108ca9190614882565b611d2b565b005b3480156108dc575f80fd5b506108f760048036038101906108f291906142d6565b612047565b604051610904919061428c565b60405180910390f35b348015610918575f80fd5b50610933600480360381019061092e91906141d7565b612059565b005b348015610940575f80fd5b50610949612112565b6040516109569190614164565b60405180910390f35b34801561096a575f80fd5b50610973612124565b6040516109809190614376565b60405180910390f35b348015610994575f80fd5b506109af60048036038101906109aa9190614669565b61212a565b005b3480156109bc575f80fd5b506109d760048036038101906109d29190614882565b61214e565b005b3480156109e4575f80fd5b506109ff60048036038101906109fa91906148cd565b6125c9565b604051610a0c9190614164565b60405180910390f35b348015610a20575f80fd5b50610a3b6004803603810190610a3691906141d7565b612657565b005b5f610a47826126db565b80610a575750610a56826127bc565b5b80610a675750610a6682612835565b5b9050919050565b610a76612895565b8060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f8054610ac790614938565b80601f0160208091040260200160405190810160405280929190818152602001828054610af390614938565b8015610b3e5780601f10610b1557610100808354040283529160200191610b3e565b820191905f5260205f20905b815481529060010190602001808311610b2157829003601f168201915b5050505050905090565b610b5061291c565b60195f9054906101000a900460ff16610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b95906149b2565b60405180910390fd5b5f81118015610bae5750600a8111155b610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490614a40565b60405180910390fd5b80670de0b6b3a7640000610c019190613fe8565b3414610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990614aa8565b60405180910390fd5b600a81600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c8d9190614086565b1115610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590614b36565b60405180910390fd5b6103e881610cda610e94565b610ce49190614086565b1115610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90614bc4565b60405180910390fd5b5f6064600534610d359190613fe8565b610d3f9190614056565b90508060155f828254610d529190614086565b925050819055508160165f828254610d6a9190614086565b925050819055505f5b82811015610df1575f60135f815480929190610d8e90614be2565b919050559050610d9e338261296b565b610ddd816040518060400160405280600681526020017f302e6a736f6e0000000000000000000000000000000000000000000000000000815250612988565b508080610de990614be2565b915050610d73565b5081600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e3e9190614086565b9250508190555050610e4e6129e2565b50565b5f610e5b826129ec565b50610e6582612a72565b9050919050565b610e7e8282610e79612aab565b612ab2565b5050565b610e8a612895565b8060188190555050565b5f600880549050905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f10575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f079190614310565b60405180910390fd5b5f610f238383610f1e612aab565b612ac4565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f99578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610f9093929190614c29565b60405180910390fd5b50505050565b5f805f6127106101f485610fb39190613fe8565b610fbd9190614056565b9050308192509250509250929050565b5f610fd783611a8a565b821061101c5782826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161101392919061441d565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b61107961291c565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90614ca8565b60405180910390fd5b5f6015541161114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390614d10565b60405180910390fd5b5f60155490505f6014819055505f6015819055505f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111a690614d5b565b5f6040518083038185875af1925050503d805f81146111e0576040519150601f19603f3d011682016040523d82523d5f602084013e6111e5565b606091505b5050905080611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090614db9565b60405180910390fd5b50506112336129e2565b565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61126261291c565b5f670de0b6b3a76400006017546112799190613fe8565b90508060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016112d8929190614dd7565b602060405180830381865afa1580156112f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113179190614e12565b1015611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90614ead565b60405180910390fd5b5f60135f81548092919061136b90614be2565b919050559050600160165f8282546113839190614086565b9250508190555060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016113e893929190614ecb565b6020604051808303815f875af1158015611404573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114289190614f14565b611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90614f89565b60405180910390fd5b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b81526004016114c19190614376565b5f604051808303815f87803b1580156114d8575f80fd5b505af11580156114ea573d5f803e3d5ffd5b505050506114f8338261296b565b611537816040518060400160405280600681526020017f302e6a736f6e0000000000000000000000000000000000000000000000000000815250612988565b50506115416129e2565b565b565b601960019054906101000a900460ff16611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90614ff1565b60405180910390fd5b5f81511180156115a65750600a815111155b6115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc9061507f565b60405180910390fd5b5f5b8151811015611762575f8282815181106116045761160361509d565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff1661162e82611a73565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90615114565b60405180910390fd5b600d5f8281526020019081526020015f205f9054906101000a900460ff16156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d99061517c565b60405180910390fd5b5f6116ec82612ad9565b90505f6116f882612b3f565b604051602001611708919061521e565b60405160208183030381529060405290506117238382612988565b6001600d5f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550505050808061175a90614be2565b9150506115e7565b5050565b61178083838360405180602001604052805f815250611d0e565b505050565b6117975f82611792612aab565b612ac4565b5050565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f6117ea610e94565b821061182f575f826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161182692919061441d565b60405180910390fd5b600882815481106118435761184261509d565b5b905f5260205f2001549050919050565b61185b61291c565b5f600e5f611867612aab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f81116118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc90615289565b60405180910390fd5b5f600e5f6118f1612aab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060125f82825461193f91906152a7565b925050819055505f61194f612aab565b73ffffffffffffffffffffffffffffffffffffffff168260405161197290614d5b565b5f6040518083038185875af1925050503d805f81146119ac576040519150601f19603f3d011682016040523d82523d5f602084013e6119b1565b606091505b50509050806119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec90615324565b60405180910390fd5b6119fd612aab565b73ffffffffffffffffffffffffffffffffffffffff167faa916bb7738886447c333e8803dd7d94e5fcb6acb2f5d5aa6502373dd59dc55b83604051611a429190614376565b60405180910390a25050611a546129e2565b565b600d602052805f5260405f205f915054906101000a900460ff1681565b5f611a7d826129ec565b9050919050565b60155481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611afb575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401611af29190614310565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611b48612895565b611b515f612cbd565b565b60175481565b611b61612895565b80601960016101000a81548160ff02191690831515021790555050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611bb590614938565b80601f0160208091040260200160405190810160405280929190818152602001828054611be190614938565b8015611c2c5780601f10611c0357610100808354040283529160200191611c2c565b820191905f5260205f20905b815481529060010190602001808311611c0f57829003601f168201915b5050505050905090565b611c3e612895565b8060178190555050565b60185481565b611c60611c59612aab565b8383612d80565b5050565b601960019054906101000a900460ff1681565b5f805f60125460155447611c8b91906152a7565b611c9591906152a7565b90505f611ca0610e94565b03611cb1575f809250925050611d0a565b5f611cba610e94565b82611cc59190614056565b90505f6064605f83611cd79190613fe8565b611ce19190614056565b90505f6064600584611cf39190613fe8565b611cfd9190614056565b9050818195509550505050505b9091565b611d19848484610ea0565b611d2584848484612ee9565b50505050565b611d3361291c565b60195f9054906101000a900460ff1615611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614ff1565b60405180910390fd5b5f82829050118015611d98575060058282905011155b611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce906153b2565b60405180910390fd5b5f80611de1611c77565b915091505f8211611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e9061541a565b60405180910390fd5b5f805f5b86869050811015611f1d57611e3e612aab565b73ffffffffffffffffffffffffffffffffffffffff16611e76888884818110611e6a57611e6961509d565b5b90506020020135611a73565b73ffffffffffffffffffffffffffffffffffffffff1614611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec3906154a8565b60405180910390fd5b8483611ed89190614086565b92508382611ee69190614086565b9150611f0a878783818110611efe57611efd61509d565b5b9050602002013561309b565b8080611f1590614be2565b915050611e2b565b5081600e5f611f2a612aab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611f719190614086565b925050819055508060145f828254611f899190614086565b925050819055505f6101f4606483611fa19190613fe8565b611fab9190614056565b90508060155f828254611fbe9190614086565b925050819055508260125f828254611fd69190614086565b92505081905550611fe5612aab565b73ffffffffffffffffffffffffffffffffffffffff167f5956fc7e6ee60022508bcff7b082f9c4ef4683b8033fbe751b9e6f355ab1f89888888660405161202e9392919061553e565b60405180910390a250505050506120436129e2565b5050565b60606120528261311d565b9050919050565b612061612895565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906155b8565b60405180910390fd5b8060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195f9054906101000a900460ff1681565b60165481565b612132612895565b8060195f6101000a81548160ff02191690831515021790555050565b61215661291c565b5f8282905011801561216c5750600a8282905011155b6121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a290615646565b60405180910390fd5b5f82829050670de0b6b3a76400006018546121c69190613fe8565b6121d09190613fe8565b90508060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161222f929190614dd7565b602060405180830381865afa15801561224a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061226e9190614e12565b10156122af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a6906156ae565b60405180910390fd5b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6122f4612aab565b30846040518463ffffffff1660e01b815260040161231493929190614ecb565b6020604051808303815f875af1158015612330573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123549190614f14565b612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90615716565b60405180910390fd5b5f5b83839050811015612534576123a8612aab565b73ffffffffffffffffffffffffffffffffffffffff166123e08585848181106123d4576123d361509d565b5b90506020020135611a73565b73ffffffffffffffffffffffffffffffffffffffff1614612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d9061577e565b60405180910390fd5b600d5f85858481811061244c5761244b61509d565b5b9050602002013581526020019081526020015f205f9054906101000a900460ff166124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a39061580c565b60405180910390fd5b5f6124cf8585848181106124c3576124c261509d565b5b90506020020135612ad9565b90505f6124db82612b3f565b6040516020016124eb919061521e565b604051602081830303815290604052905061251f8686858181106125125761251161509d565b5b9050602002013582612988565b5050808061252c90614be2565b915050612395565b5060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b815260040161258f9190614376565b5f604051808303815f87803b1580156125a6575f80fd5b505af11580156125b8573d5f803e3d5ffd5b50505050506125c56129e2565b5050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61265f612895565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126cf575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126c69190614310565b60405180910390fd5b6126d881612cbd565b50565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127a557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127b557506127b482613228565b5b9050919050565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061282e575061282d826126db565b5b9050919050565b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061288e575061288d826127bc565b5b9050919050565b61289d612aab565b73ffffffffffffffffffffffffffffffffffffffff166128bb611b7e565b73ffffffffffffffffffffffffffffffffffffffff161461291a576128de612aab565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016129119190614310565b60405180910390fd5b565b6002600b5403612961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295890615874565b60405180910390fd5b6002600b81905550565b612984828260405180602001604052805f815250613291565b5050565b80600a5f8481526020019081526020015f2090816129a69190615a26565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516129d69190614376565b60405180910390a15050565b6001600b81905550565b5f806129f7836132ac565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a6957826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612a609190614376565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b612abf83838360016132e5565b505050565b5f612ad08484846134a4565b90509392505050565b5f80612ae3611c77565b5090505f60016101a4423387434188604051602001612b0796959493929190615b93565b604051602081830303815290604052805190602001205f1c612b299190615c02565b612b339190614086565b90508092505050919050565b60605f8203612b85576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cb8565b5f8290505f5b5f8214612bb4578080612b9d90614be2565b915050600a82612bad9190614056565b9150612b8b565b5f8167ffffffffffffffff811115612bcf57612bce6144bc565b5b6040519080825280601f01601f191660200182016040528015612c015781602001600182028036833780820191505090505b5090505f8290505b5f8614612cb057600181612c1d91906152a7565b90505f600a8088612c2e9190614056565b612c389190613fe8565b87612c4391906152a7565b6030612c4f9190615c3e565b90505f8160f81b905080848481518110612c6c57612c6b61509d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a88612ca79190614056565b97505050612c09565b819450505050505b919050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612df057816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401612de79190614310565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612edc9190614164565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115613095578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f2c612aab565b8685856040518563ffffffff1660e01b8152600401612f4e9493929190615cc4565b6020604051808303815f875af1925050508015612f8957506040513d601f19601f82011682018060405250810190612f869190615d22565b60015b61300a573d805f8114612fb7576040519150601f19603f3d011682016040523d82523d5f602084013e612fbc565b606091505b505f81510361300257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612ff99190614310565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461309357836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161308a9190614310565b60405180910390fd5b505b50505050565b5f6130a75f835f612ac4565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361311957816040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016131109190614376565b60405180910390fd5b5050565b6060613128826129ec565b505f600a5f8481526020019081526020015f20805461314690614938565b80601f016020809104026020016040519081016040528092919081815260200182805461317290614938565b80156131bd5780601f10613194576101008083540402835291602001916131bd565b820191905f5260205f20905b8154815290600101906020018083116131a057829003601f168201915b505050505090505f6131cd6135be565b90505f8151036131e1578192505050613223565b5f825111156132155780826040516020016131fd929190615d4d565b60405160208183030381529060405292505050613223565b61321e846135de565b925050505b919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61329b8383613644565b6132a75f848484612ee9565b505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061331d57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561344f575f61332c846129ec565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561339657508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156133a957506133a781846125c9565b155b156133eb57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016133e29190614310565b60405180910390fd5b811561344d57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f806134b1858585613737565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036134f4576134ef84613942565b613533565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613532576135318185613986565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036135745761356f84613ad0565b6135b3565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146135b2576135b18585613b90565b5b5b809150509392505050565b6060604051806080016040528060598152602001615d9e60599139905090565b60606135e9826129ec565b505f6135f36135be565b90505f8151116136115760405180602001604052805f81525061363c565b8061361b84613c14565b60405160200161362c929190615d4d565b6040516020818303038152906040525b915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136b4575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016136ab9190614310565b60405180910390fd5b5f6136c083835f612ac4565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613732575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016137299190614310565b60405180910390fd5b505050565b5f80613742846132ac565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461378357613782818486613cde565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461380e576137c25f855f806132e5565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461388d57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f61399083611a8a565b90505f60075f8481526020019081526020015f20549050818114613a67575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f6001600880549050613ae391906152a7565b90505f60095f8481526020019081526020015f205490505f60088381548110613b0f57613b0e61509d565b5b905f5260205f20015490508060088381548110613b2f57613b2e61509d565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f90556008805480613b7757613b76615d70565b5b600190038181905f5260205f20015f9055905550505050565b5f6001613b9c84611a8a565b613ba691906152a7565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b60605f6001613c2284613da1565b0190505f8167ffffffffffffffff811115613c4057613c3f6144bc565b5b6040519080825280601f01601f191660200182016040528015613c725781602001600182028036833780820191505090505b5090505f82602001820190505b600115613cd3578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613cc857613cc7614029565b5b0494505f8503613c7f575b819350505050919050565b613ce9838383613ef2565b613d9c575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613d5d57806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401613d549190614376565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401613d9392919061441d565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613dfd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613df357613df2614029565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613e3a576d04ee2d6d415b85acef81000000008381613e3057613e2f614029565b5b0492506020810190505b662386f26fc100008310613e6957662386f26fc100008381613e5f57613e5e614029565b5b0492506010810190505b6305f5e1008310613e92576305f5e1008381613e8857613e87614029565b5b0492506008810190505b6127108310613eb7576127108381613ead57613eac614029565b5b0492506004810190505b60648310613eda5760648381613ed057613ecf614029565b5b0492506002810190505b600a8310613ee9576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613fa957508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613f6a5750613f6984846125c9565b5b80613fa857508273ffffffffffffffffffffffffffffffffffffffff16613f9083612a72565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ff282613fb2565b9150613ffd83613fb2565b925082820261400b81613fb2565b9150828204841483151761402257614021613fbb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61406082613fb2565b915061406b83613fb2565b92508261407b5761407a614029565b5b828204905092915050565b5f61409082613fb2565b915061409b83613fb2565b92508282019050808211156140b3576140b2613fbb565b5b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6140fe816140ca565b8114614108575f80fd5b50565b5f81359050614119816140f5565b92915050565b5f60208284031215614134576141336140c2565b5b5f6141418482850161410b565b91505092915050565b5f8115159050919050565b61415e8161414a565b82525050565b5f6020820190506141775f830184614155565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6141a68261417d565b9050919050565b6141b68161419c565b81146141c0575f80fd5b50565b5f813590506141d1816141ad565b92915050565b5f602082840312156141ec576141eb6140c2565b5b5f6141f9848285016141c3565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561423957808201518184015260208101905061421e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61425e82614202565b614268818561420c565b935061427881856020860161421c565b61428181614244565b840191505092915050565b5f6020820190508181035f8301526142a48184614254565b905092915050565b6142b581613fb2565b81146142bf575f80fd5b50565b5f813590506142d0816142ac565b92915050565b5f602082840312156142eb576142ea6140c2565b5b5f6142f8848285016142c2565b91505092915050565b61430a8161419c565b82525050565b5f6020820190506143235f830184614301565b92915050565b5f806040838503121561433f5761433e6140c2565b5b5f61434c858286016141c3565b925050602061435d858286016142c2565b9150509250929050565b61437081613fb2565b82525050565b5f6020820190506143895f830184614367565b92915050565b5f805f606084860312156143a6576143a56140c2565b5b5f6143b3868287016141c3565b93505060206143c4868287016141c3565b92505060406143d5868287016142c2565b9150509250925092565b5f80604083850312156143f5576143f46140c2565b5b5f614402858286016142c2565b9250506020614413858286016142c2565b9150509250929050565b5f6040820190506144305f830185614301565b61443d6020830184614367565b9392505050565b5f819050919050565b5f61446761446261445d8461417d565b614444565b61417d565b9050919050565b5f6144788261444d565b9050919050565b5f6144898261446e565b9050919050565b6144998161447f565b82525050565b5f6020820190506144b25f830184614490565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6144f282614244565b810181811067ffffffffffffffff82111715614511576145106144bc565b5b80604052505050565b5f6145236140b9565b905061452f82826144e9565b919050565b5f67ffffffffffffffff82111561454e5761454d6144bc565b5b602082029050602081019050919050565b5f80fd5b5f61457561457084614534565b61451a565b905080838252602082019050602084028301858111156145985761459761455f565b5b835b818110156145c157806145ad88826142c2565b84526020840193505060208101905061459a565b5050509392505050565b5f82601f8301126145df576145de6144b8565b5b81356145ef848260208601614563565b91505092915050565b5f6020828403121561460d5761460c6140c2565b5b5f82013567ffffffffffffffff81111561462a576146296140c6565b5b614636848285016145cb565b91505092915050565b6146488161414a565b8114614652575f80fd5b50565b5f813590506146638161463f565b92915050565b5f6020828403121561467e5761467d6140c2565b5b5f61468b84828501614655565b91505092915050565b5f80604083850312156146aa576146a96140c2565b5b5f6146b7858286016141c3565b92505060206146c885828601614655565b9150509250929050565b5f6040820190506146e55f830185614367565b6146f26020830184614367565b9392505050565b5f80fd5b5f67ffffffffffffffff821115614717576147166144bc565b5b61472082614244565b9050602081019050919050565b828183375f83830152505050565b5f61474d614748846146fd565b61451a565b905082815260208101848484011115614769576147686146f9565b5b61477484828561472d565b509392505050565b5f82601f8301126147905761478f6144b8565b5b81356147a084826020860161473b565b91505092915050565b5f805f80608085870312156147c1576147c06140c2565b5b5f6147ce878288016141c3565b94505060206147df878288016141c3565b93505060406147f0878288016142c2565b925050606085013567ffffffffffffffff811115614811576148106140c6565b5b61481d8782880161477c565b91505092959194509250565b5f80fd5b5f8083601f840112614842576148416144b8565b5b8235905067ffffffffffffffff81111561485f5761485e614829565b5b60208301915083602082028301111561487b5761487a61455f565b5b9250929050565b5f8060208385031215614898576148976140c2565b5b5f83013567ffffffffffffffff8111156148b5576148b46140c6565b5b6148c18582860161482d565b92509250509250929050565b5f80604083850312156148e3576148e26140c2565b5b5f6148f0858286016141c3565b9250506020614901858286016141c3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061494f57607f821691505b6020821081036149625761496161490b565b5b50919050565b7f4d696e74696e6720697320436c6f7365640000000000000000000000000000005f82015250565b5f61499c60118361420c565b91506149a782614968565b602082019050919050565b5f6020820190508181035f8301526149c981614990565b9050919050565b7f4d757374206d696e74206265747765656e203120616e6420313020746f6b656e5f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a2a60218361420c565b9150614a35826149d0565b604082019050919050565b5f6020820190508181035f830152614a5781614a1e565b9050919050565b7f4e6f7420456e6f7567682046756e6473000000000000000000000000000000005f82015250565b5f614a9260108361420c565b9150614a9d82614a5e565b602082019050919050565b5f6020820190508181035f830152614abf81614a86565b9050919050565b7f43616e6e6f74206d696e74206d6f7265207468616e20313020746f6b656e73205f8201527f7065722061646472657373000000000000000000000000000000000000000000602082015250565b5f614b20602b8361420c565b9150614b2b82614ac6565b604082019050919050565b5f6020820190508181035f830152614b4d81614b14565b9050919050565b7f4d696e74696e67206c696d6974206f66203130303020746f6b656e73207265615f8201527f6368656400000000000000000000000000000000000000000000000000000000602082015250565b5f614bae60248361420c565b9150614bb982614b54565b604082019050919050565b5f6020820190508181035f830152614bdb81614ba2565b9050919050565b5f614bec82613fb2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c1e57614c1d613fbb565b5b600182019050919050565b5f606082019050614c3c5f830186614301565b614c496020830185614367565b614c566040830184614301565b949350505050565b7f43616c6c6572206973206e6f74207468652044657600000000000000000000005f82015250565b5f614c9260158361420c565b9150614c9d82614c5e565b602082019050919050565b5f6020820190508181035f830152614cbf81614c86565b9050919050565b7f4e6f20726f79616c7469657320746f20646973747269627574650000000000005f82015250565b5f614cfa601a8361420c565b9150614d0582614cc6565b602082019050919050565b5f6020820190508181035f830152614d2781614cee565b9050919050565b5f81905092915050565b50565b5f614d465f83614d2e565b9150614d5182614d38565b5f82019050919050565b5f614d6582614d3b565b9150819050919050565b7f5472616e73666572204661696c656400000000000000000000000000000000005f82015250565b5f614da3600f8361420c565b9150614dae82614d6f565b602082019050919050565b5f6020820190508181035f830152614dd081614d97565b9050919050565b5f604082019050614dea5f830185614301565b614df76020830184614301565b9392505050565b5f81519050614e0c816142ac565b92915050565b5f60208284031215614e2757614e266140c2565b5b5f614e3484828501614dfe565b91505092915050565b7f466f72676547656d3a20496e73756666696369656e7420616c6c6f77616e63655f8201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f614e9760218361420c565b9150614ea282614e3d565b604082019050919050565b5f6020820190508181035f830152614ec481614e8b565b9050919050565b5f606082019050614ede5f830186614301565b614eeb6020830185614301565b614ef86040830184614367565b949350505050565b5f81519050614f0e8161463f565b92915050565b5f60208284031215614f2957614f286140c2565b5b5f614f3684828501614f00565b91505092915050565b7f5061796d656e74207472616e73666572206661696c65642e00000000000000005f82015250565b5f614f7360188361420c565b9150614f7e82614f3f565b602082019050919050565b5f6020820190508181035f830152614fa081614f67565b9050919050565b7f52657665616c7320617265206e6f74206f70656e0000000000000000000000005f82015250565b5f614fdb60148361420c565b9150614fe682614fa7565b602082019050919050565b5f6020820190508181035f83015261500881614fcf565b9050919050565b7f43616e206f6e6c792052657665616c2031202d203130204e46547320617420615f8201527f2074696d65000000000000000000000000000000000000000000000000000000602082015250565b5f61506960258361420c565b91506150748261500f565b604082019050919050565b5f6020820190508181035f8301526150968161505d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f596f7520646f206e6f74206f776e2074686973204e46540000000000000000005f82015250565b5f6150fe60178361420c565b9150615109826150ca565b602082019050919050565b5f6020820190508181035f83015261512b816150f2565b9050919050565b7f546f6b656e20697320616c72656164792072657665616c6564000000000000005f82015250565b5f61516660198361420c565b915061517182615132565b602082019050919050565b5f6020820190508181035f8301526151938161515a565b9050919050565b5f81905092915050565b5f6151ae82614202565b6151b8818561519a565b93506151c881856020860161421c565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f61520860058361519a565b9150615213826151d4565b600582019050919050565b5f61522982846151a4565b9150615234826151fc565b915081905092915050565b7f6e6f207061796f757420617661696c61626c65000000000000000000000000005f82015250565b5f61527360138361420c565b915061527e8261523f565b602082019050919050565b5f6020820190508181035f8301526152a081615267565b9050919050565b5f6152b182613fb2565b91506152bc83613fb2565b92508282039050818111156152d4576152d3613fbb565b5b92915050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f61530e600f8361420c565b9150615319826152da565b602082019050919050565b5f6020820190508181035f83015261533b81615302565b9050919050565b7f43616e206f6e6c79206275726e206265747765656e203120616e642035204e465f8201527f547320617420612074696d650000000000000000000000000000000000000000602082015250565b5f61539c602c8361420c565b91506153a782615342565b604082019050919050565b5f6020820190508181035f8301526153c981615390565b9050919050565b7f5061796f7574206973206e6f7420617661696c61626c650000000000000000005f82015250565b5f61540460178361420c565b915061540f826153d0565b602082019050919050565b5f6020820190508181035f830152615431816153f8565b9050919050565b7f4552433732314275726e61626c653a2043616c6c6572206973206e6f74206f775f8201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b5f61549260238361420c565b915061549d82615438565b604082019050919050565b5f6020820190508181035f8301526154bf81615486565b9050919050565b5f82825260208201905092915050565b5f80fd5b82818337505050565b5f6154ee83856154c6565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115615521576155206154d6565b5b6020830292506155328385846154da565b82840190509392505050565b5f6040820190508181035f8301526155578185876154e3565b90506155666020830184614367565b949350505050565b7f496e76616c6964204164647265737300000000000000000000000000000000005f82015250565b5f6155a2600f8361420c565b91506155ad8261556e565b602082019050919050565b5f6020820190508181035f8301526155cf81615596565b9050919050565b7f43616e206f6e6c79205265726f6c6c2031202d203130204e46547320617420615f8201527f2074696d65000000000000000000000000000000000000000000000000000000602082015250565b5f61563060258361420c565b915061563b826155d6565b604082019050919050565b5f6020820190508181035f83015261565d81615624565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e6365000000000000000000005f82015250565b5f61569860168361420c565b91506156a382615664565b602082019050919050565b5f6020820190508181035f8301526156c58161568c565b9050919050565b7f5061796d656e74206661696c65640000000000000000000000000000000000005f82015250565b5f615700600e8361420c565b915061570b826156cc565b602082019050919050565b5f6020820190508181035f83015261572d816156f4565b9050919050565b7f43616c6c6572206973206e6f7420746865206f776e65720000000000000000005f82015250565b5f61576860178361420c565b915061577382615734565b602082019050919050565b5f6020820190508181035f8301526157958161575c565b9050919050565b7f47656d206d7573742062652072657665616c6564206265666f726520697420635f8201527f616e206265207265726f6c6c6564000000000000000000000000000000000000602082015250565b5f6157f6602e8361420c565b91506158018261579c565b604082019050919050565b5f6020820190508181035f830152615823816157ea565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61585e601f8361420c565b91506158698261582a565b602082019050919050565b5f6020820190508181035f83015261588b81615852565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026158ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826158b3565b6158f886836158b3565b95508019841693508086168417925050509392505050565b5f61592a61592561592084613fb2565b614444565b613fb2565b9050919050565b5f819050919050565b61594383615910565b61595761594f82615931565b8484546158bf565b825550505050565b5f90565b61596b61595f565b61597681848461593a565b505050565b5b818110156159995761598e5f82615963565b60018101905061597c565b5050565b601f8211156159de576159af81615892565b6159b8846158a4565b810160208510156159c7578190505b6159db6159d3856158a4565b83018261597b565b50505b505050565b5f82821c905092915050565b5f6159fe5f19846008026159e3565b1980831691505092915050565b5f615a1683836159ef565b9150826002028217905092915050565b615a2f82614202565b67ffffffffffffffff811115615a4857615a476144bc565b5b615a528254614938565b615a5d82828561599d565b5f60209050601f831160018114615a8e575f8415615a7c578287015190505b615a868582615a0b565b865550615aed565b601f198416615a9c86615892565b5f5b82811015615ac357848901518255600182019150602085019450602081019050615a9e565b86831015615ae05784890151615adc601f8916826159ef565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b615b0f615b0a82613fb2565b615af5565b82525050565b5f8160601b9050919050565b5f615b2b82615b15565b9050919050565b5f615b3c82615b21565b9050919050565b615b54615b4f8261419c565b615b32565b82525050565b5f615b648261417d565b9050919050565b5f615b7582615b21565b9050919050565b615b8d615b8882615b5a565b615b6b565b82525050565b5f615b9e8289615afe565b602082019150615bae8288615b43565b601482019150615bbe8287615afe565b602082019150615bce8286615afe565b602082019150615bde8285615b7c565b601482019150615bee8284615afe565b602082019150819050979650505050505050565b5f615c0c82613fb2565b9150615c1783613fb2565b925082615c2757615c26614029565b5b828206905092915050565b5f60ff82169050919050565b5f615c4882615c32565b9150615c5383615c32565b9250828201905060ff811115615c6c57615c6b613fbb565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f615c9682615c72565b615ca08185615c7c565b9350615cb081856020860161421c565b615cb981614244565b840191505092915050565b5f608082019050615cd75f830187614301565b615ce46020830186614301565b615cf16040830185614367565b8181036060830152615d038184615c8c565b905095945050505050565b5f81519050615d1c816140f5565b92915050565b5f60208284031215615d3757615d366140c2565b5b5f615d4484828501615d0e565b91505092915050565b5f615d5882856151a4565b9150615d6482846151a4565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfe68747470733a2f2f6261667962656961756b6f363733726e78726b67736661337874686833777a6e6e71687176727978326971796d377163627367626e6c6433366b752e697066732e6e667473746f726167652e6c696e6b2fa2646970667358221220ee0885b67185cdacb846987813b16324bf8ef7f3a1a764ba5043e815ad836f3164736f6c634300081400330000000000000000000000009608ff1823bebad2a30201fabc60ce5e91f61dab