Loading
[ { "inputs": [ { "internalType": "string", "name": "__name", "type": "string" }, { "internalType": "string", "name": "__symbol", "type": "string" }, { "internalType": "address", "name": "__owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccountBalanceOverflow", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "InsufficientPrivilege", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" }, { "internalType": "bytes32", "name": "traitValue", "type": "bytes32" } ], "name": "InvalidTraitValue", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" }, { "internalType": "bytes32", "name": "traitValue", "type": "bytes32" } ], "name": "InvalidTraitValue", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "NotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TokenAlreadyExists", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TraitCannotBeZeroValueHash", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" } ], "name": "TraitDoesNotExist", "type": "error" }, { "inputs": [], "name": "TraitIsRequired", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" } ], "name": "TraitNotSet", "type": "error" }, { "inputs": [], "name": "TraitValueUnchanged", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UnauthorizedMinter", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "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": "isApproved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "PreapprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "uri", "type": "string" } ], "name": "TraitLabelsURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "traitKey", "type": "bytes32" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "trait", "type": "bytes32" } ], "name": "TraitUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "traitKeyPattern", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" } ], "name": "TraitUpdatedBulkConsecutive", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "traitKeyPattern", "type": "bytes32" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "TraitUpdatedBulkList", "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": "id", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "currentId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "deleteTrait", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getCustomEditorAt", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCustomEditors", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCustomEditorsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getShipIsIn", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalTraitKeys", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getTraitKeyAt", "outputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTraitKeys", "outputs": [ { "internalType": "bytes32[]", "name": "traitKeys", "type": "bytes32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTraitLabelsURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTraitValue", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "getTraitValues", "outputs": [ { "internalType": "bytes32[]", "name": "traitValues", "type": "bytes32[]" } ], "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": "address", "name": "editor", "type": "address" } ], "name": "isCustomEditor", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ownershipHandoverValidFor", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "isApproved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bool", "name": "_shipIsIn", "type": "bool" } ], "name": "setShipIsIn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes32", "name": "trait", "type": "bytes32" } ], "name": "setTrait", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" }, { "components": [ { "internalType": "string", "name": "fullTraitKey", "type": "string" }, { "internalType": "string", "name": "traitLabel", "type": "string" }, { "internalType": "string[]", "name": "acceptableValues", "type": "string[]" }, { "components": [ { "internalType": "bytes32", "name": "traitValue", "type": "bytes32" }, { "internalType": "string", "name": "fullTraitValue", "type": "string" } ], "internalType": "struct FullTraitValue[]", "name": "fullTraitValues", "type": "tuple[]" }, { "internalType": "enum DisplayType", "name": "displayType", "type": "uint8" }, { "internalType": "Editors", "name": "editors", "type": "uint8" }, { "internalType": "bool", "name": "required", "type": "bool" } ], "internalType": "struct TraitLabel", "name": "_traitLabel", "type": "tuple" } ], "name": "setTraitLabel", "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": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "traitKey", "type": "bytes32" } ], "name": "traitLabelStorage", "outputs": [ { "internalType": "Editors", "name": "allowedEditors", "type": "uint8" }, { "internalType": "bool", "name": "required", "type": "bool" }, { "internalType": "bool", "name": "valuesRequireValidation", "type": "bool" }, { "internalType": "StoredTraitLabel", "name": "storedLabel", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "editor", "type": "address" }, { "internalType": "bool", "name": "insert", "type": "bool" } ], "name": "updateCustomEditor", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b50604051620069c6380380620069c6833981016040819052620000349162000603565b82826200004133620002e6565b604051600190731e0049783f008a0085193e00003d00cd54003c71907f48758afb8d66456bd71d7a30839977750a8933739d419fbedce30dee07b0db3790600090a360076200009183826200071f565b506008620000a082826200071f565b5060079150620000b3905084826200071f565b506008620000c283826200071f565b50620000e56001600160a01b03821615620000de5781620002e6565b33620002e6565b60408051600280825260608201909252600091816020015b6060815260200190600190039081620000fd579050509050604051806040016040528060048152602001635472756560e01b81525081600081518110620001485762000148620007eb565b60200260200101819052506040518060400160405280600581526020016446616c736560d81b81525081600181518110620001875762000187620007eb565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050600281600081518110620001ce57620001ce620007eb565b60200260200101906004811115620001ea57620001ea62000801565b9081600481111562000200576200020062000801565b9052506040805161010081018252600060e08201818152825282518084018452600a81526929b434b81024b99024b760b11b602080830191909152808401919091528284018690528351828152908101909352620002db927f646f636b6d61737465722e736869704973496e000000000000000000000000009291606083019190620002b0565b604080518082019091526000815260606020820152815260200190600190039081620002875790505b50815260200160008152602001620002c88562000322565b60ff168152600060209091015262000383565b5050505050620009cb565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b805160009081805b828110156200037b57848181518110620003485762000348620007eb565b6020026020010151600481111562000364576200036462000801565b60ff166001901b821791508060010190506200032a565b509392505050565b620003906000836200045b565b5060405180608001604052808260a0015160ff1681526020018260c001511515815260200160008360400151511115158152602001620003d6836200047260201b60201c565b6001600160a01b039081169091526000938452600460209081526040948590208351815492850151968501516060909501519093166301000000026301000000600160b81b031994151562010000029490941662010000600160b81b03199615156101000261ffff1990931660ff909416939093179190911794909416171790915550565b6000620004698383620004a1565b90505b92915050565b60006200046c826040516020016200048b9190620008d5565b60408051601f19818403018152919052620004f3565b6000818152600183016020526040812054620004ea575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200046c565b5060006200046c565b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f092505081620005305763301164256000526004601cfd5b90915290565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620005695781810151838201526020016200054f565b50506000910152565b600082601f8301126200058457600080fd5b81516001600160401b0380821115620005a157620005a162000536565b604051601f8301601f19908116603f01168101908282118183101715620005cc57620005cc62000536565b81604052838152866020858801011115620005e657600080fd5b620005f98460208301602089016200054c565b9695505050505050565b6000806000606084860312156200061957600080fd5b83516001600160401b03808211156200063157600080fd5b6200063f8783880162000572565b945060208601519150808211156200065657600080fd5b50620006658682870162000572565b604086015190935090506001600160a01b03811681146200068557600080fd5b809150509250925092565b600181811c90821680620006a557607f821691505b602082108103620006c657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071a57600081815260208120601f850160051c81016020861015620006f55750805b601f850160051c820191505b81811015620007165782815560010162000701565b5050505b505050565b81516001600160401b038111156200073b576200073b62000536565b62000753816200074c845462000690565b84620006cc565b602080601f8311600181146200078b5760008415620007725750858301515b600019600386901b1c1916600185901b17855562000716565b600085815260208120601f198616915b82811015620007bc578886015182559484019460019091019084016200079b565b5085821015620007db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60008151808452620008318160208601602086016200054c565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015620008a55782840389528151805185528501516040868601819052620008908187018362000817565b9a87019a955050509084019060010162000863565b5091979650505050505050565b60068110620008d157634e487b7160e01b600052602160045260246000fd5b9052565b60006020808352835160e082850152620008f461010085018262000817565b905081850151601f198086840301604087015262000913838362000817565b60408801518782038301606089015280518083529194508501925084840190600581901b8501860160005b828110156200096e57848783030184526200095b82875162000817565b958801959388019391506001016200093e565b5060608a01519650838982030160808a01526200098c818862000845565b96505050505050506080840151620009a860a0850182620008b2565b5060a084015160ff811660c08501525060c084015180151560e08501526200037b565b615feb80620009db6000396000f3fe6080604052600436106102bb5760003560e01c80638e31261a1161016e578063d7682b5a116100cb578063ef9c9fe01161007f578063f1c94c5c11610064578063f1c94c5c1461075d578063f2fde38b146107fd578063fee81cf41461081057600080fd5b8063ef9c9fe01461072a578063f04e283e1461074a57600080fd5b8063dc878a15116100b0578063dc878a15146106d4578063e00dd161146106f4578063e985e9c51461070a57600080fd5b8063d7682b5a1461069f578063d772e06d146106b457600080fd5b8063c42294e311610122578063cc84c1b711610107578063cc84c1b71461063f578063ce914f0214610661578063d7533f021461068157600080fd5b8063c42294e31461060a578063c87b56dd1461061f57600080fd5b8063a22cb46511610153578063a22cb465146105b7578063ab7d7d7d146105d7578063b88d4fde146105f757600080fd5b80638e31261a1461058257806395d89b41146105a257600080fd5b806354d1f13d1161021c5780636a627842116101d0578063715018a6116101b5578063715018a6146105265780638979922e1461052e5780638da5cb5b1461054e57600080fd5b80636a627842146104e657806370a082311461050657600080fd5b80635e24df27116102015780635e24df27146104915780636352211e146104a6578063697d3c7a146104c657600080fd5b806354d1f13d1461040f5780635e0719541461041757600080fd5b806325692962116102735780633cb2904d116102585780633cb2904d146103ac57806342842e0e146103da578063459abcbd146103ed57600080fd5b8063256929621461038457806333e5b4671461038c57600080fd5b8063081812fc116102a4578063081812fc14610317578063095ea7b31461035c57806323b872dd1461037157600080fd5b806301ffc9a7146102c057806306fdde03146102f5575b600080fd5b3480156102cc57600080fd5b506102e06102db366004614904565b610843565b60405190151581526020015b60405180910390f35b34801561030157600080fd5b5061030a6108bc565b6040516102ec91906149b4565b34801561032357600080fd5b506103376103323660046149c7565b61094e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ec565b61036f61036a366004614a04565b6109b3565b005b61036f61037f366004614a2e565b6109c2565b61036f6109db565b34801561039857600080fd5b5061036f6103a7366004614a6a565b610a2b565b3480156103b857600080fd5b506103cc6103c7366004614ab8565b610a45565b6040519081526020016102ec565b61036f6103e8366004614a2e565b610add565b3480156103f957600080fd5b50610402610b0a565b6040516102ec9190614ada565b61036f610b60565b34801561042357600080fd5b506102e06104323660046149c7565b60009081526002602090815260408083207f646f636b6d61737465722e736869704973496e0000000000000000000000000084529091529020547f54727565000000000000000000000000000000000000000000000000000000001490565b34801561049d57600080fd5b506103cc610b9c565b3480156104b257600080fd5b506103376104c13660046149c7565b610bad565b3480156104d257600080fd5b5061036f6104e1366004614b1e565b610c0d565b3480156104f257600080fd5b5061036f610501366004614b4a565b610ceb565b34801561051257600080fd5b506103cc610521366004614b4a565b610da7565b61036f610df7565b34801561053a57600080fd5b5061036f610549366004614b7e565b610e0b565b34801561055a57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610337565b34801561058e57600080fd5b5061033761059d3660046149c7565b610e81565b3480156105ae57600080fd5b5061030a610e8e565b3480156105c357600080fd5b5061036f6105d2366004614ba3565b610e9d565b3480156105e357600080fd5b5061036f6105f2366004614ba3565b610f16565b61036f610605366004614bcf565b610f3a565b34801561061657600080fd5b5061030a610f8e565b34801561062b57600080fd5b5061030a61063a3660046149c7565b610fa0565b34801561064b57600080fd5b5061065461123b565b6040516102ec9190614c6a565b34801561066d57600080fd5b5061036f61067c366004614ab8565b611247565b34801561068d57600080fd5b506040516202a30081526020016102ec565b3480156106ab57600080fd5b506103cc611342565b3480156106c057600080fd5b506104026106cf366004614cb8565b61134e565b3480156106e057600080fd5b506103cc6106ef3660046149c7565b611404565b34801561070057600080fd5b506103cc60095481565b34801561071657600080fd5b506102e0610725366004614d37565b611410565b34801561073657600080fd5b506102e0610745366004614b4a565b611477565b61036f610758366004614b4a565b611484565b34801561076957600080fd5b506107bd6107783660046149c7565b60046020526000908152604090205460ff80821691610100810482169162010000820416906301000000900473ffffffffffffffffffffffffffffffffffffffff1684565b6040805160ff909516855292151560208501529015159183019190915273ffffffffffffffffffffffffffffffffffffffff1660608201526080016102ec565b61036f61080b366004614b4a565b6114c1565b34801561081c57600080fd5b506103cc61082b366004614b4a565b63389a75e1600c908152600091909152602090205490565b60007f4f377e34000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108b657506108b6826301ffc9a760e09190911c9081146380ac58cd821417635b5e139f9091141790565b92915050565b6060600780546108cb90614d6a565b80601f01602080910402602001604051908101604052809291908181526020018280546108f790614d6a565b80156109445780601f1061091957610100808354040283529160200191610944565b820191906000526020600020905b81548152906001019060200180831161092757829003601f168201915b5050505050905090565b60008181527f7d8825530a5a2e7a000000000000000000000000000000000000000000000000601c526020812082018201805473ffffffffffffffffffffffffffffffffffffffff166109a95763ceea21b66000526004601cfd5b6001015492915050565b6109be3383836114e8565b5050565b6109d66109ce8461159e565b8484846115f9565b505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610a33611757565b6109be82610a40836150e5565b61178d565b600081815260026020908152604080832085845290915281205480610aa5576040517f33b3807200000000000000000000000000000000000000000000000000000000815260048101849052602481018590526044015b60405180910390fd5b7ff23a941d20a74d87b3e96235752123ecdf7c32b55a0be68ee4a4bf417f3b0dcc8103610ad65750600090506108b6565b9392505050565b610ae88383836109c2565b813b156109d6576109d6838383604051806020016040528060008152506118b0565b60008054604080516020808402820181019092528281526060939092909183018282801561094457602002820191906000526020600020905b815481526020019060010190808311610b43575050505050905090565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6000610ba86000611942565b905090565b60008181527f7d8825530a5a2e7a000000000000000000000000000000000000000000000000601c5260209020810181015473ffffffffffffffffffffffffffffffffffffffff1680610c085763ceea21b66000526004601cfd5b919050565b6000838152600460209081526040918290208251608081018452905460ff8082168352610100820481161515938301939093526201000081049092161515928101929092526301000000900473ffffffffffffffffffffffffffffffffffffffff166060820181905280610cb0576040517fa0614c4100000000000000000000000000000000000000000000000000000000815260048101869052602401610a9c565b8151610cbc908561194c565b816040015115610cd957610cd9610cd282611a31565b8685611a5a565b610ce4858585611b46565b5050505050565b3360981c15801590610d4a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610d81576040517f955c501b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009805460010190819055610d97908290611c8c565b610da46009546000610e0b565b50565b600081610dbc57638f4eb6046000526004601cfd5b7f7d8825530a5a2e7a000000000000000000000000000000000000000000000000601c528160005263ffffffff601c600c2054169050919050565b610dff611757565b610e096000611d5c565b565b6109be7f646f636b6d61737465722e736869704973496e000000000000000000000000008383610e5b577f46616c7365000000000000000000000000000000000000000000000000000000611b46565b7f5472756500000000000000000000000000000000000000000000000000000000611b46565b60006108b6600583611dc2565b6060600880546108cb90614d6a565b8015159050731e0049783f008a0085193e00003d00cd54003c718214818115168215821617905082601c52670a5a2e7a0000000060085233600052806030600c205550806000528160601b60601c337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206000a35050565b610f1e611757565b8015610f2f576109d6600583611dce565b6109d6600583611df0565b610f458585856109c2565b833b15610ce457610ce485858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118b092505050565b6060610ba8610f9b611e12565b611e33565b60606000610fad83611e4e565b90506000610fba84611f5f565b9050600081518351610fcc91906151fe565b67ffffffffffffffff811115610fe457610fe4614dbd565b60405190808252806020026020018201604052801561101757816020015b60608152602001906001900390816110025790505b50905060005b83518110156110705783818151811061103857611038615211565b602002602001015182828151811061105257611052615211565b6020026020010181905250808061106890615240565b91505061101d565b5060005b82518110156110d35782818151811061108f5761108f615211565b6020026020010151828286516110a591906151fe565b815181106110b5576110b5615211565b602002602001018190525080806110cb90615240565b915050611074565b5061123261122d6111406040518060400160405280600481526020017f6e616d650000000000000000000000000000000000000000000000000000000081525061111c89612081565b60405160200161112c9190615278565b6040516020818303038152906040526120e4565b6111926040518060400160405280600b81526020017f6465736372697074696f6e0000000000000000000000000000000000000000008152506111828a612081565b60405160200161112c91906152bd565b6111e16040518060400160405280600581526020017f696d6167650000000000000000000000000000000000000000000000000000008152506111dc6111d78c612120565b61287e565b6120e4565b6112286040518060400160405280600a81526020017f6174747269627574657300000000000000000000000000000000000000000000815250611223886128c9565b6128dc565b6128f9565b6129b1565b95945050505050565b6060610ba860056129c4565b6000828152600460209081526040918290208251608081018452905460ff8082168352610100820481161515938301939093526201000081049092161515928101929092526301000000900473ffffffffffffffffffffffffffffffffffffffff1660608201819052806112ea576040517fa0614c4100000000000000000000000000000000000000000000000000000000815260048101859052602401610a9c565b81516112f6908461194c565b816020015115611332576040517fb963fa3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133c84846129d1565b50505050565b6000610ba86005611942565b60608160008167ffffffffffffffff81111561136c5761136c614dbd565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b50905060005b828110156113fa5760008686838181106113b7576113b7615211565b9050602002013590506113ca8882610a45565b8383815181106113dc576113dc615211565b602090810291909101015250806113f281615240565b91505061139b565b5095945050505050565b60006108b68183611dc2565b6000806114338484601c52670a5a2e7a000000006008526000526030600c205490565b905073ffffffffffffffffffffffffffffffffffffffff8316731e0049783f008a0085193e00003d00cd54003c711461146c578061146f565b80155b949350505050565b60006108b6600583612a76565b61148c611757565b63389a75e1600c52806000526020600c2080544211156114b457636f5e88186000526004601cfd5b60009055610da481611d5c565b6114c9611757565b8060601b6114df57637448fbae6000526004601cfd5b610da481611d5c565b60001960601c8281169250838116935081600052837f7d8825530a5a2e7a00000000000000000000000000000000000000000000000017601c52602060002082018201805482169150816115445763ceea21b66000526004601cfd5b81851485151761156a57816000526030600c205461156a57634b6e7f186000526004601cfd5b6001018390558183827f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a450505050565b60007fffffffffffffffffffffffffe1ffb687c0ff75ff7ae6c1ffffc2ff32abffc38f33016115f2576115e582731e0049783f008a0085193e00003d00cd54003c71611410565b156115f257506000919050565b5033919050565b600081815273ffffffffffffffffffffffffffffffffffffffff9485167f7d8825530a5a2e7a0000000000000000000000000000000000000000000000008117601c52602090912082018201805491959485169493841693821691828614830261167e57826116705763ceea21b66000526004601cfd5b63a11481006000526004601cfd5b846116915763ea553b346000526004601cfd5b8560005281600101549250828714868814178715176116c2576030600c20546116c257634b6e7f186000526004601cfd5b82156116d057600082600101555b85851818905550601c600c81812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055600084905220805460010163ffffffff8116611728576301336cea6000526004601cfd5b90558082847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a461133c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610e09576382b429006000526004601cfd5b611798600083612aa5565b5060405180608001604052808260a0015160ff1681526020018260c0015115158152602001600083604001515111151581526020016117d683612ab1565b73ffffffffffffffffffffffffffffffffffffffff9081169091526000938452600460209081526040948590208351815492850151968501516060909501519093166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff9415156201000002949094167fffffffffffffffffff000000000000000000000000000000000000000000ffff961515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090931660ff909416939093179190911794909416171790915550565b60405163150b7a028082523360208301528560601b60601c604083015283606083015260808083015282518060a084015280156118f7578060c08401826020870160045afa505b60208360a48301601c860160008a5af1611920573d1561191b573d6000803e3d6000fd5b600083525b508060e01b82511461193a5763d1a57ed66000526004601cfd5b505050505050565b60006108b6825490565b611957826000612adb565b15611960575050565b61196b826002612adb565b156119835761197a8133612af7565b15611983575050565b61198e826003612adb565b156119a75761199e600533612a76565b156119a7575050565b6119b2826004612adb565b156119ff57336119e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275490565b73ffffffffffffffffffffffffffffffffffffffff16036119ff575050565b6040517fe2c1813000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a396148b6565b6000611a4483612b37565b905080806020019051810190610ad691906154f0565b604083015180516080850151811561193a576000611a788583612b81565b9050600081604051602001611a8d91906155fc565b60405160208183030381529060405280519060200120905060005b84811015611b0957858181518110611ac257611ac2615211565b6020026020010151604051602001611ada91906155fc565b604051602081830303815290604052805190602001208203611b0157505050505050505050565b600101611aa8565b506040517f43fda7af0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610a9c565b600082815260026020908152604080832086845290915290205481611b8d577ff23a941d20a74d87b3e96235752123ecdf7c32b55a0be68ee4a4bf417f3b0dcc9150611bf0565b7ff23a941d20a74d87b3e96235752123ecdf7c32b55a0be68ee4a4bf417f3b0dcc8203611bf0576040517f43fda7af0000000000000000000000000000000000000000000000000000000081526004810185905260248101839052604401610a9c565b818103611c29576040517fc37ca37500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c34600085612aa5565b5060008381526002602090815260408083208784528252918290208490559051838152849186917f8386f3b08e49490d0c5a9d2c401c091f13b01a17d75ce4a2f0f8f923b410ff7d910160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff9091169081611cb85763ea553b346000526004601cfd5b806000527f7d8825530a5a2e7a000000000000000000000000000000000000000000000000601c5260206000208101810180548060601b15611d025763c991cbb16000526004601cfd5b831790556000829052601c600c20805460010163ffffffff8116611d2e576301336cea6000526004601cfd5b9055808260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a45050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6000610ad68383612bee565b6000610ad68373ffffffffffffffffffffffffffffffffffffffff8416612c18565b6000610ad68373ffffffffffffffffffffffffffffffffffffffff8416612c67565b60606000611e2060006129c4565b9050611e2d600482612d5a565b91505090565b60606108b68260405180602001604052806000815250612e86565b60606108b6611e9c6040518060400160405280600681526020017f536c697020230000000000000000000000000000000000000000000000000000815250611e9585612081565b6001612ec8565b60408051808201909152600981527f446f636b205369646500000000000000000000000000000000000000000000006020820152611f5a90611edf600287615618565b15611f1f576040518060400160405280600581526020017f536f757468000000000000000000000000000000000000000000000000000000815250612f95565b6040518060400160405280600581526020017f4e6f727468000000000000000000000000000000000000000000000000000000815250612f95565b61301b565b60606000611f6d60006129c4565b805190915060008167ffffffffffffffff811115611f8d57611f8d614dbd565b604051908082528060200260200182016040528015611fc057816020015b6060815260200190600190039081611fab5790505b5090506000805b83811015612076576000858281518110611fe357611fe3615211565b60209081029190910181015160008a81526002835260408082208383529093529190912054909150801561206c577ff23a941d20a74d87b3e96235752123ecdf7c32b55a0be68ee4a4bf417f3b0dcc810361203c575060005b61204860048383613091565b85858151811061205a5761205a615211565b60200260200101819052508360010193505b5050600101611fc7565b508152949350505050565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a90048061209c575b50508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b60606120ef836131a3565b6120f8836131a3565b604051602001612109929190615653565b604051602081830303815290604052905092915050565b606060006040518060400160405280600381526020017f35303000000000000000000000000000000000000000000000000000000000008152509050610ad661219e6040518060400160405280600581526020017f7769647468000000000000000000000000000000000000000000000000000000815250836132a9565b6121dd6040518060400160405280600681526020017f6865696768740000000000000000000000000000000000000000000000000000815250846132a9565b6040516020016121ee9291906156dd565b6040516020818303038152906040526122a96040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525085866040518060400160405280600781526020017f23616464386536000000000000000000000000000000000000000000000000008152506132be565b6123bf6040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f31373500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f33303000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f31373500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f23613035323264000000000000000000000000000000000000000000000000008152506132be565b6124d56040518060400160405280600381526020017f31323000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f32353000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f32363000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f38300000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f23616464386536000000000000000000000000000000000000000000000000008152506132be565b60008881526002602090815260408083207f646f636b6d61737465722e736869704973496e0000000000000000000000000084529091529020547f54727565000000000000000000000000000000000000000000000000000000001461254a5760405180602001604052806000815250612552565b612552613430565b6126336040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f3333300000000000000000000000000000000000000000000000000000000000815250896040518060400160405280600381526020017f31373000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f23303030303862000000000000000000000000000000000000000000000000008152506132be565b6128556126aa6040518060400160405280600181526020017f78000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f35302500000000000000000000000000000000000000000000000000000000008152506132a9565b61271e6040518060400160405280600181526020017f79000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f32323500000000000000000000000000000000000000000000000000000000008152506132a9565b6127926040518060400160405280600b81526020017f746578742d616e63686f720000000000000000000000000000000000000000008152506040518060400160405280600681526020017f6d6964646c6500000000000000000000000000000000000000000000000000008152506132a9565b6128066040518060400160405280600981526020017f666f6e742d73697a6500000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f34380000000000000000000000000000000000000000000000000000000000008152506132a9565b604051602001612819949392919061570c565b6040516020818303038152906040526128318c612081565b6040516020016128419190615278565b60405160208183030381529060405261387e565b60405160200161286a96959493929190615763565b6040516020818303038152906040526138c0565b60606108b661288c836138ce565b6040518060400160405280600681526020017f626173653634000000000000000000000000000000000000000000000000000081525060006138dc565b60606108b66128d783613948565b613989565b60606128e7836131a3565b826040516020016121099291906157e2565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081612915579050509050858160008151811061294057612940615211565b6020026020010181905250848160018151811061295f5761295f615211565b6020026020010181905250838160028151811061297e5761297e615211565b6020026020010181905250828160038151811061299d5761299d615211565b602090810291909101015295945050505050565b60606108b66129bf83613948565b6139b2565b60606000610ad6836139c5565b600081815260026020908152604080832085845290915290205480612a22576040517fc37ca37500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600260209081526040808320868452825280832083905551918252839185917f8386f3b08e49490d0c5a9d2c401c091f13b01a17d75ce4a2f0f8f923b410ff7d910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610ad6565b6000610ad68383612c18565b60006108b682604051602001612ac79190615933565b604051602081830303815290604052613a21565b6000612ae682613a63565b831660ff1660001415905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff16612b1984610bad565b73ffffffffffffffffffffffffffffffffffffffff16149392505050565b6060813b80612b4e576311052bb46000526004601cfd5b600181039050604051915061ffe0603f820116820160405280825260008160208401015280600160208401853c50919050565b60606001826005811115612b9757612b976158c9565b1480612bb457506004826005811115612bb257612bb26158c9565b145b80612bd057506003826005811115612bce57612bce6158c9565b145b15612be557612bde83612081565b90506108b6565b612bde83613a81565b6000826000018281548110612c0557612c05615211565b9060005260206000200154905092915050565b6000818152600183016020526040812054612c5f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108b6565b5060006108b6565b60008181526001830160205260408120548015612d50576000612c8b600183615a3a565b8554909150600090612c9f90600190615a3a565b9050818114612d04576000866000018281548110612cbf57612cbf615211565b9060005260206000200154905080876000018481548110612ce257612ce2615211565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612d1557612d15615a4d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108b6565b60009150506108b6565b60606000825167ffffffffffffffff811115612d7857612d78614dbd565b604051908082528060200260200182016040528015612dab57816020015b6060815260200190600190039081612d965790505b50905060005b8351811015612e7d576000848281518110612dce57612dce615211565b602090810291909101810151600081815288835260408082208151608081018352905460ff808216835261010082048116151596830196909652620100008104909516151591810191909152630100000090930473ffffffffffffffffffffffffffffffffffffffff16606084015290925090612e4a90613aaa565b9050612e568183613abf565b848481518110612e6857612e68615211565b60209081029190910101525050600101612db1565b611232826128c9565b6060610ad66040518060400160405280601081526020017f6170706c69636174696f6e2f6a736f6e000000000000000000000000000000008152508385613cba565b606061146f61122d612f0f6040518060400160405280600a81526020017f74726169745f7479706500000000000000000000000000000000000000000000815250876120e4565b612f4e6040518060400160405280600581526020017f76616c7565000000000000000000000000000000000000000000000000000000815250876120e4565b612f906040518060400160405280600c81526020017f646973706c61795f7479706500000000000000000000000000000000000000008152506111dc88613d27565b613efc565b6060610ad661122d612fdc6040518060400160405280600a81526020017f74726169745f7479706500000000000000000000000000000000000000000000815250866120e4565b611f5a6040518060400160405280600581526020017f76616c7565000000000000000000000000000000000000000000000000000000815250866120e4565b604080516002808252606082810190935260009190816020015b6060815260200190600190039081613035579050509050838160008151811061306057613060615211565b6020026020010181905250828160018151811061307f5761307f615211565b60209081029190910101529392505050565b6000828152602084815260408083208151608081018352815460ff808216835261010082048116151595830195909552620100008104909416151592810192909252630100000090920473ffffffffffffffffffffffffffffffffffffffff16606080830191909152929061310590613aaa565b9050606081606001515160001461316b5760608201515160005b818110156131685760008460600151828151811061313f5761313f615211565b602002602001015190508781600001510361315f57602001519250613168565b5060010161311f565b50505b805160000361318557613182858360800151612b81565b90505b6131988260200151828460800151612ec8565b979650505050505050565b80516040517b5c75303030303031323334353637383961626364656662746e0066726015526020019082016b1000000000000004000000005b81841461326c5760018401935060ff8451166020811061322557816001821b1661320f57808453600184019350506131dc565b605c8453806001850153600284019350506131dc565b6137006001821b16613252578060041c51601d53600f811651601e536019518452600684019350506131dc565b605c845360088101516001850153506002830192506131dc565b505060008152604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815260209092019052919050565b60608282604051602001612109929190615a7c565b60606134266133026040518060400160405280600181526020017f7800000000000000000000000000000000000000000000000000000000000000815250886132a9565b6133416040518060400160405280600181526020017f7900000000000000000000000000000000000000000000000000000000000000815250886132a9565b6133806040518060400160405280600581526020017f7769647468000000000000000000000000000000000000000000000000000000815250886132a9565b6133bf6040518060400160405280600681526020017f6865696768740000000000000000000000000000000000000000000000000000815250886132a9565b6133fe6040518060400160405280600481526020017f66696c6c00000000000000000000000000000000000000000000000000000000815250886132a9565b604051602001613412959493929190615b24565b604051602081830303815290604052613f94565b9695505050505050565b60606135486040518060400160405280600381526020017f34303500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f31323500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f31373500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f23326634663466000000000000000000000000000000000000000000000000008152506132be565b6137426135bf6040518060400160405280600281526020017f63780000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f34383000000000000000000000000000000000000000000000000000000000008152506132a9565b6136336040518060400160405280600281526020017f63790000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f32373500000000000000000000000000000000000000000000000000000000008152506132a9565b6136a76040518060400160405280600181526020017f72000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f38300000000000000000000000000000000000000000000000000000000000008152506132a9565b61371b6040518060400160405280600481526020017f66696c6c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f23326634663466000000000000000000000000000000000000000000000000008152506132a9565b60405160200161372e949392919061570c565b604051602081830303815290604052613fd5565b6138586040518060400160405280600381526020017f34303500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f31353000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f23383030303030000000000000000000000000000000000000000000000000008152506132be565b60405160200161386a93929190615b8f565b604051602081830303815290604052905090565b6060610ad66040518060400160405280600481526020017f74657874000000000000000000000000000000000000000000000000000000008152508484614016565b6060610ad66001848461402f565b60606108b6826000806140d6565b606060006139206040518060400160405280600d81526020017f696d6167652f7376672b786d6c000000000000000000000000000000000000008152508587613cba565b9050821561393957613931816131a3565b915050610ad6565b9050610ad6565b509392505050565b60606108b6826040518060400160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152506141d8565b60608160405160200161399c9190615bd2565b6040516020818303038152906040529050919050565b60608160405160200161399c9190615c3e565b606081600001805480602002602001604051908101604052809291908181526020018280548015613a1557602002820191906000526020600020905b815481526020019060010190808311613a01575b50505050509050919050565b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f092505081613a5d5763301164256000526004601cfd5b90915290565b6000816004811115613a7757613a776158c9565b6001901b92915050565b60606000613a8e83614277565b6040805180820190915290815260208101939093525090919050565b613ab26148b6565b6108b68260600151611a31565b6060610ad661122d613b096040518060400160405280600881526020017f74726169744b65790000000000000000000000000000000000000000000000008152506111dc86613a81565b60408051808201909152600c81527f66756c6c54726169744b657900000000000000000000000000000000000000006020820152865151613b5a919015613b515787516120e4565b6111dc87613a81565b613b9d6040518060400160405280600a81526020017f74726169744c6162656c0000000000000000000000000000000000000000000081525088602001516120e4565b613be36040518060400160405280601081526020017f61636365707461626c6556616c756573000000000000000000000000000000008152506112238a604001516142da565b613c296040518060400160405280600f81526020017f66756c6c547261697456616c75657300000000000000000000000000000000008152506112238b606001516142ed565b613c6f6040518060400160405280600b81526020017f646973706c6179547970650000000000000000000000000000000000000000008152506111dc8c60800151613d27565b613cb56040518060400160405280600781526020017f656469746f7273000000000000000000000000000000000000000000000000008152506112238d60a0015161439e565b6143b1565b6060836000845111613cdb5760405180602001604052806000815250613cfc565b83604051602001613cec9190615caa565b6040516020818303038152906040525b83604051602001613d0f93929190615ceb565b60405160208183030381529060405290509392505050565b60606000826005811115613d3d57613d3d6158c9565b03613d7b57505060408051808201909152600681527f737472696e670000000000000000000000000000000000000000000000000000602082015290565b6001826005811115613d8f57613d8f6158c9565b03613dcd57505060408051808201909152600681527f6e756d6265720000000000000000000000000000000000000000000000000000602082015290565b6002826005811115613de157613de16158c9565b03613e1f57505060408051808201909152600481527f6461746500000000000000000000000000000000000000000000000000000000602082015290565b6004826005811115613e3357613e336158c9565b03613e7157505060408051808201909152600c81527f626f6f73745f6e756d6265720000000000000000000000000000000000000000602082015290565b6003826005811115613e8557613e856158c9565b03613ec357505060408051808201909152600d81527f626f6f73745f70657263656e7400000000000000000000000000000000000000602082015290565b505060408051808201909152600681527f68696464656e0000000000000000000000000000000000000000000000000000602082015290565b6040805160038082526080820190925260609160009190816020015b6060815260200190600190039081613f185790505090508481600081518110613f4357613f43615211565b60200260200101819052508381600181518110613f6257613f62615211565b60200260200101819052508281600281518110613f8157613f81615211565b6020908102919091010152949350505050565b60606108b66040518060400160405280600481526020017f7265637400000000000000000000000000000000000000000000000000000000815250836144ca565b60606108b66040518060400160405280600681526020017f636972636c650000000000000000000000000000000000000000000000000000815250836144ca565b606083838386604051602001613d0f9493929190615d83565b60608315614096576139396040518060400160405280600381526020017f7376670000000000000000000000000000000000000000000000000000000000815250846040516020016140819190615e8b565b60405160208183030381529060405284614016565b6139396040518060400160405280600381526020017f73766700000000000000000000000000000000000000000000000000000000008152508484614016565b606083518015613940576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526102308515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f03603f52602083018181015b6003880197508751603f8160121c1651600053603f81600c1c1651600153603f8160061c1651600253603f811651600353506000518252600482019150808210614146576020016040527f3d3d00000000000000000000000000000000000000000000000000000000000060038406600204808303919091526000861515909102918290035290038252509392505050565b606082516000036141f857506040805160208101909152600081526108b6565b60008360008151811061420d5761420d615211565b602002602001015190506000600190505b845181101561394057818486838151811061423b5761423b615211565b602002602001015160405160200161425593929190615b8f565b60405160208183030381529060405291508061427090615240565b905061421e565b6000805b60208110156142d15782816020811061429657614296615211565b1a60f81b7fff00000000000000000000000000000000000000000000000000000000000000166000036142c95792915050565b60010161427b565b50602092915050565b60606108b66142e8836144df565b6128c9565b60606000825167ffffffffffffffff81111561430b5761430b614dbd565b60405190808252806020026020018201604052801561433e57816020015b60608152602001906001900390816143295790505b50905060005b83518110156143945761436f84828151811061436257614362615211565b602002602001015161458d565b82828151811061438157614381615211565b6020908102919091010152600101614344565b50610ad6816128c9565b60606108b66143ac83614621565b614749565b604080516007808252610100820190925260609160009190816020015b60608152602001906001900390816143ce57905050905088816000815181106143f9576143f9615211565b6020026020010181905250878160018151811061441857614418615211565b6020026020010181905250868160028151811061443757614437615211565b6020026020010181905250858160038151811061445657614456615211565b6020026020010181905250848160048151811061447557614475615211565b6020026020010181905250838160058151811061449457614494615211565b602002602001018190525082816006815181106144b3576144b3615211565b602090810291909101015298975050505050505050565b60608282604051602001612109929190615ef6565b60606000825167ffffffffffffffff8111156144fd576144fd614dbd565b60405190808252806020026020018201604052801561453057816020015b606081526020019060019003908161451b5790505b50905060005b83518110156145865761456184828151811061455457614554615211565b6020026020010151614804565b82828151811061457357614573615211565b6020908102919091010152600101614536565b5092915050565b60606108b661122d6145de6040518060400160405280600a81526020017f747261697456616c7565000000000000000000000000000000000000000000008152506111dc866000015160001c61481f565b611f5a6040518060400160405280600e81526020017f66756c6c547261697456616c756500000000000000000000000000000000000081525086602001516120e4565b6060816001808216900361469a57604080516001808252818301909252906020808301908036833701905050915060008260008151811061466457614664615211565b6020026020010190600481111561467d5761467d6158c9565b90816004811115614690576146906158c9565b8152505050919050565b60408051600480825260a0820190925260009160208201608080368337019050509050600060015b600581101561473f576001811b841660ff1615801590614736578160048111156146ee576146ee6158c9565b84848151811061470057614700615211565b60200260200101906004811115614719576147196158c9565b9081600481111561472c5761472c6158c9565b9052506001909201915b506001016146c2565b5081529392505050565b60606000825167ffffffffffffffff81111561476757614767614dbd565b60405190808252806020026020018201604052801561479a57816020015b60608152602001906001900390816147855790505b50905060005b8351811015614394576147df8482815181106147be576147be615211565b602002602001015160048111156147d7576147d76158c9565b60ff16612081565b8282815181106147f1576147f1615211565b60209081029190910101526001016147a0565b606061480f826131a3565b60405160200161399c9190615fa1565b606061482a82614861565b805161307882526002017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90910190815292915050565b606060806040510190506020810160405260008152806f30313233343536373839616263646566600f52600119835b600f811651938201936001850153600f8160041c1651845360081c80156120b357614890565b6040518060e0016040528060608152602001606081526020016060815260200160608152602001600060058111156148f0576148f06158c9565b815260006020820181905260409091015290565b60006020828403121561491657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ad657600080fd5b60005b83811015614961578181015183820152602001614949565b50506000910152565b60008151808452614982816020860160208601614946565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ad6602083018461496a565b6000602082840312156149d957600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0857600080fd5b60008060408385031215614a1757600080fd5b614a20836149e0565b946020939093013593505050565b600080600060608486031215614a4357600080fd5b614a4c846149e0565b9250614a5a602085016149e0565b9150604084013590509250925092565b60008060408385031215614a7d57600080fd5b82359150602083013567ffffffffffffffff811115614a9b57600080fd5b830160e08186031215614aad57600080fd5b809150509250929050565b60008060408385031215614acb57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015614b1257835183529284019291840191600101614af6565b50909695505050505050565b600080600060608486031215614b3357600080fd5b505081359360208301359350604090920135919050565b600060208284031215614b5c57600080fd5b610ad6826149e0565b8015158114610da457600080fd5b8035610c0881614b65565b60008060408385031215614b9157600080fd5b823591506020830135614aad81614b65565b60008060408385031215614bb657600080fd5b614bbf836149e0565b91506020830135614aad81614b65565b600080600080600060808688031215614be757600080fd5b614bf0866149e0565b9450614bfe602087016149e0565b935060408601359250606086013567ffffffffffffffff80821115614c2257600080fd5b818801915088601f830112614c3657600080fd5b813581811115614c4557600080fd5b896020828501011115614c5757600080fd5b9699959850939650602001949392505050565b6020808252825182820181905260009190848201906040850190845b81811015614b1257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614c86565b600080600060408486031215614ccd57600080fd5b83359250602084013567ffffffffffffffff80821115614cec57600080fd5b818601915086601f830112614d0057600080fd5b813581811115614d0f57600080fd5b8760208260051b8501011115614d2457600080fd5b6020830194508093505050509250925092565b60008060408385031215614d4a57600080fd5b614d53836149e0565b9150614d61602084016149e0565b90509250929050565b600181811c90821680614d7e57607f821691505b602082108103614db7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614e0f57614e0f614dbd565b60405290565b60405160e0810167ffffffffffffffff81118282101715614e0f57614e0f614dbd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614e7f57614e7f614dbd565b604052919050565b600067ffffffffffffffff821115614ea157614ea1614dbd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112614ede57600080fd5b8135614ef1614eec82614e87565b614e38565b818152846020838601011115614f0657600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115614f3d57614f3d614dbd565b5060051b60200190565b600082601f830112614f5857600080fd5b81356020614f68614eec83614f23565b82815260059290921b84018101918181019086841115614f8757600080fd5b8286015b84811015614fc757803567ffffffffffffffff811115614fab5760008081fd5b614fb98986838b0101614ecd565b845250918301918301614f8b565b509695505050505050565b600082601f830112614fe357600080fd5b81356020614ff3614eec83614f23565b82815260059290921b8401810191818101908684111561501257600080fd5b8286015b84811015614fc757803567ffffffffffffffff808211156150375760008081fd5b81890191506040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156150705760008081fd5b615078614dec565b8388013581529083013590828211156150915760008081fd5b61509f8c8984870101614ecd565b818901528652505050918301918301615016565b60068110610da457600080fd5b8035610c08816150b3565b60ff81168114610da457600080fd5b8035610c08816150cb565b600060e082360312156150f757600080fd5b6150ff614e15565b823567ffffffffffffffff8082111561511757600080fd5b61512336838701614ecd565b8352602085013591508082111561513957600080fd5b61514536838701614ecd565b6020840152604085013591508082111561515e57600080fd5b61516a36838701614f47565b6040840152606085013591508082111561518357600080fd5b5061519036828601614fd2565b6060830152506151a2608084016150c0565b60808201526151b360a084016150da565b60a08201526151c460c08401614b73565b60c082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156108b6576108b66151cf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615271576152716151cf565b5060010190565b7f536c6970202300000000000000000000000000000000000000000000000000008152600082516152b0816006850160208701614946565b9190910160060192915050565b7f536c6970202300000000000000000000000000000000000000000000000000008152600082516152f5816006850160208701614946565b7f2e000000000000000000000000000000000000000000000000000000000000006006939091019283015250600701919050565b600082601f83011261533a57600080fd5b8151615348614eec82614e87565b81815284602083860101111561535d57600080fd5b61146f826020830160208701614946565b600082601f83011261537f57600080fd5b8151602061538f614eec83614f23565b82815260059290921b840181019181810190868411156153ae57600080fd5b8286015b84811015614fc757805167ffffffffffffffff8111156153d25760008081fd5b6153e08986838b0101615329565b8452509183019183016153b2565b600082601f8301126153ff57600080fd5b8151602061540f614eec83614f23565b82815260059290921b8401810191818101908684111561542e57600080fd5b8286015b84811015614fc757805167ffffffffffffffff808211156154535760008081fd5b81890191506040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d0301121561548c5760008081fd5b615494614dec565b8388015181529083015190828211156154ad5760008081fd5b6154bb8c8984870101615329565b818901528652505050918301918301615432565b8051610c08816150b3565b8051610c08816150cb565b8051610c0881614b65565b60006020828403121561550257600080fd5b815167ffffffffffffffff8082111561551a57600080fd5b9083019060e0828603121561552e57600080fd5b615536614e15565b82518281111561554557600080fd5b61555187828601615329565b82525060208301518281111561556657600080fd5b61557287828601615329565b60208301525060408301518281111561558a57600080fd5b6155968782860161536e565b6040830152506060830151828111156155ae57600080fd5b6155ba878286016153ee565b6060830152506155cc608084016154cf565b60808201526155dd60a084016154da565b60a08201526155ee60c084016154e5565b60c082015295945050505050565b6000825161560e818460208701614946565b9190910192915050565b60008261564e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60007f2200000000000000000000000000000000000000000000000000000000000000808352845161568c816001860160208901614946565b7f223a22000000000000000000000000000000000000000000000000000000000060019185019182015284516156c9816004840160208901614946565b016004810191909152600501949350505050565b600083516156ef818460208801614946565b835190830190615703818360208801614946565b01949350505050565b6000855161571e818460208a01614946565b855190830190615732818360208a01614946565b8551910190615745818360208901614946565b8451910190615758818360208801614946565b019695505050505050565b6000875160206157768285838d01614946565b8851918401916157898184848d01614946565b885192019161579b8184848c01614946565b87519201916157ad8184848b01614946565b86519201916157bf8184848a01614946565b85519201916157d18184848901614946565b919091019998505050505050505050565b7f220000000000000000000000000000000000000000000000000000000000000081526000835161581a816001850160208801614946565b7f223a0000000000000000000000000000000000000000000000000000000000006001918401918201528351615857816003840160208801614946565b01600301949350505050565b6000815180845260208085019450848260051b860182860160005b858110156158bc57838303895281518051845285015160408685018190526158a88186018361496a565b9a87019a945050509084019060010161587e565b5090979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006811061592f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006020808352835160e08285015261595061010085018261496a565b9050818501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08086840301604087015261598b838361496a565b60408801518782038301606089015280518083529194508501925084840190600581901b8501860160005b828110156159e257848783030184526159d082875161496a565b958801959388019391506001016159b6565b5060608a01519650838982030160808a01526159fe8188615863565b96505050505050506080840151615a1860a08501826158f8565b5060a084015160ff811660c08501525060c084015180151560e0850152613940565b818103818111156108b6576108b66151cf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008351615a8e818460208801614946565b7f3d000000000000000000000000000000000000000000000000000000000000009083019081527f220000000000000000000000000000000000000000000000000000000000000060018201528351615aee816002840160208801614946565b7f222000000000000000000000000000000000000000000000000000000000000060029290910191820152600401949350505050565b60008651615b36818460208b01614946565b865190830190615b4a818360208b01614946565b8651910190615b5d818360208a01614946565b8551910190615b70818360208901614946565b8451910190615b83818360208801614946565b01979650505050505050565b60008451615ba1818460208901614946565b845190830190615bb5818360208901614946565b8451910190615bc8818360208801614946565b0195945050505050565b7f5b00000000000000000000000000000000000000000000000000000000000000815260008251615c0a816001850160208701614946565b7f5d000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b7f7b00000000000000000000000000000000000000000000000000000000000000815260008251615c76816001850160208701614946565b7f7d000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251615cbc818460208701614946565b7f2c00000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f646174613a000000000000000000000000000000000000000000000000000000815260008451615d23816005850160208901614946565b7f3b000000000000000000000000000000000000000000000000000000000000006005918401918201528451615d60816006840160208901614946565b8451910190615d76816006840160208801614946565b0160060195945050505050565b7f3c00000000000000000000000000000000000000000000000000000000000000815260008551615dbb816001850160208a01614946565b7f20000000000000000000000000000000000000000000000000000000000000006001918401918201528551615df8816002840160208a01614946565b8082019150507f3e000000000000000000000000000000000000000000000000000000000000008060028301528551615e38816003850160208a01614946565b7f3c2f000000000000000000000000000000000000000000000000000000000000600393909101928301528451615e76816005850160208901614946565b60059201918201526006019695505050505050565b7f786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737681527f6722200000000000000000000000000000000000000000000000000000000000602082015260008251615ee9816023850160208701614946565b9190910160230192915050565b7f3c00000000000000000000000000000000000000000000000000000000000000815260008351615f2e816001850160208801614946565b7f20000000000000000000000000000000000000000000000000000000000000006001918401918201528351615f6b816002840160208801614946565b7f2f3e00000000000000000000000000000000000000000000000000000000000060029290910191820152600401949350505050565b60007f22000000000000000000000000000000000000000000000000000000000000008083528351615fda816001860160208801614946565b60019301928301525060020191905056000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e446f636b6d6173746572204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002444d000000000000000000000000000000000000000000000000000000000000